在Android NDK的文档中,存在以下声明:
Android.mk文件位于项目的jni /目录[...]的子目录中 http://developer.android.com/ndk/guides/android_mk.html
我可以从中解释一个Android.mk
文件应放在[project_path]/jni/[module_name]/Android.mk
中,每个模块都有自己的特定Android.mk
文件,因为这是它与应用程序范围的区别{{ 1}}文件,但是当我执行Application.mk
时,我收到以下错误消息:
Android NDK:./jni下没有Android.mk Android NDK:如果这是故意的,请将APP_BUILD_SCRIPT定义为指向
Android NDK:到有效的NDK构建脚本。
我从那里开始收集我应该在我的ndk-build
文件旁边创建一个Android.mk
文件,或者在Application.mk
中定义APP_BUILD_SCRIPT
以指向一个Application.mk
文件。这与文档相矛盾,让我想知道为什么当Android.mk
将包含所有模块的定义时,需要多个make文件 - 这些文件也可以放在Android.mk
中。
阅读几个NDK示例项目我发现,Application.mk
文件确实与Android.mk
位于同一目录中,并且对它们执行Application.mk
似乎有效。
缺少什么?
答案 0 :(得分:1)
<project>/
|
+-- jni/
| |
| +-- Android.mk
| +-- [Application.mk] (optionally)
| +-- main.c
|
+-- AndroidManifest.xml
根据此处的简短指南:https://developer.android.com/ndk/guides/concepts
- 在项目的jni /目录中创建一个Android.mk文件
- ...使用ndk-build编译您的本机代码
$ cd <path>/<to>/<project> $ <ndk>/ndk-build
但是,有一种方法可以使用带有参数的ndk-build
来定义自定义NDK项目结构。
<mylib>/
|
+-- Android.mk
+-- [Application.mk]
+-- main.c
$ cd <mylib>
$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk
当Android.mk无论如何都包含所有模块的定义时,为什么需要多个makefile-也可以将它们放置在Application.mk中。
Android.mk
是必需的,而Application.mk
不是必需的。Android.mk
包含模块定义,Application.mk
描述体系结构,编译器选项和其他“全局”选项。Android.mk
与Application.mk
正交。如果Android.mk
包含3个模块,并且Application.mk
包含2个ABI(例如arm和x86),则NDK将构建(3 * 2)个工件。Application.mk
中的变量出现在Android.mk
中,因此您可以使用例如APP_ABI
中的Android.mk
来链接与体系结构相关的库。Application.mk
中保留通用选项是一种干净的方法。Application.mk
仍然只是设计决定,本来可以完成的。答案 1 :(得分:0)
我至少可以回答你的一些问题。你说文档有点令人困惑是正确的。如果您使用的是单个本机模块,那么Application.mk确实可能看起来多余 - 但是,有一些事情只能由Application.mk设置(您可以在这里查看:Application.mk)。 Application.mk适用于适用于所有模块的设置,而Android.mk适用于特定模块设置。实际上,通常简单的项目只有一个Android.mk,它与Application.mk位于同一个文件夹中。
您可以定义放置它们的位置,这也取决于您构建代码的方式 - 例如,如果您正在使用任务来构建ndk,请使用&nbspk-build&#39;和commandLine命令,您将文件夹路径作为参数传递。通常,根据我的经验,它们位于jni文件夹下。