Android NDK开发

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容