Sur Android Marshmallow, Google a complètement supprimé la prise en charge du client HTTP Apache (link ici ) car il n'a pas de bonnes performances par rapport aux alternatives.
Cela pourrait également être la cause de nombreuses applications qui tombent en panne sur Android Marshmallow.
Google vous permet de continuer à utiliser cette API, mais pas comme intégrée, en ajoutant cette ligne au fichier gradle:
useLibrary 'org.Apache.http.legacy'
Donc, voici ce que j'ai fait:
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
}
Et:
Android {
compileSdkVersion 'Android-MNC'
buildToolsVersion "23.0.0 rc3"
useLibrary 'org.Apache.http.legacy'
defaultConfig {
applicationId "com.example.user.androidmtest"
minSdkVersion 'MNC'
targetSdkVersion 'MNC'
versionCode 1
versionName "1.0"
}
Lorsque je l'ai essayé, tout s'est bien compilé (aucune erreur n'a été signalée et je pouvais exécuter l'application de démonstration de concept, car elle ne possède pas de code particulier), mais lorsque j'ai essayé d'utiliser certaines des classes, je sais que font partie de l'ancienne API (comme la classe "HttpClient"), je vois que cela ne me permet pas de le faire.
Je sais que l'utilisation de cette solution n'est pas recommandée, mais l'application doit être prête à fonctionner au moins temporairement, jusqu'à ce que nous travaillions à 100% sur tout ce qui devrait changer pour Android Marshmallow. Vous ne voulez pas de surprises sous la forme d'accidents.
Voici une capture d'écran:
Pourquoi cela se produit-il? Est-ce que je l'ai utilisé correctement?
EDIT: rapporté à ce sujet ici:
Android Studio se plaignait que org.Apache.http
des classes comme
org.Apache.http.NameValuePair
org.Apache.http.client.utils.URLEncodedUtils
étaient manquants.
J'ai donc ajouté org.Apache.http.legacy.jar
qui se trouve dans le dossier Android/Sdk/platforms/Android-23/optional
vers app/libs
J'ai également ajouté cette ligne à mon fichier app.gradle
compile files('libs/org.Apache.http.legacy.jar')
Mais si vous utilisez plus de bibliothèques, vous pouvez utiliser cette méthode
compile fileTree(dir: 'libs', include: ['*.jar'])
Cela a résolu toutes mes erreurs causées par la suppression de la prise en charge du client HTTP Apache par Google.
useLibrary 'org.Apache.http.legacy' ne fonctionnait pas pour moi jusqu'à ce que je mette à niveau la version des outils Gradle dans mon fichier principal build.gradle de mon projet Android Studio, comme suit:
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
}
Solution parfaite ici en exécutant une simple vérification du chemin du fichier. en exécutant
Android {
compileSdkVersion 'Android-MNC'
buildToolsVersion "23.0.0 rc3"
useLibrary 'org.Apache.http.legacy'
defaultConfig {
applicationId "com.example.user.androidmtest"
minSdkVersion 'MNC'
targetSdkVersion 'MNC'
versionCode 1
versionName "1.0"
}
getBootClasspath().each{File file ->
println file.absolutePath
}
}
}
Vous obtiendrez quelque chose comme ci-dessous
/Users/"yourname"/Development/Android-sdk-macosx/platforms/Android-MNC/Android.jar /Users/"yourname"/Development/Android-sdk-macosx/platforms/Android-MNC/optional/org.Apache .http.legacy.jar
Le pot est donc là. Pour une raison quelconque, il n’a pas été ajouté au projet. mais vous pouvez toujours l'ajouter manuellement, je suppose.
Après de nombreuses heures frustrantes, les tâches suivantes ont fonctionné:
1. Localisez le fichier Apache. Il devrait résider quelque part comme:
C:\Users\<yourname>\AppData\Local\Android\sdk\platforms\Android-23\optional
2. Copiez org.Apache.http.legacy.jar
dans votre dossier libs.
Faites un clic droit sur libs -> coller ou utilisez votre explorateur de fichiers pour naviguer dans le dossier libs de votre projet et coller.
Si vous ne possédez pas de dossier libs, créez un nouveau projet et importez tous les fichiers pertinents à leurs emplacements respectifs.
3. Cliquez sur ok
voir ceci
4. Etape la plus importante: Faites un clic droit sur le dossier Apache et sélectionnez Add As Library
. voir ceci
J'espère que cela aide quelqu'un à continuer sa vie.
Je sais que c'est une raison idiote mais sur la liste essayez-le ...
J'ai rencontré ce problème récemment et il est dû à la restriction de longueur de chemin, je pense que c'est 256 caractères maximum.
Relocalisez votre projet et la construction réussira. Espérons que ce travail fonctionne pour vous.
La réponse ci-dessus aide simplement les générations de débogage à s'exécuter et à publier les versions utilisant gradle.
Insérez-le dans la balise d'application du fichier manifeste, sur toutes les instances de projet utilisant les classes Apache héritées:
<uses-library Android:name="org.Apache.http.legacy" Android:required="false" />
Cela aide ceux qui utilisent encore les scripts Eclipse et ant lors de la compilation.
Bibliothèque Apache héritée située à
[Android_SDK]\platforms\Android-23\optional\org.Apache.http.legacy.jar
Ainsi, vous pouvez le copier dans votre projet libs ou simplement utiliser
compile files("${Android.getSdkDirectory().getAbsolutePath()}" + File.separator + "platforms" + File.separator + "Android-23" + File.separator + "optional" + File.separator + "org.Apache.http.legacy.jar")
dans votre / app/build.gradle
Vous devez d’abord vérifier cela dans votre dossier libs
Then add into your gradle file like this
Android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig {
applicationId "info.tranetech.laundry"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
Android {
useLibrary 'org.Apache.http.legacy'
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:appcompat-v7:23.0.1
compile 'com.Android.support:design:23.0.1
testCompile 'junit:junit:4.12'
compile files('libs/Android-async-http-1.4.4.jar')
compile 'com.google.Android.gms:play-services:8.4.0'
}
Activez ceci dans sdk/plates-formes/Android-23/optional/optional.json
[
{
"name": "org.Apache.http.legacy",
"jar": "org.Apache.http.legacy.jar",
"manifest": false
}
]
Retirer
useLibrary 'org.Apache.http.legacy'
depuis le build.gradle et j'ai également ajouté cette ligne à mon fichier app.gradle
compile files('libs/org.Apache.http.legacy.jar')
Mais si vous utilisez plus de bibliothèques, vous pouvez utiliser cette méthode
compile fileTree(dir: 'libs', include: ['*.jar'])
La réponse de CoPLaS a résolu mes problèmes.
Comment utiliser le client HTTP Apache hérité sur Android Marshmallow?
Pour continuer à utiliser les classes HTTP Apache pour l'API 23+:
Tout d’abord, assurez-vous d’ajouter la dépendance de niveau dans le build.gradle
f
buildscript {
dependencies {
classpath 'com.Android.tools.build:gradle:2.0.0'
}
}
Ajoutez ensuite la référence dans build.gradle
de votre projet:
Android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary 'org.Apache.http.legacy'
...
}
Un moyen simple de résoudre ce problème est C:\Utilisateurs\nom d'utilisateur\AppData\Local\Android\sdk\plates-formes. Supprimez ici votre Android-23 et de SDK Manager mettez à jour votre API 23 à nouveau. Cela résoudra votre problème.