Comment convertir AAR en JAR

Situation :

J’ai l’intention d’utiliser une bibliothèque Java et je n’ai qu’un fichier AAR à partir d’un référentiel Maven mais j’ai besoin du fichier JAR .

Histoire de fond:

J’ai essayé de comstackr une bibliothèque, mais sa structure Gradle était instable. J’ai donc demandé un fichier jar compilé, et son développeur m’a donné un fichier aar à partir d’un repository Maven (le développeur n’a pas pu comstackr son propre projet). La configuration de Gradle était un gâchis, elle dépendait de plusieurs bibliothèques et Gradle a émis des exceptions.

J’ai essayé de l’utiliser dans mon IDEA IDE, mais il ne pouvait pas le voir. Un projet de bibliothèque devrait pouvoir être compilé dans un fichier jar, non?

Question :

Que dois-je faire pour convertir ce fichier AAR en fichier JAR?

Le fichier AAR se compose d’un fichier JAR et de certains fichiers de ressources (il s’agit essentiellement d’un fichier zip standard avec une extension de fichier personnalisée). Voici les étapes pour convertir:

  1. Extrayez le fichier AAR en utilisant un extrait zip standard (renommez-le en * .zip pour le rendre plus facile)
  2. Recherchez le fichier classes.jar dans les fichiers extraits
  3. Renommez-le comme vous voulez et utilisez ce fichier jar dans votre projet

.aar est une archive zip standard, la même que celle utilisée dans .jar. Changez simplement l’extension et, en supposant que ce ne soit pas corrompu ou quoi que ce soit, ça devrait aller.

Si vous en aviez besoin, vous pourriez l’extraire dans votre système de fichiers, puis le reconditionner en tant que fichier jar.

1) Rename it to .jar 2) Extract: jar xf filename.jar 3) Repackage: jar cf output.jar input-file(s) 

Comme beaucoup d’autres personnes l’ont fait remarquer, le simple fait d’extraire le fichier .jar du fichier .aar n’est pas suffisant car les ressources peuvent être manquantes.

Voici les étapes qui ont fonctionné pour moi (contexte d’Android, votre kilométrage peut varier si vous avez d’autres objectives):

  1. Renommez le fichier .aar en .zip et extrayez.
  2. Le dossier extrait est un projet ADT que vous pouvez importer dans Eclipse avec quelques modifications mineures (voir ci-dessous)!
  3. Dans le dossier extrait, renommez le fichier contenu classes.jar en ce que vous voulez (dans cet exemple myProjectLib.jar) et déplacez-le dans le dossier lib du dossier extrait.
  4. Maintenant, pour qu’Eclipse l’accepte, vous devez placer deux fichiers dans la racine du dossier extrait:
    • .projet
    • .classpath
  5. Pour ce faire, créez un projet factice Android dans Eclipse et copiez les fichiers ou copiez-les à partir d’un projet Android existant.
  6. Ouvrez le fichier .project et recherchez l’étiquette de nom XML et remplacez-le par myProjectLib (ou tout ce que vous avez appelé votre fichier jar ci-dessus) et enregistrez.
  7. Maintenant, dans Eclipse, vous pouvez Fichier -> Nouveau -> Projet -> Projet Android à partir du source existant .. et pointez sur le contenu du dossier extrait.
  8. Après l’importation, cliquez avec le bouton droit sur le projet nouvellement créé, sélectionnez Propriétés -> Android , puis cochez Is Library .
  9. Dans votre projet principal pour lequel vous souhaitez utiliser la bibliothèque, accédez également à Propriétés -> Android et ajoutez le fichier myProjectLib nouvellement ajouté à la liste des dépendances.

Pour ceux qui veulent le faire automatiquement, j’ai écrit un petit script bash à deux lignes qui fait deux choses suivantes:

  1. Recherche tous les fichiers * .aar et en extrait les classes.jar
  2. Renomme les classes extraites.jar pour qu’elles ressemblent à l’arar mais avec une nouvelle extension

     find . -name '*.aar' -exec sh -c 'unzip -d `dirname {}` {} classes.jar' \; find . -name '*.aar' -exec sh -c 'mv `dirname {}`/classes.jar `echo {} | sed s/aar/jar/g`' \; 

C’est tout!

  The 'aar' bundle is the binary dissortingbution of an Android Library Project. .aar file consists a JAR file and some resource files. You can convert it as .jar file using this steps 1) Copy the .aar file in a separate folder and Rename the .aar file to .zip file using any winrar or zip Extractor software. 2) Now you will get a .zip file. Right click on the .zip file and select "Extract files". Will get a folder which contains "classes.jar, resource, manifest, R.java, proguard(optional), libs(optional), assets(optional)". 3) Rename the classes.jar file as yourjarfilename.jar and use this in your project. 

Remarque: Si vous souhaitez obtenir uniquement le fichier .jar de votre fichier .aar, utilisez la méthode ci-dessus. Supposons que si vous souhaitez inclure le fichier manifest.xml et les ressources avec votre fichier .jar, vous pouvez simplement faire un clic droit sur votre fichier .aar et l’enregistrer directement sous forme de fichier .jar au lieu de l’enregistrer en tant que fichier .zip. Pour afficher le fichier .jar que vous avez extrait, téléchargez JD-GUI (Java Decomstackr) . Faites ensuite glisser et déposez votre fichier .jar dans cette JD_GUI, vous pouvez voir le fichier .class dans des formats lisibles comme un fichier .java.

entrer la description de l'image ici entrer la description de l'image ici

Projets .aar basés sur les ressources

Trouver le fichier classes.jar dans le fichier .aar est assez sortingvial. Cependant, cette approche ne fonctionne pas si le projet .aar a défini des ressources (exemple: R.layout.xyz)

  • Par conséquent, Drear de CommonsGuy m’a aidé à obtenir un projet ADT-friendly valide à partir d’un fichier .aar. Dans mon cas, j’ai converti sous-échantillonnage-échelle-image-vue . Il m’a fallu environ une heure pour installer Ruby sur mon PC.

  • Une autre approche utilise android-maven-plugin pour Eclipse / ADT comme CommonsGuy écrit sur son blog .

  • Une autre approche pourrait être de simplement cloner tout le projet désiré en tant que source de git et de l’importer en tant que “projet Android existant”.

Android Studio (version: 1.3.2) vous permet d’accéder de manière transparente au fichier .jar dans un fichier .aar.

Bonus: il décomstack automatiquement les classes!

Suivez simplement ces étapes:

  1. File > New > New Module > Import .JAR/.AAR Package pour vous importer .aar en tant que module

  2. Ajouter le module nouvellement créé en tant que dépendance à votre projet principal (pas sûr si nécessaire)

  3. Faites un clic droit sur “classes.jar” comme indiqué dans la capture ci-dessous, et cliquez sur “Afficher dans l’explorateur”. Voici votre .jar.

accéder à .jar depuis .aar