android: DefaultHttpClientクラスが見つからない

あるアプリをアップデートするために、targetSdkVersion=28にして、もろもろ調整してようやくビルドして、AVDで実行してみると、AVD Android 9.0で、LogCatにエラーが。DefaultHttpClientが見つからないようです。

〜省略〜
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/DefaultHttpClient;
〜省略〜
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.impl.client.DefaultHttpClient" on path: DexPathList

org.apache.http パッケージは、Android 6.0(API Level=23)のとき、サポートから削除されましたが、build.gradleに次の設定をすることで、引き続き利用できていました。

// app/build.gradle

android {
  useLibrary 'org.apache.http.legacy'
}Code language: JavaScript (javascript)

AndroidManifest.xmlに追加設定すると、今回も延命できました。

<application>
  <uses-library android:name="org.apache.http.legacy" android:required="false" />Code language: HTML, XML (xml)

動作の変更点: API レベル 28+ をターゲットとするアプリ | Android Developersによると

Apache HTTP クライアントのサポート終了
Android 6.0 では、Apache HTTP クライアントのサポートが削除されました。 Android 9 以降では、そのライブラリが bootclasspath から削除されており、デフォルトでアプリで利用できません。
Android 9 以降をターゲットにしているアプリでは、Apache HTTP クライアントの使用を継続するために、次のコードを AndroidManifest.xml に追加できます。
<uses-library android:name="org.apache.http.legacy" android:required="false"/>

注: API レベルが 24 未満の端末では、org.apache.http.legacy ライブラリが利用できないため、23 以前の最小 SDK を使用しているアプリには android:required="false" 属性が必要です (これらの端末では、bootclasspath で Apache HTTP クラスが利用できます)。

タイトルとURLをコピーしました