- 什么是JNI: Java Native Interface , 即 java 本地接口
- 作用: 使用 java 与 本地其他类型语言交互
- 注意:
1,JNI 是 java 调用 Native 的一种特性
2,JNI 是属于java 的, 与 Android 无直接关系
- 为什么用 :
1,实际使用中,java 可能需要与本地代码交互
2,因为java 是跨平台的,所以java 与本地代码交互能力较弱
3,采用 JNI特性 增强 java与本地代码的交互
- 什么是NDK:Native Development Kit,是 android 的一个开发工具包
- 作用:快速开发 c、c++ 的动态库,并自动将so与应用一起打包,所以可以通过NDK在android中使用JNI与本地代码交互
- 注意:
1,NDK是属于android的, 与 java 无直接关系
2,NDK提供的库比较少,只能用于处理算法效率和 安全敏感的问题
- 特点:
1,效率高,代码安全性高
2,功能的扩展性好
3,方便代码的复用
JNI 的最终的目标,能够把实现与本地代码的交互 的功能。NDK是在android 中实现 JNI的手段。
百度搜索 NDK下载,下载后解压。
环境变量中 , 添加 ANDROID_NDK_HOME (注:名字自己取),然后在 path 后面 添加 “;%ANDROID_NDK_HOME” (注意前面有个 ‘分号’)。
打开cmd ,输入 ndk-build 出现如下字符说明环境配置成功
打开Eclipse :
第一步,
Window -> Prefernces -> Android -> NDK 选择你的NDK Location的存放路径;
如果选择的NDK路径正确,但依然报出 Not a vaild NDK directory 错误提示,那么需要找到NDK的主目录里,在里面创建一个名为 ndk-build 的 空文件,不需要后缀名;
第二步,
右键你用来开发NDK的项目,选择 Properties -> C/C++ Build -> Environment , 选择 Select ,然后 选择 之前配置的 NDK环境 ANDROID_NDK_HOME , 然后点击OK
第三步,
右键项目, 选择 Properties -> C/C++ General -> Paths and Symbols - Add , 选择 Add,然后点击 File system , 选择NDK路径 ,直到 include 。我的路径如下:
E:\android-ndk-r14b-windows-x86\android-ndk-r14b\platforms\android-9\arch-arm\usr\include
(如果路径最后没有 include 路径的话,需要重新下载一个NDK )
然后点击 OK, 点击 Apply ,OK 即可
第一步:
右键项目,选择 Android Tools ,然后选择 Android Native Support,填写 即将生成的文件的名字。
然后自动创建 jni 文件夹 和 .mk , .cpp 文件, 如果要写C代码,需要将 .cpp 文件后缀 改为 .c 。 然后在 .mk 文件中也 将 .cpp 改为 .c
第二步:
在 MainActivity 中声明一个Native 方法(也可单独创建一个类来声明本地方法)。
进入cmd中,用cd命令 进入到 项目的src 路径下, 输入:
javah -jni com.example.jnitext.MainActivity (项目的完整路径)
然后回车,即可自动生成一个 .h 头文件 ,项目右键或者按F5 ,就可以看见生成的 .h 头文件, 然后将头文件拖到 jni文件夹下 即可。
第三步:
打开 .c 文件 ,在添加 代码
# include //头文件名
# include
# include
然后将头文件中生成的 方法 复制并用添加到 .c 文件中,并实现方法:
# include //头文件名
# include
# include
//这是复制过来的方法,并实现方法
JNIEXPORT jint JNICALL Java_com_example_jnitext_MainActivity_helloNdk
(JNIEnv* evn, object obj){
return 5;
}
第四步:
在类中加载动态库并调用 本地方法即可:
//加载动态库
System.loadLibrary("Hello_jni");
//执行本地方法
button1.setText("返回的值:"+hello());
、
以上 就是简单的使用 NDK 调用 C代码 ,即 访问本地代码