請耐心等待,我是一名iPhone開發人員,而這整個Android會讓我感到困惑。使用JNI從C++調用JAVA方法,無參數
我有一些從cocos2d-x CCMenuItem調用的C++方法。根據文檔,我無法發送任何參數。
我需要用android瀏覽器打開一個url,這將需要我調用JAVA函數來啓動一個新的intent。
我明白,我需要創建一個虛擬機,但是下面的代碼給我的錯誤:
jni/../../Classes/OptionsScene.cpp:184: error: 'JNI_CreateJavaVM' was not declared in this scope
我一直在尋找這個線程:Calling a java method from c++ in Android
但他使用的參數,我可以不這樣做。我看不出他的代碼中的哪些部分是我自己製作的。
我不知道'Find Class'方法中的字符串應該是什麼。 另外,我認爲在我需要調用的每個方法中創建一個新的VM實例是非常糟糕的。我將如何創建一個作爲一個單獨使用全面使用?
這是我的C++代碼,通過我的菜單項稱爲:
#include <jni.h>
...
JavaVM *vm; // Global
...
void OptionsScene::website(){
JNIEnv *env;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = 1;
jint result = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args); // This line still errors
jclass clazz = env->FindClass("com/prndl/project/WebExecute");
jmethodID method = env->GetMethodID(clazz, "website", "(Ljava/lang/String;)V");
env->CallVoidMethod(NULL,method);
vm->DestroyJavaVM();
這是我需要調用Java方法:
public class WebExecute extends Activity{
public void website(){
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
}
}
老實說,我這一點,任何掙扎幫助表示讚賞。謝謝。
你現在得到哪些錯誤?只是'JNI_CreateJavaVM'或其他人?你是否仔細檢查了你的編譯器/ IDE設置,以確保包含'jni.h'的'JDK_HOME/include'目錄在包含搜索路徑中? JDK_HOME/include/android'目錄(或者JDK_HOME/include'中的特定操作目錄在Android JDK中調用)是一樣的嗎? – QuantumMechanic
您是否收到編譯錯誤? –