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