首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android.mk应该在哪里?

Android.mk应该在哪里?
EN

Stack Overflow用户
提问于 2015-12-19 15:00:25
回答 2查看 14.1K关注 0票数 11

在Android的文档中,有以下声明:

Android.mk文件驻留在项目的jni/目录..。的子目录中

我可以这样解释,Android.mk文件应该放在[project_path]/jni/[module_name]/Android.mk中,每个模块都有自己的特定Android.mk文件,因为这是区别于应用程序范围的Application.mk文件的原因,但是当我执行ndk-build时,会得到以下错误消息:

Android.mk :在./jni下面没有Android.mk Android :如果这是有意的,请定义APP_BUILD_SCRIPT以指向 Android :到一个有效的NDK构建脚本。

由此推断,我应该在Application.mk文件旁边创建一个Application.mk文件,或者在Application.mk中定义APP_BUILD_SCRIPT以指向单个Android.mk文件。这与文档相矛盾,让我想知道为什么需要多个makefile,因为Android.mk无论如何都会包含所有模块的定义--这也可以放在Application.mk中。

阅读几个NDK示例项目后,我发现,实际上,Android.mk文件与Application.mk位于同一个目录中,并在其上执行ndk-build似乎是可行的。

少了什么?

EN

回答 2

Stack Overflow用户

发布于 2020-04-23 23:33:14

预期项目结构

代码语言:javascript
复制
<project>/
 |
 +-- jni/
 |    |
 |    +-- Android.mk
 |    +-- [Application.mk] (optionally)
 |    +-- main.c
 |
 +-- AndroidManifest.xml

根据这里的简短指南:https://developer.android.com/ndk/guides/concepts

  1. 在项目的jni/目录中创建一个Android.mk文件
  2. ..。使用ndk编译您的本机代码-构建$ cd // $/ndk-构建

但是,有一种方法可以使用带有参数的ndk-build来定义自定义的NDK项目结构。

平面结构

代码语言:javascript
复制
<mylib>/
 |
 +-- Android.mk
 +-- [Application.mk]
 +-- main.c
代码语言:javascript
复制
$ cd <mylib>
$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk

Android.mk对Application.mk

当Android.mk将包含所有模块的定义时,为什么需要多个makefiles -这也可以放在Application.mk中。

  1. Android.mk是强制性的,Application.mk不是强制性的。
  2. Android.mk包含模块定义,Application.mk描述体系结构、编译器选项和其他“全局”选项。
  3. Android.mkApplication.mk的正交设计。如果Android.mk包含3个模块和Application.mk 2 ABI(例如arm和x86),那么NDK将构建(3 * 2)工件。
  4. Application.mk中的变量出现在Android.mk中,因此您可以使用Android.mk中的APP_ABI链接体系结构相关库。
  5. 有些复杂的项目需要大量的生成文件,在Application.mk中保留公共选项是一种干净的方法。
  6. 不过,Application.mk只是一个设计上的决定,本来可以用不同的方式来做。
票数 1
EN

Stack Overflow用户

发布于 2016-12-22 09:37:35

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34372092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档