java - Android NDK(带 SDL)构建基础架构说明

标签 java build 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 将失败。所以这里似乎有构建相关的配置文件? (编辑:这是由于我的 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 应用程序,但您也可以使用 antndk-buildadb 来在命令行上执行所有相同的操作。

关于java - Android NDK(带 SDL)构建基础架构说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585299/

相关文章:

javascript - 如何在Java中使用AJAX?

java - 如果列同时具有字符串和整数值,如何按 HQL 对列进行排序

java - Maven:antrun 插件构建 JAR 文件 -> 如何在我的存储库中安装/部署它?

build-process - 改进您的构建过程

c++ - 适用于 Android 的 FreeType2 交叉编译

android - 构建 Android NDK 项目的问题

java - 重新启动 Play 应用程序 Docker 容器导致 'This application is already running' - RUNNING_PID 未删除

java - 为我自己的类对象制作我自己的 FIFO 队列类来填充它吗?

Android Studio - 错误 :Program type already present

android - Armv6 + ffmpeg + android = sigill(堆)