Android NDK JNI

JNI

1、什么是JNI

        JNI的全称为Java Native Interface,意思是Java本地接口。JNI是Java调用Native语言的一种特性,使得在Java代码中调用C/C++等语言的代码。由于JNI是JVM规范的一部分,因此可以将我们写的JNI的程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码JNI是一种在Java虚拟机机制下的执行代码的标准机制。

为什么使用NDK?

概括来说主要分为以下几种情况:
1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大(安全)。
2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。
 

2、JNI的命名规则及开发步骤

JNIExport jstring JNICALL Java_com_example_hellojni_MainActivity_stringFromJNI( JNIEnv* env,jobject thiz )

jstring 是返回值类型

Java_com_example_hellojni 是包名

MainActivity 是类名

stringFromJNI 是方法名

JNIExportJNICALL 是不固定保留关键字不能修改

JNI开发步骤:

  • 第1步:在Java中先声明一个native方法
  • 第2步:编译Java源文件javac得到.class文件
  • 第3步:通过javah -jni命令导出JNI的.h头文件
  • 第4步:使用Java需要交互的本地代码,实现在Java中声明的Native方法(如果Java需要与C++交互,那么就用C++实现Java的Native方法。)
  • 第5步:将本地代码编译成动态库(Windows系统下是.dll文件,如果是Linux系统下是.so文件,如果是Mac系统下是.jnilib)
  • 第6步:通过Java命令执行Java程序,最终实现Java调用本地代码。

3、Android Studio环境下Opencv导入Android方法

https://zhuanlan.zhihu.com/p/30032584

参考文章:

【1】https://www.jianshu.com/p/87ce6f565d37

【2】https://blog.csdn.net/WHB20081815/article/details/76098360

发布了64 篇原创文章 · 获赞 19 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/wwwsssZheRen/article/details/100715464