2011-11-16 54 views
3

我已將我的NDK版本從r6更新爲r7。之後,編譯我的本機文件時出現此錯誤:Android NDK在從r6更新到r7後無法找到JNI_GetCreatedJavaVMs

error: 'JNI_GetCreatedJavaVMs' was not declared in this scope

我正在構建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的路徑。

編輯:好的,這是現在很清楚爲什麼GetCreatedJavaVMs找不到:

/* 
* 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 

但是我應該如何讓虛擬機在這種情況下?

回答

4

我找到了解決方案。 您只需要實現JNI_OnLoad(JavaVM * vm,void * reserved)函數。 JVM是一個參數。 也許這是獲取JVM的更好方法。

+0

這是一個很好的觀察。我發現把它保存在一個靜態變量中並且在需要時重新使用它是值得的。 –

相關問題