J'essaie de convertir un projet IntelliJ dans le système Gradle de Android Studio, mais je rencontre des erreurs avec Apache HttpClient? Est-ce que je manque quelque chose, les erreurs que je reçois sont les suivantes:
Error:(10, 30) error: package org.Apache.http.client does not exist
Error:(11, 30) error: package org.Apache.http.client does not exist
Error:(12, 37) error: package org.Apache.http.client.entity does not exist
Error:(13, 38) error: package org.Apache.http.client.methods does not exist
Error:(14, 38) error: package org.Apache.http.client.methods does not exist
Error:(15, 38) error: package org.Apache.http.client.methods does not exist
Error:(16, 35) error: package org.Apache.http.impl.client does not exist
Error:(134, 33) error: cannot find symbol class HttpUriRequest
Error:(164, 39) error: cannot find symbol class HttpUriRequest
Error:(106, 17) error: cannot find symbol class HttpGet
Error:(106, 39) error: cannot find symbol class HttpGet
Error:(117, 17) error: cannot find symbol class HttpPost
Error:(117, 40) error: cannot find symbol class HttpPost
Error:(125, 43) error: cannot find symbol class UrlEncodedFormEntity
Error:(135, 9) error: cannot find symbol class HttpClient
Error:(135, 33) error: cannot find symbol class DefaultHttpClient
Error:(155, 18) error: cannot find symbol class ClientProtocolException
Error:(165, 9) error: cannot find symbol class HttpClient
Error:(165, 33) error: cannot find symbol class DefaultHttpClient
Error:(185, 18) error: cannot find symbol class ClientProtocolException
Mon fichier build.gradle a les dépendances suivantes:
dependencies {
compile 'com.google.Android.gms:play-services:+'
compile 'org.Apache.httpcomponents:httpclient:4.2.6'
compile 'org.Apache.httpcomponents:httpmime:4.2.6'
compile files('libs/core.jar')
}
Il semble que beaucoup de gens aient un problème similaire, mais ni SO ni Google n'ont de solution, alors j'espère que cette question aidera les futurs chercheurs.
Je vous suggère de remplacer Apache HttpClient, obsolète, par le nouveau HttpURLConnection.
C'est une solution plus propre, il est assez facile de migrer et il est généralement préférable de s'en tenir aux dernières modifications du SDK plutôt que d'essayer de pirater/corriger/contourner le problème: vous le regretterez généralement plus tard :)
étape 1
HttpGet httpGet = new HttpGet(url);
devient:
URL urlObj = new URL(url);
étape 2
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();
devient:
HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();
étape 2 bis
int status = response.getStatusLine().getStatusCode();
devient:
int status = urlConnection.getResponseCode();
si vous utilisez un sdk cible en tant que 23, ajoutez le code ci-dessous dans votre build.gradle
Android{
compileSdkVersion 23
buildToolsVersion '23.0.1'
useLibrary 'org.Apache.http.legacy'
}
et changez votre buildscript en
classpath 'com.Android.tools.build:gradle:1.3.0'
pour plus d'informations suivez ceci lien
J'ai eu ce problème et puis j'ai trouvé ces pages: Vous pouvez voir ici que la bibliothèque Apache est obsolète, mais elle n'est pas supprimée, cela devrait donc fonctionner. Ce n'est pas.
Voir .
Et vous pouvez voir ici comment inclure la bibliothèque Apache dans votre projet.
Voir .
J'ai résolu le problème en ajoutant ce qui suit dans mon fichier build.gradle comme recommandé dans le deuxième lien.
Android {
useLibrary 'org.Apache.http.legacy'
}
Cependant, cela ne fonctionne que si vous utilisez gradle 1.3.0-beta2 ou supérieure, vous devrez donc ajouter ceci aux dépendances de buildscript si vous utilisez une version plus basse:
classpath 'com.Android.tools.build:gradle:1.3.0-beta2'
J'espère que cela t'aides.
Ajouter cette bibliothèque dans build.gradle
Android {
useLibrary 'org.Apache.http.legacy'
}
copier org.Apache.http.legacy.jar
qui se trouve dans le dossier Android/Sdk/platforms/Android-23/optional
vers app/libs
et a également ajouté cette ligne au fichier app.gradle
compile files('libs/org.Apache.http.legacy.jar')
Mais si vous utilisez plusieurs bibliothèques de fichiers jar, vous pouvez utiliser cette méthode.
compile fileTree(dir: 'libs', include: ['*.jar'])
Fondamentalement, tout ce que vous avez à faire est d’ajouter:
useLibrary 'org.Apache.http.legacy'
Dans votre fichier build.gradle
.
J'ai rencontré des problèmes similaires, vous pourriez peut-être le faire fonctionner en utilisant une méthode similaire.
Essayez d’abord avec votre configuration actuelle, excluez httpclient
de httpmime
:
dependencies {
compile 'com.google.Android.gms:play-services:+'
compile ('org.Apache.httpcomponents:httpmime:4.2.6'){
exclude module: 'httpclient'
}
compile 'org.Apache.httpcomponents:httpclient:4.2.6'
}
Dans mon cas, je l'ai corrigé en utilisant les bocaux suivants:
Ensuite, dans le build.gradle, en excluant httpclient
de httpmime
:
dependencies {
compile 'com.google.Android.gms:play-services:+'
compile('org.Apache.httpcomponents:httpmime:4.3.5') {
exclude module: 'httpclient'
}
compile 'org.Apache.httpcomponents:httpclient-Android:4.3.5.1'
}
J'ai rencontré le même problème. La réponse de Daniel Nugent a un peu aidé (après avoir suivi son conseil, HttpResponse
a été trouvé - mais le HttpClient
était toujours manquant).
Alors voici ce qui me l'a corrigé:
4.5.1.Zip
de la section binairehttpcore-4.4.3
& httpclient-4.5.1.jar
dans le dossier project/libs
J'espère que ça aide.
Réponse parfaite de Jinu et Daniel
Ajoutant à cela, j'ai résolu le problème en utilisant This, si votre compileSdkVersion est 19 (IN MY CASE)
compile ('org.Apache.httpcomponents:httpmime:4.3'){
exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile ('org.Apache.httpcomponents:httpcore:4.4.1'){
exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile 'commons-io:commons-io:1.3.2'
sinon, si votre compileSdkVersion est 23, utilisez
Android {
useLibrary 'org.Apache.http.legacy'
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
C'est ce que j'ai fait et ça marche pour moi.
étape 1: ajoutez ceci dans le build.grade (module: app)
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
étape 2: synchroniser le projet et terminé.
La version du client HTTP Apache fournie en stock Android était très très ancienne .
Google Android 1.0 a été publié avec un instantané pré-BETA d’Apache HttpClient. Pour coïncider avec la première Android version _, les API Apache HttpClient 4.0 devaient être gelées prématurément, tandis que de nombreuses interfaces et structures internes n'étaient pas encore entièrement élaborées. Alors qu'Apache HttpClient 4.0 arrivait à maturité, le projet s'attendait à ce que Google intègre les dernières améliorations en matière de code dans son arborescence. Malheureusement, cela ne s'est pas produit.
Bien que vous puissiez continuer à utiliser l’ancienne bibliothèque obsolète via la solution de contournement useLibrary 'org.Apache.http.legacy'
(suggéré par @Jinu et d’autres), vous devez vraiment mordre la main. bullet et passez à autre chose, par exemple le Androidnatif _ HttpUrlConnection
, ou si cela ne répond pas à vos besoins, vous pouvez utiliser le OkHttp bibliothèque , qui est ce que HttpUrlConnection
est en interne basé sur de toute façon.
OkHttp a en fait un calque de compatibilité qui utilise la même API que le client Apache, bien qu'ils n'implémentent pas all des mêmes caractéristiques, donc votre kilométrage peut varier.
Bien que , il soit possible d'importer une version plus récente du client Apache (comme suggéré par @MartinPfeffer), il est probable que la plupart des classes et méthodes que vous utilisiez auparavant ont été déconseillées, et il y a un risque assez important que la mise à jour introduise des bogues dans votre code (par exemple, j'ai trouvé que certaines connexions qui fonctionnaient auparavant derrière un proxy ne fonctionnaient plus), ce n'est donc pas une bonne solution.
Je devais poster car aucune des réponses ci-dessus ne fonctionnait complètement pour moi.
J'utilise Android Studio
classpath 'com.Android.tools.build:gradle:1.5.0'
compileSdkVersion 23
buildToolsVersion "23.0.3"
Étape 1: Téléchargez le dernier fichier JAR ( http://www-eu.Apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.Zip )
Étape 2: Copier coller le fichier .jar dans le dossier libs (créer s'il n'existe pas déjà) dans votre module (peut être une application ou une bibliothèque)
Étape 3: Faites un clic droit sur le pot et "Ajouter en tant que bibliothèque". Il ajoutera automatiquement le fichier jar en tant que dépendance dans le fichier de classement de votre module.
Étape 4: Maintenant, votre problème sera automatiquement résolu, mais si vous utilisez proguard dans votre application, il vous avertira des fichiers de classe en double et ne vous laissera pas construire. C'est un bogue connu et vous devez ajouter ce qui suit à vos règles de proguard
-dontwarn org.Apache.commons.**
-keep class org.Apache.http.** { *; }
-dontwarn org.Apache.http.**
Bonne chance!
Après avoir passé des jours sur le sujet, j'ai finalement réussi à le résoudre. Malheureusement, nous en avons besoin si nous voulons utiliser des fichiers d'extension. La solution a été fournie par quelques personnes ici, mais pour moi, il manquait quelques détails mineurs qui auraient pu me faire gagner beaucoup de temps. Voici la séquence d'événements pour les novices comme moi pour vous faire gagner un temps précieux.
D'abord, j'ai importé le dossier "library" de D:\Users\Imre\AppData\Local\Android\sdk1\extras\google\play_licensing dans le projet en allant dans Fichier, Nouveau, Module d'importation et en accédant au dossier "library". Si vous ouvrez le SDK Manager et cliquez sur "Lancer le logiciel autonome SDK Manager" au bas de la fenêtre contextuelle, vous pouvez passer votre pointeur de la souris sur le dossier "Extras" dans le bas et la petite info jaune vous indiquera où vous trouverez le paquet que vous devez importer.
Une fois que cela est fait, allez dans la section "bibliothèque" dans le volet gauche avec "Projet" et dans celui-ci l'onglet "Android" ouvert. Ouvrez la section Java de la bibliothèque et ouvrez la classe APKExpansionPolicy. Si vous avez des erreurs et que les org.Apache.http.NameValuePair et l'importation org.Apache.http.client.utils.URLEncodedUtils sont gris pâle, ouvrez le build.gradle (Project: tout ce que vous voulez) et assurez-vous que dans "buildscript" sous "dépendances", vous avez le "classpath" com.Android.tools.build:gradle:1.5.0 "inclus. Le 1.5.0 pourrait être différent dans votre cas. Je suppose que cela dépend de votre version de Studio. Le mien est 1.5.1. Si le vôtre est plus récent, il vous sera demandé de mettre à jour les numéros.
Après cela, allez à "build.gradle (Module: bibliothèque) et incluez le" useLibrary "org.Apache.http.legacy" dans la section "Android". Sync Now (coin supérieur droit) devrait être proposé. Fais le.
Si vous recevez d'autres messages d'erreur (je ne le saurais pas parce que je l'ai fait dans l'autre sens), les fichiers Apache risquent de ne pas figurer dans votre projet, car Apache n'est plus pris en charge. Trouvez-les dans C/D: Utilisateurs/Yourname/AppData/Local/Android/Sdk/plates-formes/Android-23/facultatif et copiez-les/collez-les dans votre dossier projet/app/libs. Vous devriez avoir un fichier facultatif.json et un fichier org.Apache.http.legacy.jar. Vous feriez peut-être mieux d'aller sur le site Web d'Apache et télécharger la dernière version: http://hc.Apache.org/downloads.cgi Décompressez-le où vous voulez, ouvrez-le, allez à "lib", copiez le fichier httpclient-4.5.1.jar et remplacez-le par le fichier org.Apache.http.legacy.jar.
Synchronisez et reconstruisez/nettoyez votre projet et ça devrait aller.
Juste au cas où, ouvrez votre terminal (L/H en bas de Android Studio) et tapez "gradlew clean". Il va installer quelques petites choses. Une fois que c'est fait, tapez "gradlew assemble". Cela prendra quelques minutes pour terminer, mais cela vous donnera les erreurs si vous en avez bien sûr. Si vous ne pouvez rien entrer dans le terminal, lancez la commande Invite (bouton Windows + R), tapez cmd, cliquez sur OK, cliquez avec le bouton droit de la souris sur le titre du petit écran contextuel noir (C:\WINDOWS\system32\cmd.exe). , Propriétés, Options, dans le bas de la fenêtre, vérifiez que "Utiliser la console héritée" est épaissi. Redémarrez A.Studio.
Bonne chance!
Dans mon cas, j'ai mis à jour l'une de mes bibliothèques dans mon projet Android.
J'utilise Reservoir comme solution de stockage en cache: https://github.com/anupcowkur/Reservoir
Je suis parti de:
compile 'com.anupcowkur:reservoir:2.1'
À:
compile 'com.anupcowkur:reservoir:3.1.0'
L'auteur de la bibliothèque doit avoir supprimé la bibliothèque commons-io du référentiel pour que mon application ne fonctionne plus.
Je devais inclure manuellement commons-io en ajoutant ceci à gradle:
compile 'commons-io:commons-io:2.5'
https://mvnrepository.com/artifact/commons-io/commons-io/2.5
J'ai cloné les éléments suivants: https://github.com/google/play-licensing
Ensuite, j'ai importé cela dans mon projet.