Android JNI动态注册
来源:互联网 发布:sass编译是什么源码 编辑:程序博客网 时间:2024/05/18 15:05
在JNI的大多数教程中,使用最普遍的就是通过javah命令生成头文件的方式实现注册,这种注册称之为JNI静态注册。而JNI动态注册要弄懂就需要花费一些精力在源码上面了,今天在这里先将JNI动态注册的代码先记录下来:
例如在我要注册一个Java类中的native方法:
public native void setName(String name);
那么我们需要在我们的native_lib.c文件中声明一个static const JNINativeMethod gMethods []
static const JNIMethod gMethods [] ={{"setName",//要注册的java函数名 "(Ljava/lang/string)V",//要注册的java方法的参数以及返回值签名 (void*)nativie_setName//jni具体实现方法指针}
static int registerNatives(JNIEnv * env){jclass clazz = (*env) -> FindClass(env, "com/demo/Text.class");//通过文件绝对路径获取jclass(*env)->Register(env, clazz, gMethods, NELEM(gMethods));//调用JNIEnv的RegisterNative函数注册,NELEM(gMethods)是用来计算gMethods的大小}
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved){ LOGI("jni_OnLoad begin");//需要自定义日志#include <android/log.h> JNIEnv* env = NULL; jint result = -1; if ((*vm)->GetEnv(vm,(void**) &env, JNI_VERSION_1_4) != JNI_OK) { LOGI("ERROR: GetEnv failed\n"); return -1; } assert(env != NULL);//需要添加#include <assert.h> registerNatives(env); return JNI_VERSION_1_4;//在源码中已经写死,正确的JNI_VERSION必须是JNI_VERSION_1_2或JNI_VERSION_1_4或JNI_VERSION_1_6}
在Android Studio运行Android工程即可。
阅读全文
1 0
- Android 动态注册JNI
- Android: JNI动态注册
- Android JNI动态注册
- Android 动态注册JNI
- android 动态注册Jni函数
- Android JNI的动态注册
- Android 动态注册JNI函数
- Android 动态注册JNI函数
- Android jni 静态注册 和动态注册
- Android JNI使用方法(“动态注册”)
- Android JNI使用方法(“动态注册”)
- [Android]JNI动态注册Java函数教程
- android NDK开发 静态/动态注册 jni
- Android JNI 动态注册方法(JNI_OnLoad)
- Android Studio jni动态注册步骤
- Android开发值JNI函数动态注册
- Android JNI 使用的数据结构JNINativeMethod详解 动态注册JNI
- [JNI学习]---JNI动态注册
- MySQL code解析
- Python使用MySQL数据库(新)【很详细】【fetchall和fetchmany有啥区别呢?】
- VS2012 mvc4怎样改为mysql数据库?
- 个人短期学习计划
- 前后台使用JavaScript交互参数。
- Android JNI动态注册
- 540. Single Element in a Sorted Array
- CityPickerViewV2.0重磅来袭
- OpenTK教程-1绘制一个三角形
- 贪心算法和动态规划的思路及其Python实现
- [USACO5.5.1] Picture
- 安卓模拟器访问本地服务器问题
- bzoj 4977: 跳伞求生 线段树模拟费用流
- 【正一专栏】读《艾思奇哲学文选第六卷》