android ant android-drawable aapt

android - Ant Build AAPT Crunch está eliminando información draw9 de las imágenes de recursos de la biblioteca



android-drawable (2)

Tengo un proyecto que está usando un proyecto de biblioteca. El Proyecto de biblioteca tiene archivos draw9 (9.png) y al compilar el apk a través de Ant, está eliminando la información draw9 en áreas escalables y rellenables. El resultado es que la aplicación solo estira las imágenes sin usar la información draw9. En build.xml de Android

<target name="-package-resources" depends="-crunch">

esto está llamando crunch, que actualiza el caché PNG preprocesado (¿alguien sabe dónde se guarda este caché?).

-crunch ejecuta una tarea en aapt llamada crunch. Pero no he podido encontrar ninguna información sobre los argumentos. Parece tomar los archivos de la carpeta Res y colocarlos en la carpeta de salida (por defecto, bin / res).

Así que incluso borré la tarea para que no se agotara, y las imágenes fijas no se estiraron correctamente. Luego lo reemplacé con una copia directa de los archivos png a la carpeta de salida, y el mismo problema. Incluso intenté limpiar hormigas entre estas tareas y tuve el mismo problema. Lo que me lleva a pensar que el caché se está llevando a cabo fuera del área del proyecto, pero ¿dónde?

Tenga en cuenta que cuando lo construyo con Eclipse todo está bien.

La otra solución que funciona para mí es copiar estas imágenes de la Biblioteca en el Proyecto Principal, pero no es la solución ideal.

Alguien más parece haber tenido problemas con este empaque crunch / resource con aapt en ant build usa caché de otros proyectos

En este informe de errores, mencionan que la memoria caché solo usa marcas de tiempo para verificar si se debe actualizar la caché o no.

Este parece ser el código fuente de aapt , pero tuve problemas tratando de encontrar dónde se almacena este caché para leerlo.

Descubre el problema

Para mí, lo que estaba causando el problema era que estaba usando diferentes carpetas (intencionalmente) en Ant para mis res, src y bin. Hay un proyecto de referencia.library.res.folder.path que se completa en la macro de dependencia. Apunta a las carpetas predeterminadas res y bin del proyecto. Entonces, lo que hice fue cambiarlos para apuntar mis nuevas carpetas. Pero al hacer eso, estaba cambiando el antiguo que figuraban en la lista. Comenzó a mezclar los archivos de recursos en diferentes proyectos de biblioteca que estaba usando cuando se ejecutaba aapt. Cuando arreglé el pedido, estaba compilando bien. También lo hice para project.library.bin.r.file.path.


Creo que tienes que haber reducido el recurso del proyecto de la biblioteca.

Tratar

aapt crunch -v -S res -C bin/res

en la carpeta del proyecto de tu biblioteca, y reconstruye. Eso ayudó para mí. Ahora la pregunta es cómo automatizar eso.


He tenido exactamente el mismo problema ayer.

Tengo una base de código que utilizo para construir diferentes sabores de la aplicación (nombre del paquete diff y algunos recursos específicos) usando hormiga.

build.xml funcionó bien, pero 9 parches se dañaron durante el uso de la aplicación (como dices, se trata como png y estirada).

-crunch el problema a la tarea de -crunch dentro de la hormiga (tal como lo hiciste).

En mi caso, utilizo dos carpetas de res diferentes, así que cambié la tarea de contracción original de este

<!-- Updates the pre-processed PNG cache --> <target name="-crunch"> <exec executable="${aapt}" taskName="crunch"> <arg value="crunch" /> <arg value="-v" /> <arg value="-S" /> <arg path="${resource.absolute.dir}" /> <arg value="-C" /> <arg path="${out.res.absolute.dir}" /> </exec> </target>

a esto

<target name="-crunch"> <exec executable="${aapt}" taskName="crunch"> <arg value="crunch" /> <arg value="-v" /> <arg value="-S" /> <arg path="${resource.flavour.dir}" /> <arg value="-S" /> <arg path="${resource.absolute.dir}" /> <arg value="-C" /> <arg path="${out.res.absolute.dir}" /> </exec> </target>

pero esto produjo los mencionados 9patch artefactos (también en bibliotecas como fb) ... así que pensé en cambiar esto para procesar resourceflavour.dir solo si esta no es una biblioteca que dio el resultado correcto (no hay artefactos de 9pathc)

<target name="-crunch"> <do-only-if-not-library elseText="Library project: do not package resources..." > <exec executable="${aapt}" taskName="crunch"> <arg value="crunch" /> <arg value="-v" /> <arg value="-S" /> <arg path="${resource.flavour.dir}" /> <arg value="-C" /> <arg path="${out.res.absolute.dir}" /> </exec> </do-only-if-not-library> <exec executable="${aapt}" taskName="crunch"> <arg value="crunch" /> <arg value="-v" /> <arg value="-S" /> <arg path="${resource.absolute.dir}" /> <arg value="-C" /> <arg path="${out.res.absolute.dir}" /> </exec> </target>

Esto podría darle una pista de la solución adecuada en su caso.