1.什么是NDK?
NDK的全称是Native Development Kit, 是一套工具原生开发套件,使你能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,你可使用这些平台库管理原生 Activity 和访问物理设备组件,例如传感器和轻触输入。
2.为什么使用NDK?
1.当我们需要完成以下一个或多个事项,那么 NDK 就能派上用场:
2.提高应用的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。
3.代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
4.可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。
5.便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。
3.NDK项目创建
使用Android Sudio创建DNK项目的方式有两种:一种是直接创建C++ project;另一种是在Java 项目中手动配置,虽然更麻烦些,但是更灵活值得学习。
现在官方推荐使用CMake工具来开发jni,cmake方式开发jni项目相对更简单易上手。可以将NDK类别为SDK,将Cmake类别为build,将它看作一个编译类工具。
截屏2022-12-10 16.59.41.png
截屏2022-12-10 17.15.01.png
1.native方法命名
extern "C" JNIEXPORT jstring JNICALL
Java_com_demo_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
函数命名规则: Java_类全路径_方法名,涉及的参数的含义如下:
JNIEnv*是定义任意native函数的第一个参数,表示指向JNI环境的指针,可以通过它来访问JNI提供的接口方法。
jobject表示Java对象中的this,如果是静态方法则表示jclass。
JNIEXPORT和JNICALL: 它们是JNI中所定义的宏,可以在jni.h这个头文件中查找到。
下面,我们整理下Java和JNI的类型对照表,如下所示。
截屏2022-12-10 17.23.57.png
网友评论