Android Java代码与JNI交互 (一) 2022/3/20

🔥 Java代码调用JNI 方法 🔥

加载library对应的动态库 ndk1 在这里插入图片描述

声明 native 的方法 去调用动态库的内容
在这里插入图片描述

声明的 native 方法转换成 JNI 对应的头文件 , 规则如下 :

包名 + 类名 + 函数名 中间用下划线隔开
在这里插入图片描述

🔥 创建JNI 对应的函数 🔥

首先在Java类中创建函数
在这里插入图片描述

接下来在native-lib.cpp里面 创建函数的对应的 JNI 函数
在这里插入图片描述

JNI函数参数含义 :
JNIEnv *env 函数表 , 通过这个参数可以调用JNI中的许多函数
jobject thiz 对应的Java类MainActivity

extern “C” 的作用
是为了方便 C++代码可以按照C 的方式进行编译

🔥 动态库函数注册 🔥

动态库里面注册函数的方式有两种 :
静态注册 、动态注册

静态注册 : Native函数+JNI对应的头文件+两者之间函数名和参数形成互相对 .
静态注册 为了保证 Native函数名、参数名和JNI 对应的头文件函数名、参数名对应上 , 中间会有一个查找的过程 , 这个查找的过程是一个耗时的过程 .

动态注册 : 动态库加载的时候就会将函数动态的注册到系统中 , 这样就会省去每次调用时查找的过程 .

CMakeLists.txt 文件里面配置动态注册的库
在这里插入图片描述

创建 jni_dynamic_load.cpp 文件
在这里插入图片描述
并在 CMakeLists.txt 里面进行注册 jni_dynamic_load.cpp 文件路径
在这里插入图片描述

🔥 创建调用Android Log日志的文件 🔥

创建 base.h 文件

#include <android/log.h>
#include <jni.h>

#ifndef ANDROIDCPPSOLIB_LOGUTIL_H
#define ANDROIDCPPSOLIB_LOGUTIL_H

#define LOG_TAG "LOG_JNI"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)


#endif //ANDROIDCPPSOLIB_LOGUTIL_H

将创建的文件配置到 CMakeLists.txt 文件里面
在这里插入图片描述

jni_dynamic_load.cpp 文件里面导入日志文件依赖
在这里插入图片描述

通过JavaVM 获取 JNIEnv * env , 通过JNIEnv 可以调用 JNI 提供的函数

JNI_OK 表示获取 JNIEnv 成功 ,其他情况表示失败
在这里插入图片描述
在这里插入图片描述

🔥 Native函数在底层的实现 🔥

getMessage(JNIEnv *env,jobject jobj)
在这里插入图片描述

创建函数 plus(JNIEnv *env,jobject jobj,int x,int y)
在这里插入图片描述

将函数注册到系统中
通过源代码查看注册函数在这里插入图片描述
在这里插入图片描述

创建注册函数的方法
在这里插入图片描述

定义类名字符串结构
#define JAVA_CLASS “com/cmake/ndk1/JNIDynamicLoad”

创建结构体
在这里插入图片描述

注册函数到系统中
在这里插入图片描述

🔥 调用动态注册的函数 🔥

在这里插入图片描述
在这里插入图片描述

案例下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

️ 邪神

你自己看着办,你喜欢打赏我就赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值