あるアプリをアップデートするために、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 クラスが利用できます)。