Comment utiliser le client HTTP Apache hérité sur Android Marshmallow?

Contexte

Sur Android Marshmallow, Google a complètement supprimé le support du client HTTP Apache (lien ici ) car il n’a pas de bonnes performances par rapport aux alternatives.

Cela pourrait également être la cause de tant d’applications sur Android Marshmallow.

Le problème

Google vous permet de toujours utiliser cette API, mais pas comme une version intégrée, en ajoutant cette ligne au fichier gradle:

useLibrary 'org.apache.http.legacy' 

Alors c’est ce que j’ai fait:

 dependencies { classpath 'com.android.tools.build:gradle:1.3.0' } 

Et:

 android { comstackSdkVersion '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" } 

Quand je l’ai essayé, il a bien été compilé (pas d’erreurs affichées et je pouvais lancer l’application de preuve de concept, car elle n’a pas de code spécial), mais lorsque j’ai essayé d’utiliser certaines classes, je le sais. font partie de l’ancienne API (comme la classe “HttpClient”), je vois que cela ne me permet pas de le faire.

Je sais que ce n’est pas recommandé d’utiliser cette solution, mais nous devons avoir l’application prête à fonctionner là-bas au moins temporairement, jusqu’à ce que nous travaillions à 100% sur tout ce qui devrait changer pour Android Marshmallow. forme de crash.

Voici une copie d’écran:

entrer la description de l'image ici

La question

Pourquoi ça se passe? Ai-je utilisé correctement?


EDIT: signalé sur ce problème ici:

https://code.google.com/p/android/issues/detail?id=181474

Android Studio se plaignait que les classes org.apache.http 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 Android/Sdk/platforms/android-23/optional folder Android/Sdk/platforms/android-23/optional à app/libs

J’ai également ajouté cette ligne à mon fichier app.gradle

 comstack files('libs/org.apache.http.legacy.jar') 

Mais si vous utilisez plus de bibliothèques, vous pouvez utiliser cette méthode

 comstack fileTree(dir: 'libs', include: ['*.jar']) 

Cela a résolu toutes les erreurs qui ont été causées parce que Google a supprimé la prise en charge du client HTTP Apache.

useLibrary ‘org.apache.http.legacy’ n’a pas fonctionné jusqu’à ce que je mette à niveau la version des outils Gradle dans mon fichier build.gradle principal de mon projet Android Studio, comme suit:

 dependencies { classpath 'com.android.tools.build:gradle:1.3.0' } 

Solution parfaite en exécutant une simple vérification du chemin du fichier. en exécutant

  android { comstackSdkVersion '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

Alors voilà, le pot est là. Pour une raison quelconque, il n’a pas été ajouté au projet. mais vous pouvez toujours l’append manuellement, je suppose.

Après de nombreuses heures frustrantes, les suivantes ont fonctionné:

1. Localisez le pot apache. Il devrait résider quelque part comme:

 C:\Users\\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 -> paste ou utilisez votre explorateur de fichiers pour naviguer jusqu’au dossier libs de votre projet et collez-le.

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. Étape la plus importante: Cliquez avec le bouton droit sur le dossier apache et sélectionnez Add As Library . regarde ça

J’espère que cela aidera quelqu’un à continuer sa vie.

Je sais que c’est une raison idiote mais à la liste l’essayer …

J’ai rencontré ce problème récemment, et il est causé par la ressortingction de longueur de chemin, je pense qu’il est de 256 caractères maximum.

Relocalisez votre projet et la construction réussira. Espérez ce travail pour vous.

Bibliothèque Apache héritée située dans

 [ANDROID_SDK]\platforms\android-23\optional\org.apache.http.legacy.jar 

Vous pouvez donc le copier dans votre projet ou simplement utiliser

 comstack 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

Assurez-vous que dans Libs Folder Check cette bibliothèque apache

 Then add into your gradle file like this android { comstackSdkVersion 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 { comstack fileTree(dir: 'libs', include: ['*.jar']) comstack 'com.android.support:appcompat-v7:23.0.1 comstack 'com.android.support:design:23.0.1 testComstack 'junit:junit:4.12' comstack files('libs/android-async-http-1.4.4.jar') comstack 'com.google.android.gms:play-services:8.4.0' } 

Ceci est mon dossier de classement

Vérifiez également la bibliothèque externe

La réponse ci-dessus aide simplement le programme de débogage à exécuter et à publier des versions utilisant graduellement.

Insérez ceci dans la balise d’application sur le fichier manifeste, sur toutes les instances de projet qui utilisent les classes Apache héritées:

  

Cela aide ceux qui utilisent encore les scripts Eclipse et ant pendant la compilation.

Activez cette option dans sdk / plates-formes / android-23 / optionnel / optional.json

 [ { "name": "org.apache.http.legacy", "jar": "org.apache.http.legacy.jar", "manifest": false } ] 

Retirer

 useLibrary 'org.apache.http.legacy' 

du build.gradle et j’ai également ajouté cette ligne à mon fichier app.gradle

 comstack files('libs/org.apache.http.legacy.jar') 

Mais si vous utilisez plus de bibliothèques, vous pouvez utiliser cette méthode

 comstack fileTree(dir: 'libs', include: ['*.jar']) 

La réponse 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 API 23+:

Tout d’abord, assurez-vous d’append la dépendance de gradle dans le build.gradle f

 buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } } 

Ajoutez ensuite la référence à l’intérieur de build.gradle de votre projet:

 android { comstackSdkVersion 23 buildToolsVersion "23.0.0" useLibrary 'org.apache.http.legacy' ... } 

C: \ Users \ nom d’utilisateur \ AppData \ Local \ Android \ sdk \ platform est un moyen simple de résoudre ce problème. Ici, supprimez votre Android-23 et du gestionnaire de SDK, mettez à jour votre API 23 à nouveau. Cela résoudra votre problème.