我对使用 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 将失败。所以这里似乎有构建相关的配置文件? (编辑:这是由于我的 makefile 有问题 - 也感谢上帝。那部分真的没有意义...... ) 我想我的问题是:bin 文件夹的作用是什么? .d 文件是什么?哪些文件可以安全删除(在构建期间生成)?
“gen”、“libs”、“obj”、“res”文件夹:
对这些内容的高级概述也很有帮助。 :) 此外,哪些可以安全删除(在构建期间自动生成)?
编辑: 经过进一步的实验,“gen”似乎可以安全地被删除,并且会在构建过程中自动重新生成。
我认为可以安全地假设“libs”不能被安全清除,但仍然不清楚它究竟做了什么。
看起来“obj”也可以安全地清除 - 尽管它需要更长的构建过程,编译所有 SDL 代码等。似乎包含 SDL 的中间构建文件。
'res' 不能被安全清除。仍然不知道里面有什么/它有什么作用。
*.properties 文件
如果这些是自动生成的,为什么它们位于项目的根目录?我假设它们是构建过程的一些中间文件?
编辑:他们都说它们是自动生成的,但看起来它们不能被删除,否则构建过程将失败。它会告诉你使用'android update-project'自动生成关于'sdk.dir'(什么?)的东西(但stackoverflow搜索告诉你使用'android update project -s -t“android-19”-p .',但由于目标无效,这也不起作用,所以我应该输入“android list targets”来找出目标,但该列表是空的,呃。所以我只是通过 git 重新检查了这些文件,它再次工作。所以是的 - 仍然不知道它们是什么,它们是如何生成的,为什么它们在它们所在的位置等等...
长话短说:
感觉整个构建基础架构都非常不清楚/过于复杂。我缺少哪些可能有助于所有这些点击的部分?
我想如果有任何好的文档来源/解释这一切到底是怎么回事,我很乐意被引导到它。我发现的大部分内容都是这样的形式:“哦,你想为 android 构建一些东西吗?好吧,点击这里,然后点击这里,然后点击这里,然后你就可以了!它已经构建好了!”,我宁愿有告诉我发生了什么以及为什么/如何发生的事情。
抱歉,这篇文章有点乱 - 非常感谢对任何问题的回答/对任何进一步学习资源的指示!
最佳答案
是的,这是一团糟。这很困惑,因为这个单一的目录树包含了 IDE 项目、交叉编译和打包的所有组织需求,Android 内部没有人认为保持它的整洁很重要。
如果您的 AndroidManifest.xml 有额外的副本,请忽略它们。它们应该只是打包过程的一部分。
将 bin
视为您的输出目录,而不仅仅是二进制文件。您唯一真正关心的是 apk。
.d
是最常用于目录的扩展名。因此,如果一个构建过程必须创建一个目录来保存文件,这些文件有助于根据单个输入文件指导后续步骤,那么它可以只在输入文件之后命名该目录并在其上添加一个 .d
.
gen
作为构建过程的一部分生成。删除是安全的,但通常没有必要这样做。
libs
是链接到您的应用程序所需的本地库。在某些情况下,您会将要使用的 Java jar 放入其中。
obj
用于编译器创建的目标文件。链接器需要这些来实际创建应用程序的 native 二进制文件。删除它们并重新运行编译器是安全的,但这是您正在执行的完全重新编译。
res
用于应用程序资源文件。有些是 Android 所必需的,您可以在其中添加更多您将在 Java 代码中使用的文件。
如果您使用的是 SDL 2.0,您还应该有一个 assets
目录,其中包含您的 native 代码引用的数据文件。
它确实说一些构建文件是自动生成的......但你的构建不是生成它们的原因。
我使用 Eclipse(勉强地)构建我的 Android 应用程序,但您也可以使用 ant
、ndk-build
和 adb
来在命令行上执行所有相同的操作。
关于java - Android NDK(带 SDL)构建基础架构说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585299/