JNI和NDK

作者: 小柏不是大白 | 来源:发表于2017-05-12 14:49 被阅读21次

    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方法

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

    生成class文件

    需要先退到java中才可以:

    生成JNI头文件

    生成一个animation_com_myandfix_MyJni.h文件:

    头文件

    函数名的格式遵循如下规则: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来实现:

    例子:

    c++ c

    编译so库并在java中使用

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

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

    相关文章

      网友评论

          本文标题:JNI和NDK

          本文链接:https://www.haomeiwen.com/subject/chiotxtx.html