Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion
Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion
我正在使用 Google 地图 Android SDK 11.6.2(也尝试过 15.0.1),但我在地图显示之前发生以下崩溃。已检查清单中的 API 键,它可用,但仍然出现此问题。我的 targetSDk 版本为 28.Is 它导致了这个问题。
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@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(:com.google.android.gms.dynamite_dynamiteloader@12848063@12.8.48 (100408-196123505):25)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61)
将其放入清单 <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- 或者在 AndroidManifest.xml
的 <application>
元素中包含以下声明。
<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" />
创建一个 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' 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 的元素中包含以下声明。
请参阅下方 link
中面向 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"/>
设置为:
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" />
将此行添加到 <application>
标签内的 Menifest.xml
了解更多信息
我正在使用 Google 地图 Android SDK 11.6.2(也尝试过 15.0.1),但我在地图显示之前发生以下崩溃。已检查清单中的 API 键,它可用,但仍然出现此问题。我的 targetSDk 版本为 28.Is 它导致了这个问题。
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@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(:com.google.android.gms.dynamite_dynamiteloader@12848063@12.8.48 (100408-196123505):25)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61)
将其放入清单 <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- 或者在 AndroidManifest.xml
的 <application>
元素中包含以下声明。
<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" />
创建一个 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' 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 的元素中包含以下声明。 请参阅下方 link
中面向 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"/>
设置为:
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" />
将此行添加到 <application>
标签内的 Menifest.xml
了解更多信息