java jni demo_Android JNI:让你一眼知之的JNI DEMO

Android JNI:让你一眼知之的JNI DEMO

先按照步骤把 DEMO 跑成功。

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

1. 使用 AS 创建一个 Android 项目

注意☑️:

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

剩下的就 next finish 就可以了。

2. 创建 Java 类

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

3. 使用 javah 生成 .h 的头文件

在 Project 目录下,右键 java 目录,选择 Open in terminal

在 terminal 中输入:javah 类的全名

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

此时再去 HelloJni 类查看,发现 helloJni() 方法已经不报错了,说明可以找到该方法了

.h 文件,可以看成是 java 与 c/c++ (或其他语言) 沟通的桥梁

这里可以理解为 java 与 c/c++ 达成了一个约定,约定就写在 .h 文件中了

javah 生成的方法名命名规则:Java_完整类名_方法名

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

将生成的文件移动到 cpp 目录下

4. 在 main/cpp/ 下创建文件 First.c

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

5. 修改参数列表、书写业务逻辑

编写 First.c 文件

#include

#include

//通过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 中添加配置

在编写第五步时,可以明显看到如下提示:

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

翻译:First.c 文件还不是项目的一部分。请把它添加到适当的构建文件中( build.gradle, CMakeLists.txt orAndroid.mk )

这里选择在 CMakeLists.txt 中配置:

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

7.生成 so 库

AS-> Build -> Rebuild 后,在 build/cmake/debug/obj/ 文件夹下可以查看到对应四种架构的 .so 文件

e326f7d30d7c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

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,剩下的就可以自己添砖加瓦了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值