web-dev-qa-db-fra.com

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

Contexte

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.

Le problème

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:

enter image description here

La question

Pourquoi cela se produit-il? Est-ce que je l'ai utilisé correctement?


EDIT: rapporté à ce sujet ici:

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

73
android developer

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.

92
CoPLaS

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'
}
9
Jamie Hall

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.

8
WenChao

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 okvoir 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.

6
The AEB

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.

2
Arpit Patel

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.

2
Pier Betos

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

2
AndreyICE

Vous devez d’abord vérifier cela dans votre dossier libs

Make sure in Libs Folder Check that Apache library

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

This Is my gradle file

Also check external library

2
Arpit Patel

Activez ceci dans sdk/plates-formes/Android-23/optional/optional.json

[
  {
    "name": "org.Apache.http.legacy",
    "jar": "org.Apache.http.legacy.jar",
    "manifest": false
  }
]
1
arun-r

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.

0
Roger Belk

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'
    ...
}
0
Jorgesys

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.

0
impathuri