看一下以下流程,在“---1----”打印后,程序就崩溃了,提示
“Invalid indirect reference 0x5c6fdbe8 in decodeIndirectRef
E/dalvikvm( 1148): VM aborting”
错误信息。不知是何原因 (这个流程在海思的平台是没问题,但是在amlogic上跑就崩溃了)JNIEXPORT void JNICALL Java_HelloWorld_jni_HelloWorldNative_init
(JNIEnv *env, jobject cls)
{ LOGD(" -----------init start !!! "); g_native_jobj = (*env)->NewGlobalRef(env, cls); (*env)->GetJavaVM(env,&g_cloud_jvm);
if(g_cloud_jvm == NULL){
LOGW("GetJavaVM error!\n");
return;
}
LOGD("----0----"); jclass clsNative = (*env)->FindClass(env,"HelloWorld/jni/HelloWorldNative");
if(clsNative == NULL){
LOGD("FindClass clsNative error!\n");
return;
}
g_native_cls = (*env)->NewGlobalRef(env, clsNative);
jmethodID graphics_methodID = (*env)->GetMethodID(env,g_native_cls, "showGraphics", "([B)V");
if(graphics_methodID == NULL){
LOGD("graphics_methodID error!\n");
return;
} LOGD("-----1----");
g_graphics_methodID = (*env)->NewGlobalRef(env, graphics_methodID);
LOGD("----2-----");
“Invalid indirect reference 0x5c6fdbe8 in decodeIndirectRef
E/dalvikvm( 1148): VM aborting”
错误信息。不知是何原因 (这个流程在海思的平台是没问题,但是在amlogic上跑就崩溃了)JNIEXPORT void JNICALL Java_HelloWorld_jni_HelloWorldNative_init
(JNIEnv *env, jobject cls)
{ LOGD(" -----------init start !!! "); g_native_jobj = (*env)->NewGlobalRef(env, cls); (*env)->GetJavaVM(env,&g_cloud_jvm);
if(g_cloud_jvm == NULL){
LOGW("GetJavaVM error!\n");
return;
}
LOGD("----0----"); jclass clsNative = (*env)->FindClass(env,"HelloWorld/jni/HelloWorldNative");
if(clsNative == NULL){
LOGD("FindClass clsNative error!\n");
return;
}
g_native_cls = (*env)->NewGlobalRef(env, clsNative);
jmethodID graphics_methodID = (*env)->GetMethodID(env,g_native_cls, "showGraphics", "([B)V");
if(graphics_methodID == NULL){
LOGD("graphics_methodID error!\n");
return;
} LOGD("-----1----");
g_graphics_methodID = (*env)->NewGlobalRef(env, graphics_methodID);
LOGD("----2-----");
-----------init start !!!
----0----
----1----
Invalid indirect reference 0x5c6fdbe8 in decodeIndirectRef
E/dalvikvm( 1148): VM abortingamlogic平台上只要是对jmethodID类型变量的NewGlobalRef()都会挂掉,对一个jclass类型 NewGlobalRef()是没有问题;但是在对一个jclass变量NewGlobalRef(),在引用前和引用后的地址是不一样的,而在海思的平台上引用前后的地址是一样的,在这两个平台上都是用NDK的标准工具链编译的
answered Jun 14 at 10:20EJP
48.3k62556
Silly me. You may be right. I'll try it when I get home and let you know if it works. – marceln Jun 14 at 11:17
Great! It works. Thanks! – marceln Jun 14 at 19:21
feedback