Inicialmente, mi proyecto no estaba destinado a Android, y sus activos están organizados a lo largo de la siguiente estructura de directorios (espero que el arte ASCII se muestre razonablemente bien):
/
+- engine/
| +- src/
| | enginefile1.cpp
| | ...
| `- textures/
| texture1.tex
| ...
+- game/
| +- src/
| | gamefile1.cpp
| | ...
| +- textures/
| | gametexture1.tex
| | ...
| +- ios/
| | [various iOS-specific files]
| `- android/
| | build.xml
| | AndroidManifest.xml
| +- jni/
| | Android.mk
| +- assets/
| [other Android-specific files]
`- othergame/
Mi game/android/jni
directorio está casi vacío porque Android.mk
apunta a las rutas relativas de los archivos de origen en engine/src
y game/src
. En realidad, incluso incluye los mensajes correctos Makefile
para que nunca tenga que modificar Android.mk
cuando agrego o elimino un archivo fuente al proyecto.
Ambos engine
y game
proporcionan activos que deben enviarse con la compilación de Android. Me gustaría build.xml
referirme a estos activos sin tener que copiarlos manualmente. Sería aceptable una regla que copie los activos en el momento de la compilación y luego los elimine, pero, por supuesto, preferiría una solución de copia cero. ¿Esto tiene sentido? ¿Cómo resolvieron otros este problema de compilación multiplataforma?
fuente
res
oassets
) es precisamente lo que no quiero hacer. Como dije en la pregunta, tantoengine
ygame
proporciono activos que quiere enviar.assets
directorio, lo que le permite preservar cualquier estructura de directorio específica del juego. En cuanto a los enlaces simbólicos Windows: windows7home.net/how-to-create-symbolic-link-in-windows-7La propiedad de compilación Ant "asset.dir" es responsable de proporcionar el nombre del directorio de activos. Es "activo" de forma predeterminada, pero puede cambiarlo a algo como "../assets". Esto cambia la ruta de todo el directorio, pero si tiene recursos específicos de Android, aún puede usar el directorio "res".
fuente
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 queant
usa,android_sdk_dir/tools/ant/build.xml
y pegué la etiqueta en mi proyectobuild.xml
(debe pegar la etiqueta justo antes debuild.xml
incluir el maestro , comobuild.xml
explican los comentarios al final del proyecto prefabricado ), luego agregué una segunda sección para simplemente ejecutarzip
para agregar los activos al archivo .ap_ (que se encuentra${out.absolute.dir}/${resource.package.file.name}
en ese punto en el archivo ant):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 envolverzip
un script que se ejecutazip
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 encuentrecd
en la carpeta del árbol de origen relevante y luego se ejecutazip
.fuente
Fuera de mi cabeza, no creo que pueda usar nada fuera de res /, pero si está buscando evitar el costo adicional a su ciclo de desarrollo con una copia, puede intentar moverlos o incluso usar un enlace simbólico ...
fuente
engine
directorio, que está en un repositorio separado. Los enlaces simbólicos pueden ser aceptables, pero no estoy seguro de que funcionen bien en Windows y todavía existe el problema de sincronizarlos automáticamentebuild.xml
.Si estaba utilizando un proyecto Maven en lugar de un proyecto Ant, podría redefinir fácilmente la carpeta res para que sea lo que quisiera a través de la opción de configuración resourceDirectory de android: apk mojo en el complemento android-maven .
Lamentablemente, a menos que estuvieras dispuesto a migrar de usar Ant a Maven, esta respuesta podría no ayudarte mucho ...
fuente
Si está en un sistema operativo Unix, puede vincularlos y decirle a su control de versiones que ignore el
res/
directorio.fuente