工作中遇到了ndk编程,其实核心就是java和本地的数据交互。现把所有数据类型的传递写成demo。
1,ini数组传递 我们实现传递8个数值过去,然后本地将八个数值放到数组,返回.
java代码:
public native int[] getMessage(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8); //传递8个int类型的数值到本地方法
本地代码:
JNIEXPORT jintArray Java_com_example_testndk_MainActivity_getMessage( JNIEnv* env, jobject jobj, jint a1, jint a2, jint a3,jint a4 ,jint a5,jint a6,jint a7,jint a8,jstring a9) { jintArray jArray = (*env)->NewIntArray(env, 8); //分配内存 if (jArray == NULL) { //判断是否异常 分配内存失败 printf("初始化变量失败!"); return NULL; } int back[] = { a1, a2, a3, a4, a5, a6, a7, a8}; //赋值 (*env)->SetIntArrayRegion(env, jArray, 0, 8, back); return jArray; };
demo下载:http://pan.baidu.com/s/1dEWxKYl
2.java与本地方法的中文互传
java代码:
public native String getMessage(String s); //参数传递的是中文
本地方法:
JNIEXPORT jstring Java_com_example_testndk_MainActivity_getMessage(JNIEnv* env, jobject jobj, jstring a9) { const char const *p_char = (*env)->GetStringUTFChars(env, a9, 0); //jstring转换为char指针类型 return (*env)->NewStringUTF(env, p_char); //char指针类型转换为java的String返回 };