364 votes

java.lang.NoClassDefFoundError:échec de la résolution de :Lorg/apache/http/ProtocolVersion

Je rencontre cette erreur lorsque j'utilise Android Studio pour créer mon application. L'APK est compilé, mais lorsque je tente d'exécuter l'application sur l'émulateur Android P, elle se bloque et affiche l'erreur suivante. Veuillez voir plus de détails dans les pièces jointes :

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

enter image description here

Voici mon fichier build.grade. Si quelqu'un a une suggestion sur ce que pourrait être le problème, je l'apprécierais. Merci beaucoup.

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

899voto

AdamK Points 1629

_Mise à jour : il ne s'agit plus d'un bogue ou d'une solution de contournement, mais d'un élément obligatoire si votre application vise le niveau 28 de l'API (Android 9.0) ou plus et utilise le SDK Google Maps pour Android 16.0.0 ou moins (ou si votre application utilise la bibliothèque Apache HTTP Legacy). Elle est désormais incluse dans le fichier documents officiels . L'enjeu public a été fermé comme un comportement voulu._

Il s'agit d'un bogue du côté de Google Play Services, jusqu'à ce qu'il soit corrigé, vous devriez être en mesure de contourner le problème en ajoutant ceci à vos AndroidManifest.xml à l'intérieur de la <application> étiquette :

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

90 votes

Il ne s'agit plus d'une solution de contournement. C'est la méthode correcte maintenant developers.google.com/maps/documentation/Android-sdk/

0 votes

@AdamK, Android 9 est au niveau 28 de l'API =P (ce n'est pas un bug du côté serveur, mais un changement de comportement de P).

12 votes

Quelqu'un qui n'utilise pas de cartes rencontre-t-il le même problème ?

63voto

pradip tilala Points 1001

Ce lien Android-9.0-changes-28-->Dépréciation du client HTTP Apache explique la raison de l'ajout de ce qui suit à votre AndroidManifest.xml :

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

Avec Android 6.0, nous avons supprimé la prise en charge du client HTTP Apache. À partir d'Android 9, cette bibliothèque est supprimée des bootclasspath et n'est pas disponible pour les applications par défaut.

37voto

Darush Points 3150

Faites l'une des choses suivantes :

1- Mettre à jour le play-services-maps à la dernière version :

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

2- Ou bien inclure la déclaration suivante dans le fichier <application> élément de AndroidManifest.xml .

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

3 votes

Encore une fois, c'est une grande honte pour les développeurs d'Android 9 et bien sûr pour Google. J'espère qu'ils réviseront l'implémentation et le comportement d'Android 9 car il comporte de nombreux bugs. Malheureusement, Google insiste pour appeler ces bugs, des changements de comportement !

23voto

Sarry Points 31

Si vous utilisez Android 9.0 avec le jar legacy, vous devez utiliser. dans votre fichier mainfest.

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

15voto

Benoit Points 721

Il est également signalé sur le bug tracker d'Android : https://issuetracker.google.com/issues/79478779

1 votes

Et c'est aussi dans la documentation developers.google.com/maps/documentation/Android-sdk/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X