web-dev-qa-db-ja.com

AndroidのGoogleマップJava.lang.NoClassDefFoundError:の解決に失敗した:Lorg/Apache/http/ProtocolVersion

GoogleマップのAndroid SDK 11.6.2を使用しています(15.0.1も試しました)が、マップが表示される前にクラッシュが発生します。マニフェストで既にAPIキーをチェックしている、それは利用可能ですが、それでもこの問題は発生します。私は28としてtargetSDkバージョンを持っています。それはこの問題を引き起こします。

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) 
142
Ramprasad

これをManifestの<application>タグに入れます。

<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>

詳細情報: https://issuetracker.google.com/issues/79478779

317
ham

これでクラッシュは解決します。マニフェストにこれを適用する

 <application
             ...
             >
             ...
          <uses-library Android:name="org.Apache.http.legacy" 
           Android:required="false"/>
             ...


<application/>
30
Nicky

次の解決策のいずれかを実行してください。

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" />
11
Darush

アプリがAPIレベル28(Android 9.0)以上をターゲットにしている場合は、AndroidManifest.xmlの<application>要素内に次の宣言を含める必要があります。

 <uses-library
       Android:name="org.Apache.http.legacy"
  Android:required="false" />
5
Suman

アプリがAPIレベル28(Android 9.0)以上をターゲットにしている場合、AndroidManifest.xmlの要素内に次の宣言を含める必要があります。下のリンクで28+をターゲットにしたアプリの動作の変更を確認

https://developer.Android.com/about/versions/pie/Android-9.0-changes-28https://developer.Android.com/about/versions/pie/Android-9.0-changes-28

1
creativecoder

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'も追加します。

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'
    }
0
Sudhir singh

これがAndroid 8.0以降で発生する場合は、この行をマニフェストアプリケーションタグに入れるだけです

<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
0

Tisを設定:

multiDexEnabled true

このような:

Android {
    compileSdkVersion 28
    defaultConfig {

        multiDexEnabled true

    }
    buildTypes {
        release {

        }
    }
}
0
reza_khalafi