В настоящее время я переношу код Gingerbread на 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..
}
Пожалуйста, дайте мне решение, как продолжить дальше.?
Я нашел решение наконец. Я использовал для компиляции моего кода в базе данных Android (2.3.3), но из ICS, если вам нужно создать отдельную разделяемую библиотеку, используйте NDK и создайте отдельную библиотеку. Остальное поместите код в фреймворк. Это решает проблему. :)