看一下以下流程,在“---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-----");
   

解决方案 »

  1.   

    有日志的:
    -----------init start !!! 
    ----0----
    ----1----
    Invalid indirect reference 0x5c6fdbe8 in decodeIndirectRef
    E/dalvikvm( 1148): VM abortingamlogic平台上只要是对jmethodID类型变量的NewGlobalRef()都会挂掉,对一个jclass类型 NewGlobalRef()是没有问题;但是在对一个jclass变量NewGlobalRef(),在引用前和引用后的地址是不一样的,而在海思的平台上引用前后的地址是一样的,在这两个平台上都是用NDK的标准工具链编译的
      

  2.   

    A jmethodID is not an object. You don't need to convert it to a GlobalRef. Ditto jfieldID.share|improve this answer
    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