Android studio JNI技术实现与本地C++链接
也是自己前段时间在写一个Android人脸识别APP,其中为了提高速度,使用本地端的C++代码实现的人脸检测+识别
我们都知道Android支持Java语言交互,但是不支持C和C++,但是有时候为了方便和需求,需要用到Java应用层调用底层的C和C++代码,这时候就需要用到Java的JNI技术,叫做Java本地接口技术,实现Java与C或C++进行调用
下面我想说一下JNI技术的整体步骤和原理:
1、新建一个Android studio工程(注意把这个勾选上,不然后面还需要配置,勾选上就无须自己配置Cmake,Gradle啦)
2、Android指定位置新建一个类,如JavaJNI.java类(一般位置为、src/main/java/"你的包名"/),在该类里面声明一个方法,该方法有本地端实现,即如 public native void open();
3、写好之后本地native方法之后,配置Javah, 操作步骤:File-Tools-External Tools-"点击加号" name随便起一个,方便统一叫javah, 下面的Description可以和上面一致;
Program: $JDKPath$\bin\javah.exe
Auguments: -classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$
Working directory: $ModuleFileDir$\src\main\java
以上为配置Javah过程,到这就配置好了,注意上面几个配置你可以理解为固定配置,其实是一些路径定义,可以不用管的,
4、鼠标选中刚刚新建的含有本地实现方法的类,右击选择External Tools的Javah, 随机在弹出的窗口输入名字(这个名字就是马上生成的C或C++头文件的名字,文件会保存在/src/main/jni/下面),这样我们的C或C++头文件就生成好了,在JNI文件下,
5、将生成的.h头文件 放到、src/main/cpp文件中
6、在cpp文件下在新建一个对应的.cpp文件,开始编写需要调用的本地函数方法(具体做法把刚生成.h文件中的方法名复制过来,“;”改为方法体“{}”,然后在方法体中用C++实现你需要的功能)
7、在MainActivity.java测试类中调用JavaJNI.java类中本地声明的方法
8、编译即可成功调用实现你写的C++方法