java.lang.NoClassDefFoundError: başarısız çözümlemesi: Lorg / apache / http / ProtocolVersion


324

Bir Android P uygulaması oluşturmak için Android studio 3.1 kullandığımda böyle bir hatayla karşılaştım, apk yapılabilir, ancak Android P emülatöründe kullandığımda çökecek ve bilgilerin altına atılacak, daha fazla ayrıntı resme bakın .

java.lang.NoClassDefFoundError: başarısız çözümlemesi: Lorg / apache / http / ProtocolVersion

resim açıklamasını buraya girin

App modülü altındaki build.gradle'ın bir kısmı aşağıda, kimse bunu karşılıyor mu? Çok teşekkürler.

android {

     compileSdkVersion 'android-P'
     buildToolsVersion '28-rc1'

    useLibrary 'org.apache.http.legacy'

    //for Lambda
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

    packagingOptions {

        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    defaultConfig {
        applicationId "xxx.xxx.xxx"
        minSdkVersion 17
        targetSdkVersion 27
        versionCode xxxx
        versionName "Vx.x.x"

        multiDexEnabled true


     //other setting required
        ndk {

            abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64'

        }

Yanıtlar:


836

Güncelleme: Bu artık bir hata veya geçici çözüm değil, uygulamanızın API Seviye 28'i (Android 9.0) veya daha üstünü hedeflemesi ve Android 16.0.0 veya daha düşük sürümler için Google Haritalar SDK'sını (veya uygulamanız Apache HTTP kullanıyorsa) gereklidir. Eski kitaplık). Artık resmi belgelere dahil edilmiştir . Kamu meselesi amaçlanan davranış olarak kapatılmıştır .

Bu, Google Play Hizmetleri tarafındaki bir hatadır , düzeltilinceye kadar bunu etiketinizin AndroidManifest.xmliçine ekleyerek geçici bir çözüm bulmanız gerekir <application>:

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

84
Bu artık bir çözüm değil. Şimdi doğru şekilde bu developers.google.com/maps/documentation/android-sdk/…
Kevin Robatel

@AdamK, Android 9 API seviye 28'dir. = P (sunucu tarafında bir hata değil, P davranış değişikliği hakkında)
Fung LAM

10
Bunu yaşayan haritaları kullanmayan var mı?
Robin Dijkhof

2
Evet, Apache HTTP Eski kitaplığını (veya bağımlılıklarınızdan birini kullanırsanız) da kullanabilirsiniz.
AdamK

2
Apache HTTP Eski kitaplığını kullanıyorum ve bu beni kurtardı. Teşekkür ederim!
Eric B.


33

Aşağıdakilerden herhangi birini yapın:

1- Play-services-maps kütüphanesini en son sürüme güncelleyin:

com.google.android.gms:play-services-maps:16.1.0

2- Ya da <application>elemanına aşağıdaki beyanı ekleyiniz AndroidManifest.xml.

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

3
Yine Android 9 geliştiricileri ve elbette Google için büyük bir utanç. Umarım birçok hata olduğu için Android 9 uygulamasını ve davranışını revize ederler. Ne yazık ki, Google bu hataları çağırmak, davranış değişiklikleri konusunda ısrar ediyor!
saeed khalafinejad

20

Android 9.0'ı eski kavanoz ile kullanıyorsanız, kullanmak zorundasınız. ana dosyasında.

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


17

Android 9.0 Pie'da org.apache.http.legacy'yi mükemmel şekilde çalıştırmak için bir xml dosyası oluşturun 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 dosyasına 2 etiket etiketi ekleyin

android: networkSecurityConfig = "@ xml / network_security_config" android: ad = "org.apache.http.legacy"

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

Ayrıca useLibrary 'org.apache.http.legacy'uygulama oluşturma sınıfınıza ekleyin

android {
compileSdkVersion 28
defaultConfig {
    applicationId "your application id"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    useLibrary 'org.apache.http.legacy'
}

Bu, herkese açık bir uygulama başlatmak istediğinizde yapmamanız gereken bir şeye benziyor. Gelişim için belki mantıklı, ama o zaman hala üretim üzerinde çalışmayacak, bu yüzden hiçbir anlamı yok.
Maciej Pigulski

Bu cevap cevap kabul edilmelidir, birçok yol denedim ama işe yaramadı. Good Job @Gitesh
Mitesh Jain

16

AndroidManifest.xml dosyasında bu iki satırı ekleyin.

android:usesCleartextTraffic="true"  
<uses-library android:name="org.apache.http.legacy" android:required="false"/>

Aşağıdaki koda bakın

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:theme="@style/AppTheme"
        tools:ignore="AllowBackup,GoogleAppIndexingWarning">
        <activity android:name=".activity.SplashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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



8

Com.google.android.gms: play-services-maps: 16.0.0 veya daha düşük sürümünü kullanıyorsanız ve uygulamanız API 28 seviyesini (Android 9.0) veya daha üstünü hedefliyorsa, AndroidManifest öğesi içine aşağıdaki bildirimi eklemeniz gerekir. xml.

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

Com.google.android.gms: play-services-maps: 16.1.0 kullanıyorsanız bu sizin için yapılır ve uygulamanız daha düşük bir API düzeyini hedefliyorsa gerekli değildir.


5

Yerel tepki, ben haritalar göstermek ve uygulamayı kapatmak, adb logcat çalıştırmak ve konsol içinde hata göstermek hata vardı:

java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion

androidManifest.xml içine ekleyerek düzeltin

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.