簡體   English   中英

Android 谷歌地圖 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。是否會導致此問題。

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) 

把它放在 Manifest <application>標簽中:

<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- 或者在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" />

如果您的應用面向 API 級別 28 (Android 9.0) 或更高版本,則必須在 AndroidManifest.xml 的元素中包含以下聲明。 在下面的鏈接中查看面向 28 歲以上的應用程序的行為變化

https://developer.android.com/about/versions/pie/android-9.0-changes-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 {

        }
    }
}

創建一個 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>

還要在您的應用程序構建 gradle 中添加 useLibrary 'org.apache.http.legacy'

defaultConfig {
        applicationId "com.ascorb"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 6
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        useLibrary 'org.apache.http.legacy'
    }

在清單文件中添加權限

`<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

欲了解更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM