GoogleマップのAndroid SDK 11.6.2を使用しています(15.0.1も試しました)が、マップが表示される前にクラッシュが発生します。マニフェストで既にAPIキーをチェックしている、それは利用可能ですが、それでもこの問題は発生します。私は28としてtargetSDkバージョンを持っています。それはこの問題を引き起こします。
Java.lang.NoClassDefFoundError: Failed resolution of: Lorg/Apache/http/ProtocolVersion;
at el.b(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):3)
at ek.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):4)
at em.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):51)
at com.google.maps.api.Android.lib6.drd.ap.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):11)
at dw.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):16)
at dw.run(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):61)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "org.Apache.http.ProtocolVersion" on path: DexPathList[[Zip file "/system/priv-app/PrebuiltGmsCorePi/app_chimera/m/MapsDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.Android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi-v7a, /data/user_de/0/com.google.Android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:126)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
at ad.loadClass(:com.google.Android.gms.dynamite_dynamiteloader@[email protected] (100408-196123505):25)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
at el.b(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):3)
at ek.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):4)
at em.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):51)
at com.google.maps.api.Android.lib6.drd.ap.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):11)
at dw.a(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):16)
at dw.run(:com.google.Android.gms.dynamite_mapsdynamite@[email protected] (100408-196123505):61)
これをManifestの<application>
タグに入れます。
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
これでクラッシュは解決します。マニフェストにこれを適用する
<application
...
>
...
<uses-library Android:name="org.Apache.http.legacy"
Android:required="false"/>
...
<application/>
次の解決策のいずれかを実行してください。
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" />
アプリがAPIレベル28(Android 9.0)以上をターゲットにしている場合は、AndroidManifest.xmlの<application>
要素内に次の宣言を含める必要があります。
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
アプリがAPIレベル28(Android 9.0)以上をターゲットにしている場合、AndroidManifest.xmlの要素内に次の宣言を含める必要があります。下のリンクで28+をターゲットにしたアプリの動作の変更を確認
https://developer.Android.com/about/versions/pie/Android-9.0-changes-28
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つのタグを追加します
<?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'も追加します。
defaultConfig {
applicationId "com.ascorb.merazinn"
minSdkVersion 19
targetSdkVersion 28
versionCode 6
versionName "1.2"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
useLibrary 'org.Apache.http.legacy'
}
これがAndroid 8.0以降で発生する場合は、この行をマニフェストアプリケーションタグに入れるだけです
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
Tisを設定:
multiDexEnabled true
このような:
Android {
compileSdkVersion 28
defaultConfig {
multiDexEnabled true
}
buildTypes {
release {
}
}
}