Android JNI:让你一眼知之的JNI DEMO
先按照步骤把 DEMO 跑成功。

1. 使用 AS 创建一个 Android 项目
注意☑️:

剩下的就
next
finish
就可以了。
2. 创建 Java 类

3. 使用 javah 生成 .h 的头文件
-
在
Project
目录下,右键java
目录,选择Open in terminal
-
在
terminal
中输入:javah 类的全名
image
-
此时再去
HelloJni
类查看,发现helloJni()
方法已经不报错了,说明可以找到该方法了 -
.h
文件,可以看成是java
与c/c++
(或其他语言) 沟通的桥梁 -
这里可以理解为
java
与c/c++
达成了一个约定,约定就写在.h
文件中了 -
javah
生成的方法名命名规则:Java_完整类名_方法名 -
image
-
将生成的文件移动到
cpp
目录下
4. 在 main/cpp/
下创建文件 First.c

5. 修改参数列表、书写业务逻辑
编写 First.c
文件
#include <zyf_com_jnifirstproject_HelloJni.h>
#include <jni.h>
//通过Java_全类名_方法名,表示这个方法是实现 HelloJni 类中的 helloJni 方法
// 参数一:JNIEnv *env 每个本地方法的第一个参数都是指向 JNIEnv 结构的。
// 这个结构是用来调用 JNI 函数的
// 参数二:
// 如果该本地方法是 静态方法 : jclass 类型,表示一个类对象的引用(当前类对象)
// 如果该本地方法是 成员方法 : jobject 类型,表示被调用方法所属对象的引用(当前对象)
// 如果我们定义的 native 方法是一个有参方法,
// 那么此处的参数列表的第三,四..位参数就表示 native 方法的参数
JNIEXPORT jstring JNICALL Java_zyf_com_jnifirstproject_HelloJni_helloJni
(JNIEnv *env, jobject instance){
return (*env) ->NewStringUTF(env,"this is from native");
}
6. 在 CMakeLists.txt 中添加配置
在编写第五步时,可以明显看到如下提示:

翻译:
First.c
文件还不是项目的一部分。请把它添加到适当的构建文件中( build.gradle
, CMakeLists.txt
orAndroid.mk
)这里选择在
CMakeLists.txt
中配置:
7.生成 so 库
AS-> Build
-> Rebuild
后,在 build/cmake/debug/obj/
文件夹下可以查看到对应四种架构的 .so
文件

8. 在 Java 类中加载 .so 文件
package zyf.com.jnifirstproject;
/**
* create by zyf on 2018/12/10 下午4:36
*/
public class HelloJni {
static {
System.loadLibrary("First.so");
}
public native String helloJni();
}
9. 可以使用了
刚学习一个知识,只要能跑通一个 DEMO,剩下的就可以自己添砖加瓦了。
网友评论