2011-12-23 21 views
1

我试图端口现有的C++应用程序中使用JNI到Android。然而,产生从AndroidManifest.xml中的build.xml文件,并试图建立与它之后,我得到下面的(相关)输出:错误与资源的build.xml未确认目录/

[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 

在已经被命名为“资源”目录这些都是现有目录巧合,并不意味着对Java有语义含义。如果我从res /中删除这些,那么它的构建就很好。所以我的问题是 - 组织这个(或告诉蚂蚁忽略无法识别的目录)的最佳方式是什么? Res已经是一个非常大的目录结构,主要是.png .mp3和文本文件。

回答

1

如果重命名他们是出于无论什么原因的问题,你可以在build.xml中覆盖-package资源和定制AAPT,指定新的位置RES /各种其它选项来处理,可能出现了问题(然后AAPT会研究部分)。

您可以检查Android的SDK /工具/ ANT /什么是目标已经做的build.xml,但本质上,你只会在下面你自己的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> 

和定制粘贴您的需求。

另请注意,它从resource.absolute.dir中提取res路径,所以如果你真的需要这样做,那么你可以在ant.properties中设置它,或者默认的属性文件在sdk工具中是什么你正在使用。只需检查build.xml即可查看或添加指向自己的新的loadproperties行。 IIRC,resource.absolute.dir根据resource.dir设置,因此您可能必须尝试每个属性文件,但您只需设置属性文件

resource.dir=new/path/to/res