LuT*_*ddy 3 c c++ java java-native-interface android
我有一个使用c ++库的android项目,我需要将一个对象数组发送到c ++代码.
这是我的Java本机绑定代码
class MyLib {
public static native void testArray(String[] array);
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的
...
MyLib.testArray(new Object[20]);
...
Run Code Online (Sandbox Code Playgroud)
这是我的c ++ jni代码:
JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr) {
__android_log_print(ANDROID_LOG_INFO,"test","test array!!!!!!!!");
int count = env->GetArrayLength(arr);
__android_log_print(ANDROID_LOG_INFO,"test","array length %d", count);
for (int i=0; i<count; i++) {
__android_log_print(ANDROID_LOG_INFO,"test","--- get item %d", i);
jstring jkey = (jstring) env->GetObjectArrayElement(arr, i);
__android_log_print(ANDROID_LOG_INFO,"test","item %d", i);
env->DeleteLocalRef(jkey);
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行它时,logcat显示这个并且执行以sigsev 11结束
JNI WARNING: jarray arg has wrong type (expected array, got Ljava/lang/Class;) in Lcom/android/mypackage/MyLib;.testArray:([Ljava/lang/Object;)V (GetArrayLength)
Run Code Online (Sandbox Code Playgroud)
我的数组引用似乎是类引用的任何想法?我对本机类型的数组没有问题,只有对象.
我相信你的功能签名
JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr)
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jclass clazz, jobjectArray arr)
Run Code Online (Sandbox Code Playgroud)
您缺少第二个参数 - 在静态方法中始终是Class对象.
归档时间: |
|
查看次数: |
1322 次 |
最近记录: |