在使用ART调用静态方法的CallObjectMethod中,Android NDK崩溃

时间:2015-03-26 11:43:51

标签: java android c android-ndk

在Android应用程序中,我有一些调用java静态方法的JNI代码。

jbyteArray response = (jbyteArray)pEnv->CallObjectMethod(handlerClass, mid, jstrServiceUrl, jstrRequest);

ART 环境中的Android 5中执行此操作,我收到检查jni 错误:

  

应用程序中的JNI DETECTED ERROR:在调用CallObjectMethodV时调用静态方法byte [] x.y.z(java.lang.String,java.lang.String)和CallObjectMethodV ...

我没有在Android 4中使用 Dalvik 环境获得此错误。

java方法就是这个:

public static byte[] z(String serviceURL, String request) 

并且之前已绑定如下:

jclass handlerClass = pEnv->FindClass("x/y/z");
if (handlerClass == NULL) {
    return -1;
}

mid = pEnv->GetStaticMethodID(handlerClass, "z", "(Ljava/lang/String;Ljava/lang/String;)[B");
if (mid == NULL) {
    return -2;
}

// Construct Strings
jstring jstrServiceUrl = pEnv->NewStringUTF(szServiceURL);
jstring jstrRequest = pEnv->NewStringUTF(szRequest);

1 个答案:

答案 0 :(得分:2)

我不知道您的代码为何与Dalvik合作,但必须使用Call<type>Method获取GetMethodID的方法ID。如果您使用GetStaticMethodID获得了方法ID,则应使用CallStatic<type>Method

请参阅the JNI functions documentationCall<type>MethodCallStatic<type>Method的说明。