4

これが例外の核心です。

12-12 10:37:50.090: E/AndroidRuntime(8277): Caused by: java.lang.NoSuchMethodError: org.apache.http.conn.scheme.Scheme.<init>

Apachehttpclient4.2.2を使用しています。ただし、Androidは、バンドルされている古いApachehttpclientライブラリを使用する方が適切であると判断しました。

この例外を回避するにはどうすればよいですか?

念のため:この例外はクローズドソースライブラリによってスローされるため、org.apache名前空間を変更することはできません。

4

2 に答える 2

3

ただし、Androidは、バンドルされている古いApachehttpclientライブラリを使用する方が適切であると判断しました。

Googleは下位互換性を重視しています。お気づきのとおり、HttpClientにはさまざまなバージョンのさまざまなAPIがあるため、GoogleがHttpClientをアップグレードすると、既存のすべてのアプリが機能しなくなります。Android 1.x用に作成されたアプリがAndroid4.xなどで動作するように、Googleは一貫したパブリックAPIを維持する必要があります。残念ながら、GoogleはHttpClientのバージョンを選択したため、新しいHttpClientバージョンのパブリックAPIが急速に機能しなくなりました。

この例外を回避するにはどうすればよいですか?

jarjarまたは同等のものを使用して、HttpClientライブラリのコピーを別のパッケージ名にリファクタリングしてから使用します。

この例外はクローズドソースライブラリによってスローされるため、org.apache名前空間を変更することはできません。

次に、クローズドソースライブラリを別のものに置き換えます。明らかに、クローズドソースライブラリがHttpClient 4.2.2を必要とする場合、そのクローズドソースライブラリはAndroidで機能せず、Androidの開発者によってサポートされていません。HttpClientの問題を乗り越えたとしても(たとえば、ROM modを介して-以下を参照)、Androidとの互換性に関して、このライブラリには他の問題がある可能性があります。

または、Androidソースコードをダウンロードし、HttpClientバージョンを独自のバージョンに置き換え、改訂されたAndroidソースコードをビルドし、結果をROM modに注ぎ、ROMmodを目的のデバイスにインストールします。途中で、既存のアプリをテストして、変更によって壊れないことを確認してください(ほとんどの場合、を使用しますHttpUrlConnectionが、そうでない場合もあります)。

于 2012-12-12T12:15:08.453 に答える
0

このリンクが役立つ場合があります。これは、Android用のHttpClient 4.2.3の再パッケージ化であり、プロジェクトでライブラリjar/外部ライブラリとして参照できます。

http://code.google.com/p/httpclientandroidlib/

于 2013-11-27T22:38:31.713 に答える