Android Archive Library (aar) vs jar standard

J’ai lu des articles sur la nouvelle adoption de Gradle en tant que système de génération standard pour les applications Android. Eh bien, venant du développement Java standard, je dépend généralement des fichiers jar pour construire mon projet. Cependant, il semble qu’Android ait aussi des paquets aar , qui sont l’équivalent des fichiers DLL dans un système d’exploitation Windows, comme mentionné ici :

Tout d’abord, vous devez réaliser que la plate-forme Android ne permet 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 des bibliothèques d’exécution. (Par exemple, DLL sur Windows, DSO sur Unix, Jar sur JVM, etc.). Sur Android, cependant, vous ne pouvez pas le faire, sauf si vous êtes Google ou un fabricant de combinés (voir note 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 au moment de l’exécution, constitue une partie très importante de la pratique du génie logiciel. C’est plutôt difficile (pas impossible, juste plus difficile) sur Android en raison de la limitation susmentionnée.

Cependant, j’ai des doutes sur ce concept. Je veux dire, quand un développeur devrait-il être intéressé, y compris ses dépendances dans son application? Ces dépendances sont-elles resserré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 compilées NDK . Dois-je créer un aar si je veux partager cet utilitaire?

AAR fichiers AAR sont plus semblables à Jar qu’à Dll pour la raison suivante:

Dll peuvent être partagées entre des applications où des AAR et des fichiers JAR sont intégrés à votre application.

AAR s vs Jar s:

La principale différence entre un Jar et un AAR réside dans le fait que les AAR incluent des ressources telles que les layouts, drawables en layouts, drawables etc. Cela facilite grandement la création de composants visuels autonomes. Par exemple, si vous avez plusieurs applications qui utilisent le même écran de connexion, avec Jar vous pourriez partager des classes, mais pas la mise en page, les styles, etc., vous deviez toujours les dupliquer. Avec AAR tout est regroupé dans un paquet unique.

En conclusion, les AAR sont un grand pas dans la bonne direction.

Remarque:
Des tentatives similaires ont été faites avec apk-lib s mais elles sont maintenant obsolètes car les AAR sont beaucoup mieux.

L’instruction ” La principale différence entre un Jar et un AAR est que les AAR incluent des ressources telles que les mises en page, les tirables, 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 :

Le fichier JAR est un format de fichier basé sur le format de fichier ZIP populaire et est utilisé pour regrouper plusieurs fichiers en un seul. Un fichier JAR est essentiellement un fichier zip qui contient un répertoire META-INF facultatif.

Comme vous pouvez le constater, il n’y a pas de limitation de contenu qui interdit d’inclure des ressources telles que des mises en page, des tirables, etc. dans un fichier JAR. Pour plus de détails, voir l’article 5.3 “Création et chargement” de la spécification Java® Virtual Machine.

Donc, sur la question Android Archive Library (aar) vs jar standard. La réponse dépend de quel outil de construction utilisez-vous.

Si vous utilisez Android Studio comme outil de compilation (respectivement comme organisateur de projet), vous devriez certainement utiliser les fichiers * .aar pour partager les ressources encapsulées entre les projets Android. Le format de fichier AAR fait partie de la construction d’Android Studio et, comme il est commenté dans les autres commentaires, son interface utilisateur prend en charge le format aar pour les bibliothèques Android.

Mais à l’exception d’Android Studio, le rest du monde ne sait pas quelle est cette chose aar file (artefact). Par exemple, si votre version Android est basée sur Maven, le fichier préféré pour le partage des ressources sera jar car il s’agit de l’artefact du projet java Maven natif et il n’ya aucune limitation à placer dans le fichier JAR standard. En outre, il existe un moyen d’expliquer Maven dans tous les formats de fichiers, 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 de packaging pour Maven?

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. Peut-être voulaient-ils dire que chaque application doit regrouper toutes les bibliothèques dont elle a besoin, mais réutiliser 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 contient certains concepts sur le type de contenu auquel il faut s’attendre, mais les deux .jar et .aar contiennent le plus souvent 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, .jar aussi une structure attendue).

Le sharepoint vue selon lequel .aar est uniquement pris en charge par Android studio est également obsolète. De telles bibliothèques peuvent être déployées sur Maven Central, et des outils tels que gradle peuvent les référencer en utilisant le suffixe @aar, par exemple:

 dependencies { comstack ('io.github.andviane:uncover:2.0.1@aar') .. } 

faire référence à ce déploiement central Maven.