He estado leyendo algunos artículos sobre la nueva adopción de Gradle como sistema de compilación estándar para aplicaciones de Android. Bueno, viniendo del desarrollo estándar de Java, generalmente dependo de los archivos jar para construir mi proyecto. Sin embargo, parece que Android también tiene paquetes aar , que son equivalentes a los archivos dll en un sistema operativo Windows, como se menciona aquí :
Primero, debe darse cuenta de que la plataforma Android no permite "bibliotecas compartidas" a nivel de aplicación. En las plataformas de lenguaje de programación "tradicional", C, C ++, Java, lo que sea, tenemos este mecanismo para compartir bibliotecas de tiempo de ejecución. (Por ejemplo, DLL en Windows, DSO en Unix, Jar en JVM, etc.). Sin embargo, en Android, no puede hacerlo, a menos que sea Google o un fabricante de teléfonos (consulte la Nota 1 a pie de página a continuación). Como desarrollador de aplicaciones, esto puede ser una limitación fundamental. "Compartir" o "reutilizar" códigos, tanto en tiempo de compilación como en tiempo de ejecución, es una parte muy importante de la práctica de ingeniería de software. Esto es bastante difícil (no imposible, solo más difícil) en Android debido a la limitación mencionada anteriormente.
Sin embargo, tengo algunas dudas sobre este concepto. Quiero decir, ¿cuándo debería estar interesado un desarrollador incluyendo las dependencias aar en su aplicación? ¿Estas dependencias están ajustadas a alguna versión mínima de SDK?
Por ejemplo, en un proyecto accedo a un puerto COM, para el que uso las bibliotecas .so precompiladas de NDK . ¿Tengo que crear un aar si quiero compartir esta utilidad?
La afirmación " La principal diferencia entre un Jar y un AAR es que los AAR incluyen recursos como diseños, dibujos, etc. " no corresponde a la especificación del archivo JAR y, por lo tanto, no es una verdad. Según la especificación del archivo JAR :
Como puede ver, no hay limitación de contenido que prohíba incluir recursos como diseños, diseños, etc. en un archivo JAR. Para obtener más detalles, consulte el artículo 5.3 "Creación y carga" de la especificación de máquina virtual Java®.
Entonces, sobre la pregunta Android Archive Library (aar) vs jar estándar. La respuesta depende de qué herramienta de compilación esté utilizando.
Si está utilizando Android Studio como herramienta de compilación (respectivamente como organizador de proyectos), definitivamente será mejor que use archivos * .aar para compartir recursos encapsulados entre proyectos de Android. El formato de archivo AAR es parte de la compilación de Android Studio y, como se comenta en los otros comentarios aquí, su interfaz de usuario admite el formato aar para las bibliotecas de Android.
Pero excepto Android Studio, el resto del mundo no sabe qué es ese archivo aar (artefacto). Por ejemplo, si su compilación de Android se basa en Maven, el archivo preferido para compartir recursos será jar porque ese es el artefacto nativo del proyecto Java Maven y no hay ninguna limitación sobre qué poner en el archivo jar estándar. Además, hay una manera de explicarle a Maven cualquier formato de archivo, incluido aar mediante la mejora del ciclo de vida con un nuevo componente. Un ejemplo simple está disponible aquí. ¿Cómo creo un nuevo tipo de empaque para Maven?
fuente
La cita en la pregunta no tiene nada en común con la realidad actual. Por supuesto, es posible usar bibliotecas externas en Android y hay muchas bibliotecas disponibles. Tal vez quisieron decir que cada aplicación debe agrupar todas las bibliotecas que necesita, pero reutilizar la biblioteca en el momento de la compilación (enlace estático) realmente no es un problema.
.aar
difiere de.jar
no más de lo que.jar
difiere de.zip
. Tiene ciertos conceptos en los que se deben esperar allí tipo de contenido, pero ambos.jar
, y.aar
más a menudo contienen compilado clases y recursos..aar
solo especifica que la biblioteca es específica de Android y tiene una estructura esperada, razonable para dichas bibliotecas (bueno,.jar
también tiene una estructura esperada).La opinión de que .aar solo es compatible con Android Studio también está en desuso. Dichas bibliotecas se pueden implementar en Maven Central, y herramientas como gradle pueden hacer referencia a ellas utilizando el sufijo @aar, por ejemplo:
para hacer referencia a este despliegue central de Maven.
fuente