Android JNI之静态注册
2024-09-01 12:31:26
这篇说静态注册,所谓静态注册,就是native的方法是直接通过方法名的规定格式和Java端的声明处代码对应起来的,其对应规则如下:
JNIEXPORT <返回值> JNICALL Java_<包路径(.换成_)>_<类名>_<方法名>(JNIEnv *, jobject<,方法参数>)
假设在HelloJni中声明了方法staticLoad(), 如下所示:
package com.example.zhanghaiqiang.hellojni; public class HelloJni {
static{
System.loadLibrary("main");
} public native void staticLoad();
}
则其对应的native方法名为
JNIEXPORT void JNICALL Java_com_example_zhanghaiqiang_hellojni_AndroidJni_dynamicLog
(JNIEnv *, jobject)
当然,这个规则并不需要死记,jdk中的javah自动就帮我们做这个事了,cd到java目录下,执行 javah <包路径>.<类名> ,就会在当前目录下生成对应的natvie类 的头文件,比如上面的HelloJni,执行javah后得到的com_example_zhanghaiqiang_hellojni_HelloJni.h文件内容就会像这样:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_zhanghaiqiang_hellojni_HelloJni */ #ifndef _Included_com_example_zhanghaiqiang_hellojni_HelloJni
#define _Included_com_example_zhanghaiqiang_hellojni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif /*
* Class: com_example_zhanghaiqiang_hellojni_HelloJni
* Method: staticLog
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_example_zhanghaiqiang_hellojni_HelloJni_staticLog
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
随后,把这个文件拷到预设的jni目录下,copy一份并改名为.c或者.cpp源文件(当然你也可以直接把这个.h文件改成源文件),然后就可以开始写native的方法实现了。
最新文章
- hive中导入json格式的数据(hive分区表)
- SQL SERVER 2008 字段值合并
- javaweb学习总结(二十三)——jsp自定义标签开发入门
- IDL中histogram的应用
- Django实际站点项目开发经验谈
- ■SQL注入自学[第三学:注入点的读写、out_file]
- 第四节 数据格式化和ModelAttribute注解的介绍
- python之内置类型: 序列, 字典
- Heroku使用
- (四)左右ng-app自己主动bootstrap相框
- Java中httpClient中三种超时设置
- Windows Server 2016-批量设置用户下次登陆须更改密码
- 一个JavaWeb搭建的开源Blog系统,整合SSM框架
- Ubuntu下创建XFS文件系统的LVM
- luogu P1077 摆花
- PHP函数array_merge
- Docker中Spring boot+VueJS+MongoDB的前后端分离哲学摔跤
- Appium+python自动化获取toast消息(windows版)的方法
- Python之包管理工具:distutils、setuptools、distribute、setup.py、easy_install、easy_install、pip
- go递归函数如何传递数组切片slice
热门文章
- kubernetes系列(十二) - 存储之Secret
- 使用Splunk监控SAP Dump
- ant design pro 当中改变ant design 组件的样式和 数据管理
- JVM 专题二十:垃圾回收(四)垃圾回收器 (一)
- 数据可视化之DAX篇(七) Power BI中用DAX生成的表如何添加索引列?
- How to use the function of bind
- 网络编程-UDP、TCP
- 使用位运算、值交换等方式反转java字符串-共四种方法
- CSS文本溢出,显示省略号(...)
- CobaltStrike上线Linux主机(CrossC2)