JNI检测到的错误应用:使用无效jobject的
问题描述:
public class MyOpaqueBasedJSONDict implements IMyJSONDict {
private final long _myNativeCPPObj;
...
public IMyJSONDict getMyJSONObj(String keyName) {
long retVal = nativeGetJSOBObject(_myNativeCPPObj,keyName);
return (new MyOpaqueBasedJSONDict(retVal));
}
native implementation
NIEXPORT jlong JNICALL
Java_com_hexample_myndkapplication_MyOpaqueBasedJSONDict_nativeGetJSOBObject(JNIEnv *env,
jobject instance,
jlong myNativeCPPObj,
jstring keyName_) {
const char *keyName = env->GetStringUTFChars(keyName_, 0);
Json::Value* nativeCppJson_ptr = reinterpret_cast<Json::Value*> (myNativeCPPObj);
Json::Value& map = *nativeCppJson_ptr;
Json::Value& jsonVal = map[keyName];
env->ReleaseStringUTFChars(keyName_, keyName);
return (jlong) &jsonVal;
}
我无法理解为什么我收到JNI检测到的错误应用:使用无效jobject的0xb4019a80 三月8日至16日:25:56.785 20537-20537/com.hexample.myndkapplication A/art:art/runtime/java_vm_ext.cc:410] from long com.hexample.myndkapplication.MyOpaqueBasedJSONDict.nativeGetJSOBObjectJNI检测到的错误应用:使用无效jobject的
任何线索如何调试ndk中的无效内存错误。我对Android和ndk开发很新颖。
答
我在我的android应用程序中遇到了类似的问题。此外,我发现String参数是JNI提到的“无效jobject”。我尝试输入非空字符串作为参数,错误消失了。我不知道那是为什么。我希望它能帮助你解决问题。