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 antutilise android_sdk_dir/tools/ant/build.xmlet collé la balise dans mon projet build.xml(vous devez coller la balise juste avant que le maître ne build.xmlsoit inclus, comme l' build.xmlexpliquent les commentaires à la fin du projet prédéfini ), puis ajouté une deuxième section pour simplement exécuter zippour 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 zipplusieurs fois avec des arguments différents, et même encapsuler zipdans un script qui s'exécute à zippartir 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 antxml 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 execinsérant un script cddans le dossier d'arborescence source approprié, puis en l'exécutant zip.
ressoit ouassets) est précisément ce que je ne veux pas faire. Comme je l'ai dit dans la question, à la foisengineetgamefournir les actifs que je veux expédier.