NDK 提供了一系列的工具,帮助开发者快速开发 C (或 C++ )的动态库,并能自动将 so 和 java 应用一起打包成 apk;这些工具对开发者的帮助是巨大的
什么是 NDK ?
Android 原生开发包 NDK(Native Delopment kits )将用于 Android 平台上的 C++ 开发
Android NDK 是 Android 软件开发包(SDK)的相关工具集,用来扩展 Android SDK 的功能,从而是开发人员能够使用机器代码生成的编程语言(如 C、C++ 和汇编语言)实现一些对代码行要求较高的模块并将这些模块嵌入到 Android 应用程序中
众所周知,Android 程序运行在 Dalvik 虚拟机中,NDK 允许用户使用类似 C / C++ 之类的原生代码语言执行部分程序
NDK 的定义
- Android NDK 不是一个单独的工具: 它是一个包含API、交叉编译器、链接程序、调试器、构建工具、文档和实例应用程序的综合工具集
- 在 Android 的官方文档上是这么解释 NDK 的:“原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问物理设备组件;例如传感器和轻触输入”
- NDK 是一个 Android 官方提供的一个开发套件与 Android SDK 相对应,NDK 是原生开发套件,而 SDK 是 JAVA 开发套件。NDK 使得 Android 应用可以利用 C++ 语言高效的计算性能,进一步提升App的性能,降低延迟。
说道这里,大家肯定要问 NDK 有那些应用场景,我为什么要用 NDK 呢,用 JAV 不行吗?
下面列举一些NDK 的应用场景
重用一些现成的库,例如已经用 C/C++ 编写好的 openCV 库
前面提到的高性能计算,例如很多 Bitmap 的处理到放在 NDK 进行处理
一些敏感信息的保护,例如密钥等信息(密钥等信息还是要经过加盐才能放到 NDK 中,不然还是
会有别反编译的风险)
知道了应用场景,大家肯定已经摩拳擦掌准备试一试了,先别着急。欲善其事,先利其器;以下给出了开发 NDK 的三大利器;
NDK 的三大开发组件
-
NDK Android 原生开发套件
-
CMAKE 外部编译工具
-
LLDB 原生代码调试工具
NDK 开发优点
- 利用 NDK 开发的库,不容易被反编译,保密性,安全性都提高了
- 很多开源工程和大工程都是 C/C++ 代码写的
- C/C++ 的代码运行速度和效率都比 Java 快很多
Android NDK 开发步骤
(1)JNI 接口设计;
(2)使用 C/C++ 本地实现方法;
(3)生成动态链接库;
(4)将动态链接库复制到 Java 工程,运行 Java 程序
NDK 基础实践
CMake
推荐使用 CMake 而不是传统 NDK-build 的方式,既然都用新的,自然有它的道理,简单方便
有很多人在配置 CMakeLists.txt 时编译不通过,是自己的问题吗?当然,难不成还是它的问题吗?</