Android JNI入坑之旅(JNI的简单介绍)

书史足自悦,安用勤与劬。这篇文章主要讲述Android JNI入坑之旅:JNI的简单介绍相关的知识,希望能为你提供帮助。
1.JNI简介
JNI全称为Java  Native Interface;
从java1.1开始,JNI就成为java平台的一部分,它允许Java代码和其他语言写的代码(如C& C++)进行交互;
并非从Android发布才引入JNI的概念的。
2.什么是NDK?
NDK全称为native development kit本地语言(C& C++)开发包;
NDK提供了一些交叉编译工具链和android自带的库;
这些Android的库可以让开发者在编写本地语言的程序时调用;
而NDK提供的交叉编译工具链就对已经编写好的C& C++代码进行编译,生成库。
3.JNI的基本调用流程
【Android JNI入坑之旅(JNI的简单介绍)】1).Android应用层以Java为基础,.java文件在被编译成.dex文件后必须要通过Dalvik虚拟机( Virtual Machine)来执行;
2).执行过程中如果需要用到本地方法(即C/C++函数库),Dalvik则去加载C/C++本地函数库(System.loadLibrary("libName"); );
注意:由于C/C++本地函数库并不运行在Dalvik虚拟机中,所以效率和速度都相对较快;
3).Dalvik虚拟机加载C/C++函数库成功之后会自动地寻找库里面的JNI_OnLoad函数(关于JNI_OnLoad函数后面会有详细说明);
4).虚拟机释放C/C++函数库时,与JNI_OnLoad函数相对应的JNI_OnUnLoad函数会被调用,用以处理善后清除工作。
4.关于JNI_OnLoad函数的一些说明
1).告知Dalvik虚拟机该C/C++函数库使用哪一个JNI版本;
2).库中没有该函数时默认使用JNI1.1版本;
3).新版JNI在功能上有很多的扩展,想要使用这些新功能必须在JNI_OnLoad()函数中声明JNI的版本:

1 result = JNI_VERSION_1_4;

4).库中没有JNI_OnLoad()函数时,Android调试信息会给出"No JNI_OnLoad found"的提示;
5).C/C++函数库加载完成后首先调用JNI_OnLoad()方法,可以在该方法中进行一些初始化工作,如注册JNI函数等等(可加快调用效率和速度);

    推荐阅读