我目前正在将姜饼代码移植到ICS。 C和Java之间的通信在Gingerbread中正确发生。但同样的事情在ICS中崩溃了。无法搞清楚。
ICS jni的主要变化是什么?
我目前的问题,
1.获取类实例并将其转换为全局引用并存储它。
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 :(得分:0)
我终于找到了解决方案。我曾经在android代码库(2.3.3)中编译我的代码但是如果你需要构建一个单独的共享库则使用NDK并构建一个单独的库。否则将代码放在frameworks文件夹中。这解决了这个问题。 :)