Android JNI调用函数命名原则规范

来源:互联网 发布:淘宝卡绑定手机号码 编辑:程序博客网 时间:2024/05/19 18:12
package com.test.mytest;public final class SensorNative {static {System.loadLibrary("MYJNI");Init();} private native static void Init();public native static int GetY();  ...}
其中,注意native关键字,一个Native Method就是一个java调用非java代码的接口,标识符native可以与所有其它的java标识符(abstract除外)连用.
我们这里的MYJNI是C++文件,在MYJNI.C++文件中:
extern "C" void Java_com.test.mytest_SensorNative_Init(JNIEnv* env, jobject thiz) {...}extern "C" jint Java_com.test.mytest_SensorNative_GetY(JNIEnv* env, jobject thiz) {return g_y;}
这里可以看出,在JNI.c++文件中,函数体实现的时候,命名应该是:Java_包名_类名_方法名,参数和返回值应转换为JNI类型,如jint,jboolean.
重点:JNI函数与API
在目前的应用中,我们主要关心的是C/C++数据类型与JNI本地类型之间的转化过程,这个过程某些数据的转换需要使用JNIEnv对象的一系列方法来完成。
1.jstring转换为C风格字符串
char* test = (char*)(*env)->GetStringUTFChars(env,jstring,NULL); (*env)->ReleaseStringUTFChars(env, jstring, test); 
记得使用完毕后,应调用release释放资源。  
2.C风格字符串转换为
jstring  char charStr[50]; jstring jstr;jstr = env -> NewStringUTF(charStr); 

3.C语言中获取的一段char*的buffer传递给Java  在jni中new一个byte数组,然后使用(*env)->SetByteArrayRegion(env, bytearray, 0, len, buffer) 操作将buffer拷贝到数组中。这种方式主要是针对buffer中存在“\0”的情况,如果以C风格字符串的方式读入,就会损失“\0”之后的字符

(重中之重)返回值是数组的情况:以jintArray为例,有一系列的操作函数:
GetArrayLength 返回数组中的元素数 
NewIntArray  创建一个指定长度的原始数据类型数组
GetIntArrayElement 返回Int数组的元素
SetIntArrayElement 设置Int数组的元素 
GetIntArrayRegion  将原始数据类型数组中的内容拷贝到预先分配好的内存缓存中
SetIntArrayRegion 设置缓存中数组的值 
ReleaseIntArrayRegion  释放GetIntArrayRegion分配的内存
0 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美海军陆战队进驻台湾大陆怎么办? 束脚裤带子怎么办系 眼角弄伤了应该怎么办 浴盆下水盖坏了怎么办 冒险岛勋章多了怎么办 玉手镯取不下来怎么办?终极绝招! 陆金所收益低怎么办 陆金所登录密码忘记怎么办 陆金所理财逾期怎么办 死亡家属晚上来闹怎么办 开车撞到人家属闹要请护工怎么办 骑马与砍杀战团打下城市怎么办 我的脑子有问题怎么办 公司外派异地工作医保怎么办 老鼠死在墙里面怎么办 父亲再婚婚后对我不好怎么办 皮衣搽了护理油后不亮了怎么办 新买的衣服皱了怎么办 新买的裙子很皱怎么办 新买的风衣很皱怎么办 新买的裙子皱了怎么办 货拉拉准点率低怎么办 定机票名字打错了怎么办 做坏事被发现了怎么办 在阳台做被发现怎么办 有秘密被发现了怎么办 微店没有收到货怎么办 cf与主机连接不稳定怎么办 穿越火线与主机连接不稳定怎么办 word被锁定无法编辑怎么办 平衡车系统乱了怎么办 监控老是滴滴的响怎么办 磁盘已满 文件未保存怎么办 cocos只有代码没有项目怎么办 电脑系统管理员密码忘记了怎么办 魔兽小队不显示职业颜色怎么办 魔兽多余的橙装怎么办? f117-f6不读硬盘怎么办 中飞院飞行学生停飞了怎么办 军人对你敬礼时怎么办 小孩抱着就睡放下就醒怎么办