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 fichier.
Histoire de fond:
J'ai essayé de compiler une bibliothèque, mais sa structure Gradle était instable. J'ai donc demandé un fichier jar compilé et son développeur m'a remis un fichier aar provenant d'un référentiel Maven (le développeur ne pouvait pas compiler son propre projet). La configuration de Gradle était un désordre, elle dépendait de plusieurs bibliothèques et Gradle a lancé quelques exceptions.
J'ai essayé de l'utiliser dans mon IDE IDEA, 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 est constitué d'un JAR fichier et certains fichiers de ressources (il s’agit d’un fichier Zip standard avec une extension de fichier personnalisée). Voici les étapes pour convertir:
.aar est une archive Zip standard, la même que celle utilisée dans .jar. Il suffit de changer l'extension et, si elle n'est pas corrompue ou quoi que ce soit, ça devrait aller.
Si vous en aviez besoin, vous pouvez l'extraire dans votre système de fichiers puis le reconditionner sous la forme d'un fichier jar.
1) Rename it to .jar
2) Extract: jar xf filename.jar
3) Repackage: jar cf output.jar input-file(s)
Comme de nombreuses personnes l’ont fait remarquer, le simple fait d’extraire le fichier .jar du fichier .aar ne le coupe pas tout à fait, car des ressources risquent de manquer.
Voici les étapes qui ont fonctionné pour moi (contexte Android, votre kilométrage peut varier si vous avez d'autres objectifs):
Pour ceux qui veulent le faire automatiquement, j'ai écrit un petit script bash de deux lignes qui fait deux choses suivantes:
Renomme les classes extraites.jar afin qu’elles soient comme aar 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 ça!
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écompile automatiquement les cours!
Suivez simplement ces étapes:
File > New > New Module > Import .JAR/.AAR Package
pour vous importer .aar en tant que module
Ajoutez le module nouvellement créé en tant que dépendance à votre projet principal (ne savez pas si nécessaire)
Cliquez avec le bouton droit sur "classes.jar" comme indiqué dans la capture ci-dessous, puis cliquez sur "Afficher dans l'explorateur". Voici votre .jar.
The 'aar' bundle is the binary distribution 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 dans votre fichier .jar, vous pouvez cliquer avec le bouton droit de la souris sur votre fichier .aar et l'enregistrer directement en tant que 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 Decompiler) . Ensuite, faites 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.
.aar-projets basés sur les ressources
Trouver le fichier classes.jar dans le fichier .aar est assez simple. Cependant, cette approche ne fonctionne pas si le projet .aar a défini des ressources (exemple: R.layout.xyz)
Par conséquent, sour de CommonsGuy m'a aidé à obtenir un projet valide compatible ADT à 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 consiste à utiliser Android-maven-plugin pour Eclipse/ADT comme l’écrit CommonsGuy sur son blog .
Une autre approche pourrait consister à cloner tout le projet souhaité en tant que source à partir de git et à l’importer sous le nom "Projet existant Android".
Si vous utilisez Gradle pour vos constructions, il existe un plugin Gradle qui vous permet d’ajouter une dépendance à vos modules Java | kotlin | scala | ....
https://github.com/stepango/aar2jar
plugins {
id 'Java'
id 'com.stepango.aar2jar' version “0.6” // <- this one
}
dependencies {
compileOnlyAar "com.Android.support:support-annotations:28.0.0" // <- Use any AAR dependencies
}