web-dev-qa-db-fra.com

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 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?

87
Nestor

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:

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

.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)
20
AWT

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):

  1. Renommez le fichier .aar en .Zip et extrayez-le.
  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 comme bon vous semble (dans cet exemple, myProjectLib.jar) et déplacez-le dans le dossier lib du dossier extrait.
  4. Pour que Eclipse l'accepte, vous devez maintenant placer deux fichiers dans la racine du dossier extrait:
    • .projet
    • .classpath
  5. Pour ce faire, créez un nouveau projet factice Android dans Eclipse et copiez les fichiers, ou copiez-le à partir d'un projet Android existant.
  6. Ouvrez le fichier .project, recherchez la balise de nom XML et remplacez-en le contenu par myProjectLib (ou le nom que vous avez appelé votre fichier jar ci-dessus) et enregistrez.
  7. Maintenant, dans Eclipse, vous pouvez Fichier -> Nouveau -> Projet -> Android projeter de la source existante .. et pointer vers 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 la case 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 récemment ajouté à la liste des dépendances.
15
rsp1984

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

  1. Recherche tous les fichiers * .aar et en extrait classes.jar
  2. 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!

7
ddmytrenko

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:

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

  2. Ajoutez le module nouvellement créé en tant que dépendance à votre projet principal (ne savez pas si nécessaire)

  3. 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.

access .jar from .aar

5
Sébastien
 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.

enter image description hereenter image description here

5
anand krish

.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".

4
OneWorld

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
}
0
Stepango