Android NDK(与 SDL)构建基础架构说明



我对使用Android,Java,NDK和SDL构建东西相对较新。但是我一直在我正在构建的一个示例项目中摸索,有很多我觉得非常令人困惑的地方。

这是我的文件结构的打印输出 - 供参考:

MyProj
-android-project      //I created this to dump android-specific junk into
--src                 //java source files
--jni                 //"java native interface" - c/c++ source files
--AndroidManifest.xml //packaged with .apk to inform OS of various details of app
--bin                 //binary files?
---AndroidManifest.xml //Copy of AndroidManifest.xml in above dir?
---AndroidManifest.xml.d
---SDLActivity-debug-unaligned.apk
---SDLActivity-debug-unaligned.apk.d
---SDLActivity-debug.apk
---SDLActivity.ap_
---SDLActivity.ap_.d
---build.prop
---classes
---classes.dex
---classes.dex.d
---dexedLibs
---proguard.txt
---res
---rsLibs
---rsObj
--gen                 //no idea
--libs                //no idea
--obj                 //no idea
--res                 //no idea
--build.xml           //points to files regarding build config
--default.properties  //auto-generated?
--local.properties    //auto-generated?
--project.properties  //auto-generated?
所以,我

有几个具体的问题,但是如果我对任何假设有误,或者您认为我可能遗漏了一些信息,我将不胜感激!

无论如何-

"bin"文件夹:

我假设"bin"是二进制文件...右?但似乎不是。它包含AndroidManifest的副本.xml(为什么?(,其他一些文本内容,我的项目.apk,以及一堆我不明白的文件夹。它还有一堆附加了".d"的东西的副本(例如"AndroidManifest.xml.d"(。为什么?另外,如果我擦除此文件夹,ndk-build将失败。所以这里似乎有与构建相关的配置文件?(编辑:这是由于我的制作文件有错误 - 也感谢上帝。 那部分真的没有意义......我想我的问题是这些:bin 文件夹的作用是什么?什么是 .d 文件?哪些文件可以安全删除(在构建过程中生成(?

"生成"、"库"、"OBJ"、"res"文件夹:

对这些情况进行高层次的概述也会有所帮助。 :)另外,哪些是可以安全删除的(在构建过程中自动生成(?

编辑:经过进一步的实验,似乎可以安全地擦除"Gen",并将在构建过程中自动重新生成

我认为可以安全地假设"libs"无法安全清除,但仍然不清楚它到底做了什么。

看起来"obj"也可以安全地清除 - 尽管它需要更长的构建过程,编译所有 SDL 代码等。似乎包含 SDL 的中间构建文件。

"res"无法安全清除。 仍然不知道里面有什么/它做了什么。

*.属性文件

如果这些是自动生成的,为什么它们是项目的根目录?我假设它们是构建过程的某个中间文件?

编辑:他们都它们是自动生成的,但似乎无法删除它们,否则构建过程将失败。它会告诉你使用"android update-project"自动生成有关"sdk.dir"(什么?(的东西(但stackoverflow搜索告诉你使用'android update project -s -t "android-19" -p .(,但这也不起作用,因为目标无效,所以我应该输入"android列表目标"来找出目标,但该列表是空的,呃。 所以我只是通过 git 重新签出了这些文件,它又可以工作了。 所以是 - 仍然没有知道它们是什么,它们是如何生成的,为什么它们在哪里,等等......

博士:

感觉整个构建基础设施都非常不清楚/过于复杂。我错过了哪些可能有助于所有这些点击的部分?

我想如果有任何好的文档来源/解释所有这些到底发生了什么,我很乐意被引导到它。我发现的大多数东西都是"哦,你想为Android构建一些东西吗?好吧,点击这里,然后在这里,然后在这里,然后你去吧!它已经建成了!",我宁愿有一些东西告诉我发生了什么以及为什么/如何。

抱歉,这篇文章有点漫无边际 - 回答任何问题/指向任何进一步学习的资源的指针将不胜感激!

是的,一团糟。 这很混乱,因为这个单一目录树包含了 IDE 项目、交叉编译和打包的所有组织需求,Android 中没有人认为保持它干净很重要。

如果您的 AndroidManifest.xml 有额外的副本,请忽略它们。 它们应该只是包装过程的一部分。

bin视为输出目录,而不仅仅是二进制文件。 你唯一真正关心的是apk。

.d是最常用于目录的扩展。 因此,如果构建过程必须创建一个目录来保存文件,这有助于根据单个输入文件指导后续步骤,那么它可以在输入文件之后命名目录并在其上打.d

gen作为生成过程的一部分生成。 删除是安全的,但通常不需要这样做。

libs是链接到应用所需的本地库。 在某些情况下,你会把一个你想要使用的Javajar放在那里。

obj适用于编译器创建的目标文件。 链接器需要这些来实际创建应用的本机二进制文件。 删除这些内容并重新运行编译器是安全的,但这是您正在执行的完全重新编译。

res适用于应用资源文件。 有些是Android需要的,你可以在那里添加更多文件,你将在Java代码中使用。

如果您使用的是 SDL 2.0,则还应该有一个 assets 目录来保存本机代码引用的数据文件。

它确实说一些构建文件是自动生成的...... 但你的构建并不是生成它们的原因。

我(勉强(使用 Eclipse 来构建我的 Android 应用程序,但您也可以使用 antndk-buildadb 在命令行上做所有相同的事情。

最新更新