Cómo convertir AAR a JAR

Situación :

Tengo la intención de usar una biblioteca Java y solo tengo un archivo AAR de un repository Maven, pero necesito el archivo JAR .

Historia de fondo:

Traté de comstackr una biblioteca, pero su estructura de Gradle era inestable. Así que pedí un archivo jar comstackdo y su desarrollador me entregó un archivo aar de algún repository de Maven (el desarrollador no pudo comstackr su propio proyecto). La configuración de Gradle era un desastre, dependía de múltiples bibliotecas y Gradle arrojó algunas excepciones.

Traté de usarlo en IDEA IDE, pero no pude verlo. Un proyecto de biblioteca debería poder comstackrse en un archivo jar, ¿verdad?

Pregunta :

¿Qué debo hacer para convertir ese archivo AAR en un archivo JAR?

El archivo AAR consta de un archivo JAR y algunos archivos de recursos (básicamente es un archivo zip estándar con una extensión de archivo personalizada). Aquí están los pasos para convertir:

  1. Extraiga el archivo AAR usando un extracto zip estándar (renómbrelo a * .zip para hacerlo más fácil)
  2. Encuentre el archivo classes.jar en los archivos extraídos
  3. Renombrelo como desee y use ese archivo jar en su proyecto

.aar es un archivo zip estándar, el mismo que se usa en .jar. Simplemente cambie la extensión y, suponiendo que no esté corrupta o algo así, debería estar bien.

Si lo necesitara, podría extraerlo a su sistema de archivos y luego volverlo a empaquetar como un contenedor.

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

Como muchas otras personas han señalado, simplemente extraer el .jar del archivo .aar no acaba de cortarlo ya que pueden faltar recursos.

Estos son los pasos que funcionaron para mí (contexto de Android, su millaje puede variar si tiene otros propósitos):

  1. Cambia el nombre del archivo .aar a .zip y extract.
  2. La carpeta extraída es un proyecto ADT que puede importar en Eclipse con algunas modificaciones menores (ver más abajo).
  3. En la carpeta extraída, cambie el nombre del archivo contenido classes.jar a lo que desee (en este ejemplo myProjectLib.jar) y muévalo a la carpeta lib dentro de la carpeta extraída.
  4. Ahora, para que Eclipse lo acepte, debe colocar dos archivos en la raíz de la carpeta extraída:
    • .proyecto
    • .classpath
  5. Para hacerlo, cree un nuevo proyecto ficticio de Android en Eclipse y copie los archivos, o copie desde un proyecto de Android existente.
  6. Abra el archivo .project y busque la etiqueta de nombre XML y reemplace su contenido con myProjectLib (o lo que usted llame su archivo jar anterior) y guárdelo.
  7. Ahora en Eclipse puede Archivar -> Nuevo -> Proyecto -> Proyecto Android desde una fuente existente … y señalar el contenido de la carpeta extraída.
  8. Después de importar, haga clic con el botón derecho en el proyecto recién creado, seleccione Propiedades -> Android y marque Es Biblioteca .
  9. En su proyecto principal para el que desea usar la biblioteca, también vaya a Propiedades -> Android y agregue el myProjectLib recién agregado a la lista de dependencias.

Para aquellos que quieran hacerlo automáticamente, he escrito un pequeño guión bash de dos líneas que hace las siguientes dos cosas:

  1. Busca todos los archivos * .aar y extrae classes.jar de ellos
  2. Cambia el nombre de classes.jar para que sea como el aar pero con una nueva extensión

     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`' \; 

¡Eso es!

  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. 

Nota: Si desea obtener únicamente el archivo .jar de su archivo .aar, utilice el procedimiento anterior. Supongamos que si desea incluir el archivo manifest.xml y los recursos con su archivo .jar, puede hacer clic derecho en su archivo .aar y guardarlo como archivo .jar directamente en lugar de guardarlo como .zip. Para ver el archivo .jar que ha extraído, descargue JD-GUI (Java Decompiler) . Luego arrastre y suelte su archivo .jar en este JD_GUI, puede ver el archivo .class en formatos legibles como un archivo .java.

enter image description here enter image description here

Basado en recursos .aar-projects

Encontrar el archivo classes.jar dentro del archivo .aar es bastante trivial. Sin embargo, ese enfoque no funciona, si el proyecto .aar definió algunos recursos (ejemplo: R.layout.xyz)

  • Por lo tanto, deaar de CommonsGuy me ayudó a obtener un proyecto válido para ADT de un archivo .aar. En mi caso, convertí subsampling-scale-image-view . Me llevó alrededor de una hora configurar Ruby en mi PC.

  • Otro enfoque es usar android-maven-plugin para Eclipse / ADT como lo describe CommonsGuy en su blog .

  • Otro enfoque más podría ser clonar todo el proyecto deseado como fuente de git e importarlo como “Proyecto de Android existente”.

Android Studio (versión: 1.3.2) le permite acceder sin problemas al archivo .jar dentro de .aar.

¡Bonificación: descomstack automáticamente las clases!

Simplemente siga estos pasos:

  1. File > New > New Module > Import .JAR/.AAR Package para importarlo .aar como un módulo

  2. Agregue el módulo recién creado como una dependencia a su proyecto principal (no estoy seguro si es necesario)

  3. Haga clic derecho en “classes.jar” como se muestra en la captura a continuación, y haga clic en “Mostrar en el explorador”. Aquí está tu .jar.

acceder .jar desde .aar