Android Studio 3.1を使用してAndroid Pのアプリを作成すると、apkを作成できますが、Android Pエミュレータで使用するとクラッシュして情報の下にスローされます。 。
Java.lang.NoClassDefFoundError:Lorg/Apache/http/ProtocolVersionの解決に失敗しました
appモジュールの下にあるbuild.gradleの一部が以下にありますが、これに出会ったことがある人はいますか。どうもありがとう。
Android {
compileSdkVersion 'Android-P'
buildToolsVersion '28-rc1'
useLibrary 'org.Apache.http.legacy'
//for Lambda
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
defaultConfig {
applicationId "xxx.xxx.xxx"
minSdkVersion 17
targetSdkVersion 27
versionCode xxxx
versionName "Vx.x.x"
multiDexEnabled true
//other setting required
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
更新:これはもはやバグや回避策ではなく、アプリがAPIレベル28(Android 9.0)以上をターゲットとしており、Google Maps SDKを使用する場合に必要ですAndroid 16.0.0以前(またはアプリでApache HTTP Legacyライブラリを使用している場合)。 公式ドキュメント に含まれるようになりました。公開の問題は、意図された動作として closed でした。
これは bug です。GooglePlay Services側では、修正されるまで、これをAndroidManifest.xml
タグ内の<application>
に追加することで回避できるはずです。
<uses-library Android:name="org.Apache.http.legacy" Android:required="false" />
このリンク Android-9.0-changes-28 - > Apache HTTPクライアントの非推奨 あなたのAndroidManifest.xmlに以下を追加する理由を説明します:
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
Android 6.0では、Apache HTTPクライアントのサポートが削除されました。 Android 9以降、そのライブラリはbootclasspathから削除され、デフォルトではアプリで利用できなくなりました。
以下のいずれかを行います。
1 - play-services-mapsライブラリを最新バージョンに更新します。
com.google.Android.gms:play-services-maps:16.1.0
2-または<application>
のAndroidManifest.xml
要素内に次の宣言を含めます。
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
Androidのバグ追跡システムでも報告されています: https://issuetracker.google.com/issues/79478779
Android 9.0 Pieでorg.Apache.http.legacyを完全に実行するには、xmlファイルres/xml/network_security_config.xml
を作成してください。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
AndroidManifest.xmlに2つのタグを追加します
Android:networkSecurityConfig = "@ xml/network_security_config" Android:name = "org.Apache.http.legacy"
<?xml version="1.0" encoding="utf-8"?>
<manifest......>
<application Android:networkSecurityConfig="@xml/network_security_config">
<activity..../>
......
......
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false"/>
</application>
アプリビルドグラドルにuseLibrary 'org.Apache.http.legacy'
を追加する
Android {
compileSdkVersion 28
defaultConfig {
applicationId "your application id"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
useLibrary 'org.Apache.http.legacy'
}
Com.google.Android.gms:play-services-maps:16.0.0以下を使用していて、アプリがAPIレベル28(Android 9.0)以上をターゲットにしている場合は、AndroidManifestの要素内に次の宣言を含める必要があります。 xml.
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
これは、com.google.Android.gms:play-services-maps:16.1.0を使用している場合に処理されます。アプリが低いAPIレベルをターゲットにしている場合は不要です。
this SO answer によると、解決されたように見えるAWS SDKバグが原因です SDKのバージョン2.6.30で バージョンを新しいものにすると、問題の修正に役立ちます。
古いjarでAndroid 9.0を使用する場合は、使用する必要があります。あなたのメインフェストファイルに。
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>