1

我正在尝试使用 JNI 将现有的 C++ 应用程序移植到 android。但是,在从 AndroidManifest.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

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

4

2 回答 2

1

如果出于某种原因无法重命名它们,您可以覆盖 build.xml 中的 -package-resources 并自定义 aapt,为 res/ 指定新位置以及各种其他选项来处理可能出现的问题(然后 aapt将是研究的一部分)。

您可以检查 android-sdk/tools/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
于 2011-12-23T03:04:49.743 回答
0

音频进入 {Project Directory}/res/raw 和图像进入 {Project Directory}/res/drawable

此页面可能对您有用:http:
//developer.android.com/guide/topics/resources/index.html

于 2011-12-23T02:06:31.833 回答