Ответ 1
Поместите это в <application>
Manifest:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Дополнительная информация: https://issuetracker.google.com/issues/79478779
Я использую карты Google Android SDK 11.6.2 (также попробовал 15.0.1), но после сбоев карты я вижу следующий сбой. Уже проверенный ключ API в манифесте, он доступен, но все же эта проблема возникает. У меня есть версия targetSDk как 28. Является ли это причиной этой проблемы.
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
at el.b(:[email protected]@12.8.48 (100408-196123505):3)
at ek.a(:[email protected]@12.8.48 (100408-196123505):4)
at em.a(:[email protected]@12.8.48 (100408-196123505):51)
at com.google.maps.api.android.lib6.drd.ap.a(:[email protected]@12.8.48 (100408-196123505):11)
at dw.a(:[email protected]@12.8.48 (100408-196123505):16)
at dw.run(:[email protected]@12.8.48 (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(:[email protected]@12.8.48 (100408-196123505):25)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at el.b(:[email protected]@12.8.48 (100408-196123505):3)
at ek.a(:[email protected]@12.8.48 (100408-196123505):4)
at em.a(:[email protected]@12.8.48 (100408-196123505):51)
at com.google.maps.api.android.lib6.drd.ap.a(:[email protected]@12.8.48 (100408-196123505):11)
at dw.a(:[email protected]@12.8.48 (100408-196123505):16)
at dw.run(:[email protected]@12.8.48 (100408-196123505):61)
Поместите это в <application>
Manifest:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Дополнительная информация: https://issuetracker.google.com/issues/79478779
Это разрешит ваш сбой. Примените это в манифесте
<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) или выше, вы должны включить следующее объявление в элемент <application>
файла AndroidManifest.xml.
<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>
И добавьте 2 тега тега в свой 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>
Также добавьте 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"/>
Установите это:
multiDexEnabled true
Вот так:
android {
compileSdkVersion 28
defaultConfig {
multiDexEnabled true
}
buildTypes {
release {
}
}
}
Добавить разрешения в файл манифеста
'<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION."/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>'
и частично поместите эту строку кода
' <uses-library android:name="org.apache.http.legacy" android:required="false"/>'
У меня была та же проблема, и это было исправлено.
<application
...
android:usesCleartextTraffic="true"
...
>
...
<uses-library android:name="org.apache.http.legacy"
android:required="false"/>
...
<application/>