Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android.mk应该在哪里?_Android_Makefile_Android Ndk - Fatal编程技术网

Android.mk应该在哪里?

Android.mk应该在哪里?,android,makefile,android-ndk,Android,Makefile,Android Ndk,在Android NDK的文档中,有以下语句: Android.mk文件位于项目的jni/目录[…]的子目录中 我可以从中理解为,Android.mk文件应该放在[project\u path]/jni/[module\u name]/Android.mk中,每个模块都有自己特定的Android.mk文件,因为这是它与应用程序范围的application.mk文件的区别,但是当我执行ndk build时,我得到以下错误消息: Android NDK:在/jni下没有Android.mk And

在Android NDK的文档中,有以下语句:

Android.mk文件位于项目的jni/目录[…]的子目录中

我可以从中理解为,
Android.mk
文件应该放在
[project\u path]/jni/[module\u name]/Android.mk
中,每个模块都有自己特定的
Android.mk
文件,因为这是它与应用程序范围的
application.mk
文件的区别,但是当我执行
ndk build
时,我得到以下错误消息:

Android NDK:在/jni下没有Android.mk
Android NDK:如果这是有意的,请定义应用程序构建脚本指向
Android-NDK:创建一个有效的NDK构建脚本

我从中收集到我应该在我的
应用程序.mk
文件旁边创建一个
Android.mk
文件,或者在
Application.mk
中定义
APP\u BUILD\u脚本来指向一个
Android.mk
文件。这与文档内容相矛盾,让我想知道,当
Android.mk
包含所有模块的定义时,为什么需要多个makefile,这些模块也可以放在
Application.mk

通过阅读几个NDK示例项目,我发现,
Android.mk
文件确实与
Application.mk
位于同一个目录中,并且对它们执行
NDK build


缺少什么?

我至少可以回答你的一些问题。关于文档有点混乱,您是对的。如果您使用的是单个本机模块,那么Application.mk确实可能看起来是多余的-但是,有一些东西只能由Application.mk设置(您可以在这里查看:)。Application.mk用于所有模块的设置,而Android.mk用于特定的模块设置。实际上,通常简单的项目只有一个Android.mk,它与Application.mk位于同一个文件夹中

您可以定义放置它们的位置,这还取决于您如何构建代码-例如,如果您正在使用“ndk build”和命令行命令来构建ndk任务,则将文件夹路径作为参数传递。根据我的经验,它们通常位于jni文件夹下。

预期的项目结构
$cd
$ndk构建ndk\U项目\U路径=。APP_BUILD_SCRIPT=Android.mk
Android.mk与Application.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
    中,因此您可以使用
    Android.mk
    中的
    APP_ABI
    链接与体系结构相关的库
  • 有很多复杂的项目都有很多makefile,并且在
    应用程序中保留公共选项。mk
    是一种干净的方法
  • 但是仍然
    Application.mk
    只是一个设计决策,它本可以以不同的方式来做
  • <project>/
     |
     +-- jni/
     |    |
     |    +-- Android.mk
     |    +-- [Application.mk] (optionally)
     |    +-- main.c
     |
     +-- AndroidManifest.xml
    
    $ cd <path>/<to>/<project>
    $ <ndk>/ndk-build
    
    <mylib>/
     |
     +-- Android.mk
     +-- [Application.mk]
     +-- main.c
    
    $ cd <mylib>
    $ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk