0

Android プロジェクト (クラスパスに追加) で HttpClient 4.2.5 を使用する必要があります。問題は、実行時に Android が API に登録されているデフォルトの HttpClient を使用することです。これにはすべてのクラスとメソッドがあるわけではないため、次のようなエラーが発生します。

java.lang.NoSuchMethodError: org.apache.http.impl.client.DefaultHttpClient.setRedirectStrategy

この問題を修正して、クラスパス内のバージョンで実行し、埋め込まれたバージョンを無視するにはどうすればよいですか? クラスパス ライブラリの順序を変更しようとしましたが、うまくいきませんでした。

4

2 に答える 2

1

HttpClientAndroidLibを使用できます。今のところ HttpClient 4.2.3 に基づいていますが、あなたのニーズには十分だと思います。この lib の作成者は、元の HttpClient のすべてのパッケージの名前を変更することで、制限を回避しています。

于 2013-05-19T07:54:59.230 に答える
1

Android は bootclasspath 経由で HttpClient を取得しているようです。その場合、クラスパス上の JAR の順序は関係ありません。

これが「本当の Java(tm)」である場合、JVM の起動時に別の bootclasspath を使用することでこれを解決できますが、Android アプリでこれを行うことはできないと思います1

私が提案できる最善の方法は、HttpClient とその依存関係のソースをスナーフし、パッケージ名全体を微調整し、新しい JAR を構築することです。次に、微調整したパッケージ名でインポートして、新しいクラスを使用するようにアプリ コードを変更します。


1 - アプリが別の bootclasspath を指定できるようにすると、悪意のあるアプリに新たな潜在的な攻撃ベクトルが提供されます。Android が Davlik VM の外部にセキュリティを実装することになっていることは知っていますが、VM に実装されている 2 番目の防御線を削除することは依然として悪い考えです。

于 2013-05-19T05:51:56.760 に答える