作者:公关活动策划公司_333 | 来源:互联网 | 2023-02-04 03:14
工作中遇到了ndk编程,其实核心就是java和本地的数据交互。现把所有数据类型的传递写成demo。1,ini数组传递我们实现传递8个数值过去,然后本地将八个数值放到数组,返回.java代码
工作中遇到了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返回
};
demo下载:http://pan.baidu.com/s/1kVAhjmv