使用jni调用java方法

时间:2013-05-28 12:53:38

标签: android android-ndk java-native-interface

我在java中尝试从cpp调用以下方法,

public void callback(short[] sArray) {
    Log.e("java", ""+sArray.length);
}

在cpp中我尝试使用此代码来调用java方法:

jclass cls = env->GetObjectClass(obj);
jmethodID mid =
env->GetMethodID(cls, "callback", "([S)V");
    if (mid == NULL) {
        return 0; // method not found
    }
     //short *sbuffer;
     //sbuffer is filled with some data
    env->CallVoidMethod(obj, mid,sbuffer);

但我收到了这个错误:

  

05-28 18:13:29.850:W / dalvikvm(18423):间接参考无效   0x75402008 in decodeIndirectRef 05-28 18:13:29.850:E / dalvikvm(18423):   VM中止05-28 18:13:29.850:A / libc(18423):致命信号11   (SIGSEGV)位于0xdeadd00d(代码= 1),线程18423(ssconverterdemo)

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

该方法需要一个数组参数,不能将C数组传递给java。

How to return an array from JNI to Java?

这解释了如何将数组从jni传递给java

答案 1 :(得分:0)

CallVoidMethod之类的内容或其他格式为jvalue的参数。您需要将sbuffer翻译成jshortArray,然后创建一个表示它的jvalue,然后将jvalue条目传递给CallVoidMethod