Mon projet n'était initialement pas destiné à Android, et ses ressources sont organisées selon la structure de répertoires suivante (j'espère que l'art ASCII se rend assez 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/
Mon game/android/jni
répertoire est presque vide car Android.mk
pointe vers les chemins relatifs des fichiers source dans engine/src
et game/src
. En fait, il inclut même les Makefile
s appropriés afin que je n'ai jamais à modifier Android.mk
lorsque j'ajoute ou supprime un fichier source au projet.
Les deux engine
et game
fournissent des actifs qui doivent être livrés avec la version Android. Je voudrais build.xml
faire référence à ces actifs sans avoir à les copier manuellement. Une règle qui copie les actifs au moment de la construction puis les supprime serait acceptable, mais bien sûr, je préférerais une solution sans copie. Est-ce que ça a du sens? Comment les autres ont-ils résolu ce problème de construction multiplateforme?
la source
res
soit ouassets
) est précisément ce que je ne veux pas faire. Comme je l'ai dit dans la question, à la foisengine
etgame
fournir les actifs que je veux expédier.assets
répertoire, vous permettant de conserver toute structure de répertoire spécifique au jeu. Pour ce qui est de Windows symlinks: windows7home.net/how-to-create-symbolic-link-in-windows-7La propriété de génération Ant "asset.dir" est chargée de fournir le nom du répertoire des actifs. Il s'agit de "actifs" par défaut, mais vous pouvez le remplacer par quelque chose comme "../assets". Cela modifie le chemin du répertoire entier, mais si vous avez des ressources spécifiques à Android, vous pouvez toujours utiliser le répertoire "res".
la source
Comme c'est étrange que les autres réponses ici ne répondent pas à votre question ... elles supposent toutes que vous ne voulez qu'un seul répertoire d'actifs, ou référez-vous à res / au lieu d'actifs /.
J'ai également besoin de plus d'un répertoire d'actifs.
J'ai combattu avec le
<aapt>
module des fourmis pendant des heures et des heures et j'ai finalement abandonné et j'ai réalisé qu'il y avait un moyen beaucoup plus facile.J'ai copié la
<target name="-package-resources"...>
balise du fichier de construction principal quiant
utiliseandroid_sdk_dir/tools/ant/build.xml
et collé la balise dans mon projetbuild.xml
(vous devez coller la balise juste avant que le maître nebuild.xml
soit inclus, comme l'build.xml
expliquent les commentaires à la fin du projet prédéfini ), puis ajouté une deuxième section pour simplement exécuterzip
pour ajouter les actifs au fichier .ap_ (qui est${out.absolute.dir}/${resource.package.file.name}
à ce point dans le fichier ant):Cette méthode a l'avantage que vous êtes plus libre de définir la structure de répertoires de vos actifs dans l'arborescence source et dans l'apk (car vous pouvez
exec
zip
plusieurs fois avec des arguments différents, et même encapsulerzip
dans un script qui s'exécute àzip
partir de plusieurs répertoires actuels dans votre arbre source). Vous avez également un contrôle de compression par fichier (zip a une option -0 pour supprimer la compression) et vous n'avez pas besoin d'utiliser la balise nocompress limitée par extension uniquement.Notez que ce
ant
xml vient AVANT zipalign dans le processus de construction de fourmi, nous obtenons donc toujours une archive "compatible zip" qui répond aux besoins d'alignement des APK et Android Java.Dans mon cas, j'ai une application basée sur NDK et je veux accéder à ces actifs à partir du code C uniquement (où tout chemin apk est OK). Si vous devez utiliser les appels d'actifs Java Android standard pour accéder à ces éléments, je ne sais pas s'ils doivent se trouver ou non dans un chemin à l'intérieur du fichier zip nommé actifs. Si tel est le cas, vous pouvez adapter l'astuce ci-dessus en
exec
insérant un scriptcd
dans le dossier d'arborescence source approprié, puis en l'exécutantzip
.la source
Du haut de ma tête, je ne pense pas que vous puissiez utiliser quoi que ce soit en dehors de res /, mais si vous cherchez à éviter des coûts supplémentaires pour votre cycle de développement avec une copie, vous pouvez essayer de les déplacer à la place ou peut-être même d'utiliser un lien symbolique ...
la source
engine
répertoire, qui se trouve dans un référentiel séparé. Les liens symboliques peuvent être acceptables, mais je ne suis pas sûr qu'ils fonctionneraient bien sous Windows et il y a toujours le problème de les synchroniser automatiquement avecbuild.xml
.Si vous utilisiez un projet Maven par opposition à un projet Ant, vous pourriez facilement redéfinir le dossier res pour qu'il soit ce que vous vouliez via l' option de configuration resourceDirectory de l' androïde: apk mojo dans le plugin android-maven .
Malheureusement, à moins que vous ne souhaitiez migrer de Ant à Maven, cette réponse pourrait ne pas vous aider beaucoup ...
la source
Si vous utilisez un système d'exploitation Unix, vous pouvez les lier en dur et dire à votre contrôle de version d'ignorer le
res/
répertoire.la source