1.使用数组作为参数
JNIEXPORT void JNICALL
Java_org_davidliebman_android_awesomeguy_Panel_setTileMapData(JNIEnv * env, jobject obj,
jintArray a_bitmap, jintArray b_bitmap, jintArray c_bitmap, jintArray d_bitmap)
{
//jsize a_len = (*env)->GetArrayLength(env, a_bitmap);
jint *a = (*env)->GetIntArrayElements(env, a_bitmap, 0);
//jsize b_len = (*env)->GetArrayLength(env, b_bitmap);
jint *b = (*env)->GetIntArrayElements(env, b_bitmap, 0);
//jsize c_len = (*env)->GetArrayLength(env, c_bitmap);
jint *c = (*env)->GetIntArrayElements(env, c_bitmap, 0);
//jsize d_len = (*env)->GetArrayLength(env, d_bitmap);
jint *d = (*env)->GetIntArrayElements(env, d_bitmap, 0);
setTileMapData(a, b, c, d );
}
代码中传进去的jintArray类型需要进行转换才能给C/C++代码使用,其中GetArrayLength是获取数组长度,GetArrayElements是获取数组指针
JAVA端的代码就如下:
public native void setTileMapData( int [] a, int [] b, int [] c, int [] d);
2.返回类型是数组
JNIEXPORT jintArray JNICALL
Java_org_davidliebman_android_awesomeguy_Panel_drawLevel(JNIEnv * env, jobject obj,
jint animate)
{
int j,k;
jint size = SCREEN_WIDTH * SCREEN_HEIGHT;
jint fill[size];
jintArray graphic;
drawLevel(animate);
graphic = (*env)->NewIntArray(env, size);
if(graphic == NULL) {
LOGE("ARRAY NOT CREATED");
return NULL;
}
for (j = 0; j < SCREEN_HEIGHT; j++) {
for (k = 0; k < SCREEN_WIDTH ; k ++ ) {
fill[ (j * SCREEN_WIDTH) + k ] = (jint) screen[j][k];
}
}
(*env)->SetIntArrayRegion(env, graphic,0, size, fill);
return graphic;
}
JAVA端代码就这样:
public native int[] drawLevel(int num);