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 qui ant
utilise android_sdk_dir/tools/ant/build.xml
et collé la balise dans mon projet build.xml
(vous devez coller la balise juste avant que le maître ne build.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écuter zip
pour ajouter les actifs au fichier .ap_ (qui est ${out.absolute.dir}/${resource.package.file.name}
à ce point dans le fichier 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>
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 encapsuler zip
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 script cd
dans le dossier d'arborescence source approprié, puis en l'exécutant zip
.
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.