J'utilise Google maps Android SDK 11.6.2 (j'ai également essayé la version 15.0.1), mais je subis un crash après l'affichage des cartes. La clé API déjà vérifiée dans le manifeste est disponible, mais le problème persiste. J'ai la version de targetSDk en 28.Il est à l'origine de ce problème.
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)
Mettez ceci dans le manifeste <application>
tag:
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
Plus d'infos: https://issuetracker.google.com/issues/79478779
Cela résoudra votre crash. Appliquer ceci dans manifeste
<application
...
>
...
<uses-library Android:name="org.Apache.http.legacy"
Android:required="false"/>
...
<application/>
Effectuez l'une des solutions suivantes:
1- Mettez à jour la bibliothèque play-services-maps vers la dernière version:
com.google.Android.gms:play-services-maps:16.1.0
2- Ou incluez la déclaration suivante dans l'élément <application>
de AndroidManifest.xml
.
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
Si votre application cible une API de niveau 28 (Android 9.0) ou supérieur, vous devez inclure la déclaration suivante dans l'élément <application>
d'AndroidManifest.xml.
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
Si votre application cible une API de niveau 28 (Android 9.0) ou supérieur, vous devez inclure la déclaration suivante dans l'élément AndroidManifest.xml. voir les changements de comportement de l'application ciblant les 28 ans et plus dans le lien ci-dessous
https://developer.Android.com/about/versions/pie/Android-9.0-changes-28
créer un fichier 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>
Et ajoutez 2 balises tag dans votre AndroidManifest.xml
<?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>
Ajoutez également useLibrary 'org.Apache.http.legacy' dans le dégradé de construction de votre application.
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'
}
Si cela se produit dans Android 8.0 ou version ultérieure, il suffit de mettre cette ligne dans la balise de votre application manifeste
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
Set tis:
multiDexEnabled true
Comme ça:
Android {
compileSdkVersion 28
defaultConfig {
multiDexEnabled true
}
buildTypes {
release {
}
}
}