Android NDK не может найти JNI_GetCreatedJavaVMs после обновления с r6 до r7 - PullRequest
3 голосов
/ 16 ноября 2011

Я обновил свою версию NDK с r6 до r7. После этого я получаю эту ошибку при компиляции одного из моих собственных файлов:

ошибка: 'JNI_GetCreatedJavaVMs' не был объявлен в этой области

Я строю свой проект для API уровня 8 (Android 2.2). Я изучил

(MY_NDK_PATH_R6) /android-8/arch-arm/usr/include/jni.h

где GetCreatedJavaVMs объявлен, а файл jni.h фактически является символической ссылкой на

(MY_NDK_PATH_R6) /platforms/android-3/arch-arm/usr/include/jni.h

Тогда я проверил

(MY_NDK_PATH_R7) /platforms/android-8/arch-arm/usr/include/jni.h

и это фактически файл, а не символическая ссылка.

Я строю свой проект с использованием Eclipse, и единственное, что я указал в настройках, это путь к ndk-build.

РЕДАКТИРОВАТЬ: ОК, теперь понятно, почему не могут быть найдены GetCreatedJavaVM:

/*
 * VM initialization functions.
 *
 * Note these are the only symbols exported for JNI by the VM.
 */
#if 0  /* In practice, these are not exported by the NDK so don't declare them */
jint JNI_GetDefaultJavaVMInitArgs(void*);
jint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
jint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
#endif

Но как мне получить ВМ в этом случае?

1 Ответ

5 голосов
/ 16 ноября 2011

Я нашел решение. Вам просто нужно реализовать функцию JNI_OnLoad (JavaVM * vm, void * reserved). JVM это аргумент. Возможно, это лучший способ получить JVM.

...