jni及NDK必须清楚的概念

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/harrain/article/details/83269035

目录

jni

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

ndk

Android NDK 是一组允许您将 C 或 C++(“原生代码”)嵌入到 Android 应用中的工具。
NDK(Native Development Kit) : 原生开发工具包,即帮助开发原生代码的一系列工具,包括但不限于编译工具、一些公共库等。

abi

ABI(Application binary interface)应用程序二进制接口。不同的CPU 与指令集的每种组合都有定义的 ABI (应用程序二进制接口),一段程序只有遵循这个接口规范才能在该 CPU 上运行。
ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。 NDK 根据这些定义构建 .so 文件。 不同的 ABI 对应不同的架构:NDK 包含对 ARMEABI(默认)、MIPS 和 x86 的 ABI 支持。


ndk-build

ndk-build 文件是 Android NDK r4 中引入的一个 shell 脚本。其用途是调用正确的 NDK 构建脚本。
ndk-build 脚本用于在 NDK 中心启动构建脚本。这些脚本:

  • 自动探测您的开发系统和应用项目文件以确定要构建的内容。
  • 生成二进制文件。
  • 将二进制文件复制到应用的项目路径。

在使用 ndk-build 脚本构建时以及使用 ndk-gdb 脚本调试时需要扫描Android.mkApplication.mk

Android.mk

必须在 jni 文件夹内创建 Android.mk 配置文件。 ndk-build 脚本将查看此文件,其中定义了模块及其名称、要编译的源文件、版本标志以及要链接的库。

Application.mk

Application.mk:此文件枚举并描述您的应用需要的模块。 这些信息包括:

  • 用于针对特定平台进行编译的 ABI。
  • 工具链。
  • 要包含的标准库(静态和动态 STLport 或默认系统)。

CMake与CMakeLists

c/c++ 的编译文件在不同平台是不一样的。Unix 下会使用 makefile 文件编译,Windows 下会使用 project 文件编译。而 CMake 则是一个跨平台的编译工具,它并不会直接编译出对象,而是根据自定义的语言规则(CMakeLists.txt)生成 对应 makefile 或 project 文件,然后再调用底层的编译。

在Android Studio 2.2 之后,工具中增加了 CMake 的支持,在新建项目时,选中 Include C++ Support 复选框,默认使用CMake构建原生代码。你可以这么认为,在 Android Studio 2.2 之后你有2种选择来编译你写的 c/c++ 代码。一个是 ndk-build + Android.mk + Application.mk 组合,另一个是 CMake + CMakeLists.txt 组合。


感谢

https://developer.android.google.cn/ndk/guides/concepts
https://www.jianshu.com/p/6332418b12b1

猜你喜欢

转载自blog.csdn.net/harrain/article/details/83269035