您的位置:首页 > 移动开发 > Android开发

Android 使用jni解析数组

2016-06-07 22:55 369 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android jni 数组传递