2012-03-21 133 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