2012-03-21 134 views
1

我正在將薑餅代碼移植到ICS。 C和Java之間的通信在薑餅中恰當地發生。但同樣的事情在ICS中崩潰。無法弄清楚。JNI getmethodID只在ICS中返回NULL,但在Gingerbread中不返回

ICS jni的主要變化是什麼?

我現在的問題,

1.Get類實例,並將其轉化爲全球性的參考和存儲。

jclass myWrapperClass = (*env)->FindClass(env,"com/test/mypackage/Wrapper"); 

    if (voipWrapperClass == NULL) { 

    // error - handling and returns 

    } 

    WrapperClass = (jclass)(*env)->NewGlobalRef(env,myWrapperClass); 

2.從JNI調用流程進入堆棧下面並將回調函數返回給jni。從JNI到java下面函數調用

void response(void* ptr, int result){ 

    JNIEnv *envPtr= NULL; 

    JavaVM* vmPtr= p_pdb->vm; 

    if ((*vmPtr)->GetEnv(vmPtr,(void**) &envPtr, JNI_VERSION_1_4) == JNI_EDETACHED) { 

     (*vmPtr)->AttachCurrentThread(vmPtr,(void**)&envPtr,NULL); 

    } 

    if (ptr->WrapperClass == NULL) { 

     // error- handling and return 
    } 

    RespMethodId = (*envPtr)->GetMethodID(envPtr,ptr->WrapperClass, "resp","(Z)V"); 

    // this method is always 0 ... prev for gingerbread it returned a valid id.. 

    } 

請給我一個解決方法如何進一步進行。

+0

我可以看到錯誤的一件事是'WrapperClass =(jclass)(* env) - > NewGlobalRef(env,WrapperClass); '。不應該是NewGlobalRef(myWrapperClass)而是 – jogabonito 2012-03-21 08:40:27

+0

可能重複[ICS - JNI getmethodID返回NULL](http://stackoverflow.com/questions/9772645/ics-jni-getmethodid-returns-null) – EJP 2012-03-21 08:59:25

+0

@jogabonito雅對不起。我改變了太..但仍然返回0 ... – Indhu 2012-03-21 09:25:28

回答

0

我終於找到了解決方案。我曾經在android代碼庫(2.3.3)中編譯我的代碼,但是如果你需要使用NDK構建一個單獨的共享庫並構建一個單獨的庫,那麼我需要從ICS編譯我的代碼。否則將代碼放在框架文件夾中。這解決了這個問題。 :)

+0

解決問題如何? – EJP 2012-03-22 21:19:29