Qué extraño que las otras respuestas aquí no respondan a su pregunta ... todos asumen que solo desea un directorio de activos, o se refieren a res / en lugar de activos /.
También necesito más de un directorio de activos.
Luché con el <aapt>
módulo hormiga durante horas y horas y finalmente me di por vencido y me di cuenta de que hay una manera mucho más fácil.
Copié la <target name="-package-resources"...>
etiqueta del archivo de compilación maestro que ant
usa, android_sdk_dir/tools/ant/build.xml
y pegué la etiqueta en mi proyecto build.xml
(debe pegar la etiqueta justo antes de build.xml
incluir el maestro , como build.xml
explican los comentarios al final del proyecto prefabricado ), luego agregué una segunda sección para simplemente ejecutar zip
para agregar los activos al archivo .ap_ (que se encuentra ${out.absolute.dir}/${resource.package.file.name}
en ese punto en el archivo ant):
<target name="-package-resources" depends="-crunch">
<!-- only package resources if *not* a library project -->
<do-only-if-not-library elseText="Library project: do not package resources..." >
<aapt executable="${aapt}"
command="package"
versioncode="${version.code}"
versionname="${version.name}"
debug="${build.is.packaging.debug}"
manifest="${out.manifest.abs.file}"
assets="${asset.absolute.dir}"
androidjar="${project.target.android.jar}"
apkfolder="${out.absolute.dir}"
nocrunch="${build.packaging.nocrunch}"
resourcefilename="${resource.package.file.name}"
resourcefilter="${aapt.resource.filter}"
libraryResFolderPathRefid="project.library.res.folder.path"
libraryPackagesRefid="project.library.packages"
libraryRFileRefid="project.library.bin.r.file.path"
previousBuildType="${build.last.target}"
buildType="${build.target}"
ignoreAssets="${aapt.ignore.assets}">
<res path="${out.res.absolute.dir}" />
<res path="${resource.absolute.dir}" />
<!-- <nocompress /> forces no compression on any files in assets or res/raw -->
<!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw -->
</aapt>
<!--
NEW XML STARTS HERE
-->
<exec executable="zip" failonerror="true">
<arg value="-r" />
<arg value="${out.absolute.dir}/${resource.package.file.name}" />
<arg value="my_assets_directory_1" />
<arg value="my_assets_directory_2" />
<arg value="my_assets_directory_3" />
</exec>
<!--
NEW XML ENDS HERE
-->
</do-only-if-not-library>
</target>
Este método tiene la ventaja de que tiene más libertad para definir la estructura de directorios de sus activos en el árbol de origen y en el apk (ya que puede hacerlo exec
zip
varias veces con diferentes argumentos e incluso envolver zip
un script que se ejecuta zip
desde múltiples directorios actuales en su árbol de origen). También tiene control de compresión por archivo (zip tiene una opción -0 para suprimir la compresión) y no necesita usar la etiqueta limitada de no compresión por extensión.
Tenga en cuenta que este ant
xml viene ANTES de zipalign en el proceso de compilación de hormigas, por lo que todavía obtenemos un archivo "compatible con zip" que satisface las necesidades de alineación de APK y Android Java.
En mi caso, tengo una aplicación basada en NDK y quiero acceder a estos activos solo desde el código C (donde cualquier ruta apk está bien). Si necesita usar las llamadas estándar de activos Java de Android para acceder a estos elementos, no estoy seguro de si deben estar o no en una ruta dentro de los activos con nombre zip / o no. Si es así, puede adaptar el truco anterior al exec
crear una secuencia de comandos que se encuentre cd
en la carpeta del árbol de origen relevante y luego se ejecuta zip
.
res
oassets
) es precisamente lo que no quiero hacer. Como dije en la pregunta, tantoengine
ygame
proporciono activos que quiere enviar.