Android NDK入坑之旅(一):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的基本调用流程

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函数等等(可加快调用效率和速度);

posted on 2017-08-22 18:07  冷锋SJ记忆  阅读(266)  评论(0编辑  收藏  举报

导航