J'ai rencontré une telle erreur lorsque j'utilise Android studio 3.1 pour créer une application de AndroidP, l'apk peut être créé, mais lorsque je l'utilise sur Android P émulateur, il va planter et jeter ci-dessous les informations, plus de détails voir la photo.
Java.lang.NoClassDefFoundError: échec de la résolution de: Lorg/Apache/http/ProtocolVersion
une partie de mon build.gradle sous le module App est ci-dessous, tout le monde le rencontre? Et donne quelques suggestions? 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'
}
Mise à jour: il ne s'agit plus d'un bogue, ni d'une solution de contournement; il est obligatoire si votre application cible l'API de niveau 28 (Android 9.0) ou supérieur et utilise le SDK Google Maps. pour Android 16.0.0 ou inférieur (ou si votre application utilise la bibliothèque Apache HTTP Legacy). Il est maintenant inclus dans le document officiel . Le problème public a été fermé comme comportement prévu.
Ceci est un bug du côté des services Google Play. Jusqu'à ce que cela soit corrigé, vous devriez pouvoir contourner le problème en ajoutant ceci à votre AndroidManifest.xml
à l'intérieur de la balise <application>
:
<uses-library Android:name="org.Apache.http.legacy" Android:required="false" />
Ce lien Android-9.0-changes-28 -> Déprécation du client HTTP Apache explique la raison de l'ajout suivant à votre fichier 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 de Android 9, cette bibliothèque est supprimée du chemin d'accès au bootclasspath et n'est pas disponible par défaut pour les applications.
Faites l'une des choses suivantes:
1- Mettez à jour la bibliothèque play-services-maps vers la dernière version:
com.google.Android.gms:play-services-maps:16.1.0
2- Ou incluez la déclaration suivante dans l'élément <application>
de AndroidManifest.xml
.
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
Il est également signalé dans le suivi de bogues Android: https://issuetracker.google.com/issues/79478779
Pour exécuter org.Apache.http.legacy parfaitement dans Android 9.0 Pie créer un fichier 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>
Et ajoutez 2 balises tag dans votre AndroidManifest.xml
Android: networkSecurityConfig = "@ xml/network_security_config" Android: nom = "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>
Ajoutez également useLibrary 'org.Apache.http.legacy'
dans le niveau de construction de votre application.
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'
}
Si vous utilisez com.google.Android.gms: play-services-maps: 16.0.0 ou une version inférieure et que votre application cible un niveau API de 28 (Android 9.0) ou une version ultérieure, vous devez inclure la déclaration suivante dans l'élément AndroidManifest. xml.
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
Ceci est géré pour vous si vous utilisez com.google.Android.gms: play-services-maps: 16.1.0 et n'est pas nécessaire si votre application cible un niveau d'API inférieur.
Selon this SO answer , cela est dû à un bogue du SDK AWS qui semble être résolu dans la version 2.6.30 du SDK , donc la mise à jour la version à une plus récente, peut vous aider à résoudre le problème.
Si vous utilisez Android 9.0 avec l’ancien fichier jAR, il vous faudra l’utiliser. dans votre fichier mainfest.
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>