web-dev-qa-db-fra.com

Apache HTTP Client Suppression de API23, cela aura-t-il un effet sur Volley?

Comme nous avons su que Apache HTTP Client a été supprimé dans API 23

Suppression du client HTTP Apache

Cependant, la bibliothèque Volley utilise toujours la bibliothèque de Apache telle que

import org.Apache.http.Header;
import org.Apache.http.HttpEntity;
import org.Apache.http.HttpResponse;
import org.Apache.http.HttpStatus;
import org.Apache.http.StatusLine;
import org.Apache.http.conn.ConnectTimeoutException;
import org.Apache.http.impl.cookie.DateUtils;

Et j'ai testé 2 projets: l'un avec compileSdkVersion 22, l'autre avec compileSdkVersion 23, j'ai 2 captures d'écran:

compileSdkVersion 22

enter image description here

compileSdkVersion 23

enter image description here

J'ai 2 questions:

  1. Bien entendu, les projets API23 utilisant Volley fonctionnent toujours avec succès. Cependant, je ne comprends pas comment ils utilisent la bibliothèque de la Apache à l'exécution, trouvent-ils dans API22 ou une version inférieure?
  2. De plus, je me demande si dans un avenir proche, Volley sera mis à niveau de manière à ne plus utiliser la bibliothèque de Apache. Sinon, mes projets actuels fonctionneront-ils encore à l'avenir lorsque la bibliothèque de Apache sera complètement supprimée et non prise en charge?

Mon anglais n'est peut-être pas aussi clair, cependant, j'espère que vous comprenez ma question.

Toute explication sera appréciée.

UPDATE:

À partir des commentaires de @ random, j'ai créé un nouveau projet API23 en utilisant la bibliothèque officielle Volley de Google (je veux dire par git clone https://Android.googlesource.com/platform/frameworks/volley comme suggéré par Google ici ), au lieu d'utiliser compile 'com.mcxiaoke.volley:library:1.0.17' dans le fichier build.gradle. Oui, vous avez des erreurs avec le manque de bibliothèque Apache lors de la construction du projet. Doit ajouter useLibrary 'org.Apache.http.legacy' dans le fichier build.gradle comme documenté.


2nd UPDATE:

Je viens de personnaliser la fonctionnalité volley de Google (en tant que module de mon projet) supprimant la bibliothèque Apache. S'il vous plaît aller à mon exemple de projet GitHub pour votre référence. Toutefois, veuillez noter que cela n’a pas été complètement testé pour tous les cas et que je n’ai testé que 02 cas simples: GET et POST demandes avec mon service Web qui est ASP.NET Web API.

22
BNK

Il semble que la bibliothèque Volley dans Android M soit complètement fouillée. Un bogue a déjà été archivé et reconnu par Google.

https://code.google.com/p/Android-developer-preview/issues/detail?id=3013

Vous devriez jouer le rôle de star et le suivre pour toute mise à jour ultérieure.

METTRE À JOUR

En ce qui concerne votre première question, vous ne recevez pas d'erreur pour les fichiers Apache manquants car la bibliothèque que vous utilisez est toujours compilée à l'aide de l'API 22

Android_BUILD_TARGET_SDK_VERSION=22
Android_BUILD_TOOLS_VERSION=22.0.1
Android_BUILD_SDK_VERSION=22

https://github.com/mcxiaoke/Android-volley/blob/master/gradle.properties

Consultez également ce numéro ouvert dans la bibliothèque , Selon lequel vous pouvez ajouter une bibliothèque héritée.

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    useLibrary 'org.Apache.http.legacy'
    ...
}
10
random

Suppression du client HTTP Apache Cet aperçu supprime la prise en charge du client HTTP Apache. Si votre application utilise ce client et cible Android 2.3 (API de niveau 9) ou supérieur, utilisez plutôt la classe HttpURLConnection. Cette API est plus efficace car elle réduit l'utilisation du réseau grâce à la compression transparente et à la mise en cache des réponses, ainsi qu'à la consommation d'énergie. Pour continuer à utiliser les API HTTP Apache, vous devez d'abord déclarer la dépendance suivante au moment de la compilation dans votre fichier build.gradle:

Android {
    useLibrary 'org.Apache.http.legacy'
}

Android s'éloigne d'OpenSSL vers la bibliothèque BoringSSL. Si vous utilisez le NDK Android dans votre application, ne vous connectez pas à des bibliothèques cryptographiques ne faisant pas partie de l'API NDK, telles que libcrypto.so et libssl.so. Ces bibliothèques ne sont pas des API publiques et peuvent changer ou se rompre sans préavis entre les versions et les périphériques. En outre, vous pouvez vous exposer à des vulnérabilités de sécurité. Modifiez plutôt votre code natif pour appeler les API de cryptographie Java via JNI ou pour établir une liaison statique avec une bibliothèque de cryptographie de votre choix.

8
Nooruddin Lakhani
Android {
    useLibrary 'org.Apache.http.legacy'
}

dependencies {
    compile 'commons-httpclient:commons-httpclient:3.1'
}
2
itzhar

Ajoutez ceci aux dépendances de votre application, puis fonctionne correctement:

dépendances {... compiler 'org.jbundle.util.osgi.wrapped: org.jbundle.util.osgi.wrapped.org.Apache.http.client: 4.1.2' }

Appache Http est supprimé d'Android API level 23 si vous utilisez toujours le client Apache Http, vous pouvez inclure Android { useLibrary 'org.Apache.http.legacy'} dans votre project - module build.gradle

0
Abhijit Chakra

C'est une énorme hystérie à propos du client HTTP d'Apache. Vous pouvez continuer à l'utiliser dans n'importe quel projet sans aucune conséquence. Pourquoi perdre du temps à transférer du code dans d'autres bibliothèques? J'ai décrit la meilleure façon de continuer à utiliser les bibliothèques Apache ici: https://stackoverflow.com/a/37623038/1727132 (spoiler: n'utilisez pas la version précédente!)

0
Jehy