2012-01-11 8 views
5

Estoy tratando de extraer la carpeta Android /res en un proyecto separado que se incluye en mi proyecto principal como una dependencia apklib. El problema es que si bien el contenido de /res está incluido en el resultado .apklib, el compilado R.class no lo está. Aún más confuso es que el comando mvn clean install genera el .apklib, así como un archivo .jar, y el archivo jar tiene R.class, pero ninguno de los contenidos de la carpeta /res. ¿Cómo puedo generar un único paquete (ya sea .jar o .apklib) que contenga todos mis recursos, así como las clases compiladas?Android Maven Plugin apklib Mojo no incluye compilación R en el apklib resultante

pom.xml

<packaging>apklib</packaging> 
... 
<plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <configuration> 
    <attachSources>true</attachSources> 
    <sdk> 
     <platform>12</platform> 
    </sdk> 
    </configuration> 
<plugin> 

que genera el siguiente

.jar

./morseflash-resources.jar 
    com/.../R.class  

.apklib

./morseflash-resorces.apklib 
    META-INF 
    AndroidManifest.xml 
    res/ 
     layout/ 
     values/ 

Me gustaría todo este contenido en un solo archivo, y me gustaría poder enumerarlo como una dependencia en mi proyecto principal de Android. ¿Es esto posible? De ser así, ¿cómo podría lograrlo?

Respuesta

10

Esta es la forma en que se supone android-maven-plugin para trabajar, para agregar el proyecto de biblioteca como una dependencia de su proyecto principal, añada el siguiente dependencia en pom.xml de su principal proyecto:

<dependencies> 
    <dependency> 
    <groupId>com.company.common.lib</groupId> 
    <artifactId>common-lib</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <type>apklib</type> 
    </dependency> 
</dependencies> 

Nota que esto es diferente de las dependencias jar regulares, el apklib es simplemente un archivo comprimido de todas sus carpetas src y res que tiene el diseño de estructura de directorio estándar de un proyecto de biblioteca Android/Eclipse (src/com/... en lugar de src/main/java/com/...). El motivo es apoyar el uso de apklib en otros proyectos no malabarizados (consulte el ApkLib documentation para obtener más información). No está agregando su biblioteca como una dependencia compilada de jar, en su lugar, está agregando la dependencia de su biblioteca como código fuente y recursos, simplemente desde un archivo zip.

Al hacer mvn clean install, en el objetivo android-maven-plugin:3.0.0:generate-sources, android-maven-plugin descomprimirá su dependencia de apklib y combinará el código fuente y los recursos en su proyecto principal antes de compilar su proyecto; así es como se supone que los Proyectos de Biblioteca Android funcionan. El Proyecto de la Biblioteca no es simplemente compilar todo. Para ahorrar memoria y espacio en disco, solo las partes usadas se copian y compilan en la apk final. Puede anular los recursos fácilmente en el proyecto principal, ya que simplemente reemplazan los elementos de la biblioteca en el paso de fusión antes de la compilación final.

Es feo pero así es como funcionan las cosas en este momento, el equipo de Android Dev está trabajando actualmente en esto y admitirá la dependencia de jar en el futuro, probablemente en r17 (que también requiere android-maven-plugin change/upgrade I supongo), más detalles en su publicación oficial de blog "Changes to Library Projects in Android SDK Tools, r14".

+2

Gracias. Esto es mucho más útil que cualquier cosa que pueda encontrar en la documentación de android-maven-plugin, o la documentación de Sonatype en las tareas de Android. – Fil

+0

de la documentación vinculada: "** Deprecation **. En su lugar, debe usar Android Archive Resource (AAR). Apklib se introdujo como una medida de pausa para permitir una capacidad limitada para agrupar y compartir recursos de la biblioteca de Android.Ahora que el equipo de Android ha lanzado el formato AAR que contiene el código compilado, debe usarlo en su lugar. " –

+0

ahora el enlace apklib está roto. –

Cuestiones relacionadas