Android 使用jni解析数组
  Iw6GGwMnM9Fb 2023年11月02日 33 0


1、创建页面

/**
* @描述 数组传递
* @项目名称 App_imooc
* @包名 com.android.imooc.jni
* @类名 ArrayActivity
* @author chenlin
* @date 2014年6月7日 下午10:26:02
* @version 1.0
*/

public class ArrayActivity extends Activity{

private int[] arr = {1, 2, 3, 4, 5};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jni_array);
}


public void sendArray(View view){
arrayEncode(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}

public native void arrayEncode(int[] arr);
}

2、转入到本工程的src目录下 使用命令
javah com.android.imooc.jni.ArrayActivity

3、生成一个新的文件打开
拷贝里面的方法到jni目录下的方法

JNIEXPORT void JNICALL Java_com_android_imooc_jni_ArrayActivity_arrayEncode
(JNIEnv *, jobject, jintArray);

到hello.c文件里

4、对上面的方法进行编写
首先必须把java里的整形数组转换成C语言里的整形数组,即拿到长度与首地址就可

JNIEXPORT void JNICALL Java_com_android_imooc_jni_ArrayActivity_arrayEncode
(JNIEnv * env , jobject obj, jintArray arr){
//获得长度
int len = ( *env)->GetArrayLength(env, arr);
//jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
int* p = (*env)->GetIntArrayElements(env, arr, 0);

int i;
for(i = 0; i < len ; i ++){
*(p + i) += 10;
}

}

5、运行得到结果:
06-06 18:37:44.679: I/System.out(5111): 11
06-06 18:37:44.679: I/System.out(5111): 12
06-06 18:37:44.679: I/System.out(5111): 13
06-06 18:37:44.679: I/System.out(5111): 14
06-06 18:37:44.683: I/System.out(5111): 15


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Iw6GGwMnM9Fb