【发布时间】:2012-07-04 12:29:21
【问题描述】:
请多多包涵,我是一名 iPhone 开发人员,这整个 android 让我有点困惑。
我有一些从 cocos2d-x CCMenuItem 调用的 c++ 方法。因此,根据文档,我无法发送任何参数。
我需要用 android 浏览器打开一个 url,这需要我调用一个 JAVA 函数来启动一个新的 Intent。
我知道我需要创建一个虚拟机,但是下面的代码给了我错误:
jni/../../Classes/OptionsScene.cpp:184:错误:“JNI_CreateJavaVM”是 未在此范围内声明
我在看这个帖子:Calling a java method from c++ in Android
但他使用参数,而我不能这样做。而且我看不到这些在他的代码中的位置,只是我自己制作的。
我不知道“查找类”方法中的字符串应该是什么。 另外,我认为在我需要调用的每个方法中创建一个新的 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 设置以确保JDK_HOME/include目录(包含jni.h)在包含搜索路径中?JDK_HOME/include/android目录也一样(或在 Android JDK 中调用JDK_HOME/include中的任何特定操作目录)? -
您是否遇到编译错误?
标签: java android c++ jvm java-native-interface