2011-12-23 1 views
1

J'essaye de porter une application C++ existante à Android en utilisant JNI. Cependant, après avoir généré le fichier build.xml du AndroidManifest.xml et de tenter de construire avec elle, je reçois les éléments suivants (pertinents) Sortie:Erreur avec build.xml pour les répertoires non reconnus dans res/

[aapt] Generating resource IDs... 
    [aapt] invalid resource directory name: /{Project Directory}/res/audio 
    [aapt] invalid resource directory name: /{Project Directory}/res/img 

BUILD FAILED 
/{Android SDK Dir}/tools/ant/build.xml:560: The following error occurred while executing this line: 
/{Android SDK Dir}/tools/ant/build.xml:589: null returned: 1 

Ce sont des répertoires existants dans un répertoire déjà nommé « res » par coïncidence, pas destiné à avoir une signification sémantique pour Java. Si je supprime ceux de res/alors il se construit très bien. Donc ma question est-- quelle est la meilleure façon d'organiser cela (ou dire à ignorer les répertoires non reconnus)? Res est déjà une très grande structure de répertoires avec principalement des fichiers .png .mp3 et des fichiers texte.

Répondre

1

Si changement de nom il est hors de question pour une raison quelconque, vous pouvez surcharger -package-resources dans le build.xml et personnaliser aapt, en spécifiant un nouvel emplacement pour res/ainsi que diverses autres options pour gérer les problèmes qui pourraient survenir (Puis aapt serait la partie à la recherche).

Vous pouvez consulter android-sdk/outils/ant/build.xml pour ce qui cible le fait déjà, mais essentiellement vous suffit de coller dans ce qui suit à votre build.xml

<target name="-package-resources"> 
    <echo>Packaging resources</echo> 
    <aapt executable="${aapt}" 
     command="package" 
     verbose="${verbose}" 
     versioncode="${version.code}" 
     manifest="AndroidManifest.xml" 
     assets="${asset.absolute.dir}" 
     androidjar="${android.jar}" 
     apkfolder="${out.absolute.dir}" 
     resourcefilename="${resource.package.file.name}" 
     projectLibrariesResName="${project.libraries.res}" 
     projectLibrariesPackageName="${project.libraries.package}" 
     resourcefilter="${aapt.resource.filter}"> 

     <res path="${resource.absolute.dir}"/> 
    </aapt> 
</target> 

et personnaliser à vos besoins. Notez aussi qu'il tire le chemin res de resource.absolute.dir, donc si c'est tout ce que vous avez vraiment besoin de faire, alors vous pouvez le définir dans ant.properties ou quel que soit le fichier de propriétés par défaut dans les outils sdk. que vous utilisez Inspectez simplement le fichier build.xml pour voir ou ajouter une nouvelle ligne loadproperties pointant vers la vôtre. IIRC, resource.absolute.dir est défini en fonction de resource.dir, donc vous devrez peut-être essayer chaque mais dans le fichier de propriétés que vous souhaitez simplement définir

resource.dir=new/path/to/res 
Questions connexes