J'ai lu quelques articles sur la nouvelle adoption de Gradle en tant que système de construction standard pour les applications Android. Eh bien, venant du développement Java standard, je dépends généralement des fichiers jar pour construire mon projet. Cependant, il semble qu'Android dispose également de packages aar , qui sont l'équivalent des fichiers dll dans un système d'exploitation Windows, comme mentionné ici :
Tout d'abord, vous devez comprendre que la plate-forme Android n'autorise pas les «bibliothèques partagées» au niveau de l'application. Dans les plates-formes de langage de programmation «traditionnelles», C, C ++, Java, vous l'appelez, nous avons ce mécanisme de partage de bibliothèques d'exécution. (Par exemple, DLL sous Windows, DSO sous Unix, Jar sur JVM, etc.). Sur Android, cependant, vous ne pouvez pas faire cela, sauf si vous êtes Google ou un fabricant de combinés (voir la note de bas de page 1 ci-dessous). En tant que développeur d'applications, cela peut être une limitation fondamentale. Le «partage» ou la «réutilisation» des codes, à la fois au moment de la construction et de l'exécution, est une partie très importante de la pratique du génie logiciel. C'est plutôt difficile (pas impossible, mais plus difficile) sur Android en raison de la limitation susmentionnée.
Cependant, j'ai quelques doutes sur ce concept. Je veux dire, quand un développeur devrait-il être intéressé par l'inclusion des dépendances aar dans son application? Ces dépendances sont-elles renforcées à une version minimale du SDK?
Par exemple, dans un projet, j'accède à un port COM, pour lequel j'utilise les bibliothèques .so précompilées NDK . Dois-je créer un aar si je souhaite partager cet utilitaire?
La déclaration « La principale différence entre un Jar et un AAR est que les AAR incluent des ressources telles que des mises en page, des drawables, etc. » ne correspond pas à la spécification du fichier JAR et n'est donc pas une vérité. Selon la spécification du fichier JAR :
Comme vous pouvez le voir, il n'y a pas de limitation de contenu qui interdit d'inclure des ressources telles que des mises en page, des dessinables, etc. dans un fichier JAR. Pour plus de détails, voir l'article 5.3 «Création et chargement» de la spécification de la machine virtuelle Java®.
Donc, sur la question Bibliothèque d'archives Android (aar) vs pot standard. La réponse dépend de l'outil de construction que vous utilisez.
Si vous utilisez Android Studio comme outil de création (respectivement comme organisateur de projet), vous feriez certainement mieux d'utiliser les fichiers * .aar pour partager des ressources encapsulées entre des projets Android. Le format de fichier AAR fait partie de la construction d'Android Studio et, comme il est commenté dans les autres commentaires ici, son interface utilisateur prend en charge le format aar pour les bibliothèques Android.
Mais à l'exception d'Android Studio, le reste du monde ne sait pas ce qu'est ce fichier (artefact). Par exemple, si votre version Android est basée sur Maven, le fichier préféré pour le partage de ressources sera jar car il s'agit de l'artefact natif du projet Java Maven et il n'y a aucune limitation de ce qu'il faut mettre dans le fichier jar standard. En outre, il existe un moyen d'expliquer Maven n'importe quel format de fichier, y compris aar en utilisant l'amélioration du cycle de vie avec un nouveau composant. Un exemple simple est disponible ici Comment créer un nouveau type d'emballage pour Maven?
la source
La citation dans la question n'a rien de commun avec la réalité actuelle. Bien sûr, il est possible d'utiliser des bibliothèques externes sous Android et de nombreuses bibliothèques sont disponibles. Ils voulaient peut-être dire que chaque application doit regrouper toutes les bibliothèques dont elle a besoin, mais la réutilisation de la bibliothèque au moment de la construction (liaison statique) n'est vraiment pas un problème.
.aar
diffère de.jar
pas plus que.jar
diffère de.zip
. Il a certains concepts sur le type de contenu qui doit y être attendu, mais les deux.jar
et le.aar
plus souvent contiennent des classes compilées et des ressources..aar
spécifie simplement que la bibliothèque est spécifique à Android et a une structure attendue, raisonnable pour de telles bibliothèques (enfin, a.jar
également une structure attendue).La vue selon laquelle .aar n'est pris en charge que par Android Studio est également obsolète. Ces bibliothèques peuvent être déployées sur Maven Central et des outils comme gradle peuvent les référencer en utilisant le suffixe @aar, par exemple:
pour référencer ce déploiement central Maven.
la source