Я использую Google Maps Android SDK 11.6.2 (также пробовал 15.0.1), но я получаю следующий сбой до отображения карты. Ключ API уже проверен в манифесте, он доступен, но проблема все еще возникает. У меня версия targetSDk 28, это вызывает эту проблему.
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)
Эта проблема возникает в Android P ... хорошо работает на Android 5
Получил тоже такое бывает только на Android P beta 2.
Я тоже получил эту ошибку. Использование Android Studio и ее эмулятора.
Те, кто видит эту ошибку на уровне API 28 (Android 9.0), документы Google Maps теперь описывают необходимая запись в манифесте.
Как исправить то же самое с Nativescript? stackoverflow.com/questions/53324898/…
Я использую это на галактике Samsung s8 и s9 и все еще не работаю. любое другое решение?
Поместите это в тег манифеста <application>:
<uses-library android:name = "org.apache.http.legacy" android:required = "false"/>
Больше информации: https://issuetracker.google.com/issues/79478779
Это решило проблему. Но не совсем понимаю, зачем это нужно. MapsActivity, который я использовал, казался обычным.
Android 9.0 уже выпущен, и Google до сих пор не исправил библиотеку карт и не задокументировал, что она требует наличия этой библиотеки. Очень плохая поддержка разработчиков.
@headsvk Google задокументировал это, см .: developers.google.com/maps/documentation/android-sdk/…
Тем не менее, поддержка HTTP-клиента Apache была удалена с Android 6: https://developer.android.com/about/versions/marshmallow/and roid-6.0-changes # beh avior-apache-http-cl ient
Это также исправило java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/BasicNameValuePair; после того, как я переключился на AndroidX (и последующее увеличение предела методов 65K)
снижает ли устаревший режим производительность карты? с несколькими маркерами и кластерами?
Это также сработало и при реагировании на native, когда приложение вылетало при загрузке карт.
Это полностью решило проблему для меня в версии Android P.
Это разрешит ваш сбой. Применить это в манифесте
<application
...
>
...
<uses-library android:name = "org.apache.http.legacy"
android:required = "false"/>
...
<application/>
Для чего нужен android:usesCleartextTraffic = "true"? В других ответах эта строка не упоминается. Так необязательно?
@ TimoBähr это не часть ответа. Ответ - это то, что сказал Хэм, ответ Ники дает более ясное представление о том, что вы должны вставить эту строку в теги приложения.
@ TimoBähr android:usesCleartextTraffic = "true" - это проблема, которую вы получите позже, это сделано в целях безопасности.
@ Lester.L Если я объявлю android:usesCleartextTraffic=”true”, это позволит общаться с помощью HTTP-ссылок в открытом виде - это статус-кво. Так что, насколько я понимаю, только android:usesCleartextTraffic=”false” сделает приложение более «безопасным». Пожалуйста, поправьте меня, если я ошибаюсь.
Я удалил это. Он не имеет ничего общего с самим собой и не отвечает сам по себе и, возможно, может вызвать некоторое нарушение безопасности, если кто-то скопирует и вставит его.
Хорошо, но когда я нажимаю кнопку возврата, это все еще отображается в журнале -> 2019-06-11 23: 11: 26.279 8522-8522 / com.example.myweatherapp E / SchedPolicy: set_timerslack_ns write failed: Operation not allowed
Выполните одно из следующих решений:
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" />
Оба решения поддерживаются этим документом Google: developers.google.com/maps/documentation/android-sdk/…
Если ваше приложение нацелено на уровень API 28 (Android 9.0) или выше, вы должны включить следующее объявление в элемент <application> файла AndroidManifest.xml.
<uses-library
android:name = "org.apache.http.legacy"
android:required = "false" />
создать файл 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' в Gradle сборки вашего приложения.
defaultConfig {
applicationId "com.ascorb"
minSdkVersion 19
targetSdkVersion 28
versionCode 6
versionName "1.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
useLibrary 'org.apache.http.legacy'
}
Если ваше приложение нацелено на уровень API 28 (Android 9.0) или выше, вы должны включить следующее объявление в элемент AndroidManifest.xml. см. изменения в поведении приложений с таргетингом 28+ по ссылке ниже
https://developer.android.com/about/versions/pie/android-9.0-changes-28
Если это происходит в 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 {
}
}
}
Добавить разрешения в файле манифеста
`<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"/>`
У меня была такая же проблема, и она была исправлена.
Вот решение
<uses-library android:name = "org.apache.http.legacy" android:required = "false" />
Добавление этой строки в ваш Menifest.xml внутри тега <application>
для получения дополнительной информации
В defaultConfig уже есть multiDexEnabled true