NDK ndk-build 和 CMake构建方式介绍

本文介绍了Android NDK的基础概念,包括JNI和NDK,并详细对比了两种构建原生代码的方式:ndk-build(Android.mk和Application.mk)与CMake(CMakeLists.txt)。内容涵盖构建原理、CMake的灵活性以及在Android Studio中使用CMake构建NDK项目的问题和调试技巧。同时,文章讨论了gradle-experimental与gradle版本的对应关系以及在使用CMake和ndkbuild过程中可能遇到的问题。
摘要由CSDN通过智能技术生成

一、NDK 基础概念

在介绍 NDK 之前还是首推 Android 官方 NDK 文档

首先用简单的话分别解释下 JNI、NDK, 以及分别和 Android 开发、c/c++ 开发的配合。在解释过程中会对 Android.mk、Application.mk、ndk-build、CMake、CMakeList 、gradle-experimental进行说明,并从发展的历史中,讲一讲它们诞生的原因。

JNI(Java Native Interface):Java本地接口。是为了方便Java调用c、c++等本地代码所封装的一层接口(也是一个标准)。大家都知道,Java的优点是跨平台,但是作为优点的同时,其在本地交互的时候就编程了缺点。Java的跨平台特性导致其本地交互的能力不够强大,一些和操作系统相关的特性Java无法完成,于是Java提供了jni专门用于和本地代码交互,这样就增强了Java语言的本地交互能力。

NDK(Native Development Kit) : 原生开发工具包,即帮助开发原生代码的一系列工具,包括但不限于编译工具、一些公共库、开发IDE等。

构建

在Android Studio 2.2 之后,工具中增加了 CMake 的支持,所以在 Android Studio 2.2 之后有2种选择来编译 c/c++ 代码。

  • 一种是 ndk-build + Android.mk + Application.mk 的方式
  • 另一种是 CMake + CMakeLists.txt 的方式

这两种方式与Android代码和c/c++代码无关,只是不同的构建脚本和构建命令。

第一种:ndk-build

Android.mk 文件位于项目 jni/ 目录的子目录中,用于向构建系统描述源文件和共享库。 它实际上是构建系统解析一次或多次的微小 GNU makefile 片段。 Android.mk 文件用于定义 Application.mk、构建系统和环境变量所未定义的项目范围设置。 它还可替换特定模块的项目范围设置。

Application.mk:它是一个构建文件,此文件用于描述应用需要的原生模块。 模块可以是静态库、共享库或可执行文件。实际上是定义要编译的多个变量的微小 GNU Makefile 片段。

NDK 工具包中提供了完整的一套将 c/c++ 代码编译成静态/动态库的工具,而 Android.mk 和 Application.mk 你可以认为是描述编译参数和一些配置的文件。比如指定使用c++11还是c++14编译,会引用哪些共享库,并描述关系等,还会指定编译的 abi。只有有了这些 NDK 中的编译工具才能准确的编译 c/c++ 代码。

ndk-build文件 是 Android NDK r4 中引入的一个 shell 脚本。为了调用正确的 NDK 构建脚本。其实最终还是会去调用 NDK 自己的编译工具。

第二种:CMake

代码变成可执行文件,需要经过编译、链接、生成可执行文件;
按照顺序对文件进行编译(编译的安排)叫做构建(build)。例如makefile就是一种构建规则的文件。

NDK 下的CMake官方文档

Q: 为什么不直接用MakeFile来写构建规则呢?

A: CMake supports generating build files for many build systems (Make, Ninja, Visual Studio, XCode) and platforms (Linux, Windows, macOS, etc). This allows the Android build to support many host platforms and NDK toolchains. Makefiles would require different Makefiles for each platform and toolchain.

CMake是一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process&#

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛瑄

文章不错,请博主吃包辣条

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值