JNI和NDK

Java JNI的本意是Java Native Interface(Java本地接口),是为了方便java调用C、C++等本地代码所封装的一层接口。

NDK是Android所提供的一个工具鸡盒,通过NDK可以在Android中更加方便地通过JNI来访问本地代码,NDK还提供了交叉编译器,开发人员只需要简单地修改mk文件就可以生成特定CPU平台的动态库。

使用NDK的好处:

提高代码的安全性

可以很方便地使用目前已有的C/C++开源库

便于平台间的移植。

提高程序在某些特定情况下的执行效率,但是并 不能明显提高Android程序的性能

JNI和NDK假发所用到的动态库的格式是以.so为后缀的文件

JNI的开发流程

1、在java中声明native方法

JNI和NDK_第1张图片

声明了两个native方法:get和set,这两个就是需要在JNI中实现的方法


JNI和NDK_第2张图片
生成class文件

需要先退到java中才可以:

JNI和NDK_第3张图片
生成JNI头文件

生成一个animation_com_myandfix_MyJni.h文件:

JNI和NDK_第4张图片
头文件

函数名的格式遵循如下规则:Java_包名_类名_方法名

JNIEnv *:表示一个指向JNI环境的指针,可以通过它来访问JNI提供的接口方法

jobject:表示java对象中的this

JNIEXPORT和JNICALL:他们是JNI中所定义的宏,可以在jni.h这个头文件中查找到

jstring:表示java对象中的String

它指定extern“C”内部的函数采用C语言的命名风格来编译。否则当JNI采用C/C++来实现时,由于C和C++编译过程中对函数的命名风格不同,这将导致JNI在链接时无法根据函数名查找到具体的函数,那么JNI调用就无法完成。

实现JNI方法

JNI方法是指Java中声明的native方法,这里可以选择使用C++或者C来实现:

例子:

JNI和NDK_第5张图片
c++
JNI和NDK_第6张图片
c

编译so库并在java中使用


如果使用NDK,Android studio的话,则先导入NDK,后设置有关数据,链接如下:

blog.csdn.net/eastmoon502136/article/details/50759209

你可能感兴趣的:(JNI和NDK)