JNI getmethodID возвращает NULL только в ICS, но не в Gingerbread - PullRequest
1 голос
/ 21 марта 2012

Я сейчас портирую код 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..

  }

Пожалуйста, дайте мне решение, как действовать дальше .?

1 Ответ

0 голосов
/ 22 марта 2012

Я наконец нашел решение.Я использовал для компиляции своего кода в базе Android-кода (2.3.3), но из ICS, если вам нужно создать отдельную общую библиотеку, используйте NDK и создайте отдельную библиотеку.В противном случае поместите код в папку frameworks.Это решает проблему.:)

...