什么是NDK库?
JNI介绍
定义:Java Native Interface,即 Java本地接口
作用: 使得Java 与 本地其他类型语言(如C、C++)交互(即在 Java代码 里调用 C、C++等语言的代码 或 C、C++代码调用 Java 代码)
特别注意:
1.JNI是 Java 调用 Native 语言的一种特性
2.JNI 是属于 Java 的,与 Android 无直接关系
NDK介绍
定义:Native Development Kit,是 Android的一个工具开发包 。NDK是属于 Android 的,与Java并无直接关系
作用:快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK (即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互)
应用场景:在Android的场景下 使用JNI (即 Android开发的功能需要本地代码(C/C++)实现)
NDK特点
1.性能方面:
(1)运行效率高:在开发要求高性能的需求中,采用C/C++更加有效率(如使用本地代码(C/C++)执行算法,能大大提高算大的执行效率)
(2)代码安全性高:java是半解释型语言,容易被反编译后得到源代码,而本地有些代码类型(如C/C++)则不会,能提高系统的安全性
2.功能方面:
功能扩展性好:可方便地使用其他开发语言的开源库,除了java的开源库,还可以使用开发语言(C/C++)的开源库
3.使用方面:
易于代码复用和移植:用本地代码(如C/C++)开发的代码不仅可在Android中使用,还可嵌入其他类型平台上使用
额外注意
- 提供了吧 .so和 .apk打包的工具(而JNI开发没有,只是把.so文件放到文件系统的特定位置)
- NDK提供的库有限,仅用于处理算法效率和敏感的问题
- 提供了交叉编译器,用于生成特定的CPU平台动态库
NDK与JNI关系
|
|
JNI |
NDK |
|
定义 |
Java中的接口 |
Android中的工具开发包 |
|
作用 |
用于java与本地语言(如C/ C++)交互 |
快速开发C/C++的动态库,并自动将so和应用一起打包成APK |
|
之间的关系:JNI是实现的目的,NDK是在Android中实现JNI的手段(即在Android的开发环境中(Android Studio),通过NDK从而实现JNI的功能) |
||