it-swarm.com.de

java.lang.NoClassDefFoundError: Fehlgeschlagene Auflösung von: Lorg / Apache / http / ProtocolVersion

Ich bin auf einen solchen Fehler gestoßen, als ich mit Android Studio 3.1 eine Android P-App erstellt habe. Die apk kann erstellt werden, aber wenn ich sie auf dem Android P-Emulator verwende, dann wird abstürzen und unter Info werfen, weitere Details siehe Bild.

Java.lang.NoClassDefFoundError: Fehlgeschlagene Auflösung von: Lorg/Apache/http/ProtocolVersion

enter image description here

teil meines build.gradle unter App-Modul ist unten, jemand dies zu erfüllen und einige Vorschläge zu geben? Danke vielmals.

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'

        }
239
dukeking

Update: Dies ist kein Bug oder Workaround mehr. Es ist erforderlich, wenn Ihre App API Level 28 (Android 9.0) oder höher als Ziel hat und das Google Maps SDK verwendet für Android 16.0.0 oder niedriger (oder wenn Ihre App die Apache HTTP Legacy-Bibliothek verwendet). Es ist jetzt in den offiziellen Dokumenten enthalten. Die öffentliche Ausgabe wurde geschlossen als beabsichtigtes Verhalten.

Dies ist ein Fehler auf der Seite der Google Play Services. Bis es behoben ist, sollten Sie in der Lage sein, dies zu umgehen, indem Sie dies zu Ihrem AndroidManifest.xml innerhalb des <application> -Tags hinzufügen:

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

Dieser Link Android-9.0-changes-28 -> Apache HTTP-Client-Verfall erklärt den Grund, warum Sie Folgendes zu Ihrer AndroidManifest.xml hinzufügen:

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

Mit Android 6.0 haben wir die Unterstützung für den Apache HTTP-Client entfernt. Ab Android 9 wird diese Bibliothek aus dem Bootklassenpfad entfernt und steht Apps standardmäßig nicht zur Verfügung.

36
pradip tilala

Führen Sie einen der folgenden Schritte aus:

1- Aktualisiere die play-services-maps Bibliothek auf die neueste Version:

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

2- Oder fügen Sie die folgende Deklaration in das <application> -Element von AndroidManifest.xml ein.

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

Es wird auch auf Android Bug-Tracker gemeldet: https://issuetracker.google.com/issues/79478779

14
Benoit

Um org.Apache.http.legacy in Android 9.0 Pie perfekt auszuführen, erstellen Sie eine XML-Datei 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>

Und fügen Sie Ihrem AndroidManifest.xml 2 Tags hinzu

Android: networkSecurityConfig = "@ xml/network_security_config" Android: name = "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>

Füge auch useLibrary 'org.Apache.http.legacy' in dein App Build Gradle ein

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'
}
11
Gitesh

Wenn Sie com.google.Android.gms: play-services-maps: 16.0.0 oder niedriger verwenden und Ihre App auf API-Level 28 (Android 9.0) oder höher ausgerichtet ist, müssen Sie die folgende Deklaration in das Element von AndroidManifest aufnehmen. xml.

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

Dies wird für Sie erledigt, wenn Sie com.google.Android.gms: play-services-maps: 16.1.0 verwenden. Dies ist nicht erforderlich, wenn Ihre App auf eine niedrigere API-Ebene abzielt.

3
jeevashankar

Laut this SO answer tritt dies aufgrund eines AWS SDK-Fehlers auf, der anscheinend behoben ist in Version 2.6.30 des SDK , also Aktualisierung Die neuere Version kann Ihnen bei der Behebung des Problems helfen.

0
Carlos Daniel

Wenn Sie Android 9.0 mit Legacy-Jar verwenden, müssen Sie verwenden. in deiner mainfest Datei.

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

0
Suresh kumar