.. CLOSED .. JNI错误'java_class == null'Android Studio

时间:2018-11-10 12:00:15

标签: android java-native-interface

已关闭。新问题将在新问题中解决。

有关最新问题,请参见编辑。我试图将Vector3值从我的cpp库传递给我的java活动。反之亦然,但似乎无法找到将cpp转换为java的方法。有人帮助我吗?我正在接收此错误:对'jni_createjavavm'的未定义引用

JavaVM *jvm;       /* denotes a Java VM */
JNIEnv *env;       /* pointer to native method interface */
JavaVMInitArgs vm_args; /* JDK/JRE 6 VM initialization arguments */
JavaVMOption* options = new JavaVMOption[1];
options[0].optionString = "-Djava.class.path=/usr/lib/java";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = false;
/* load and initialize a Java VM, return a JNI interface
 * pointer in env */
JNI_CreateJavaVM(&jvm, &env, &vm_args);
delete options;
/* invoke the Main.test method using the JNI */
jclass cls = env->FindClass("MenuActivity");
jmethodID mid = env->GetStaticMethodID(cls, "Test", "(I)V");
env->CallStaticVoidMethod(cls, mid);
/* We are done. */
jvm->DestroyJavaVM();

2018年11月11日@ 2031 UTC + 9 |编辑:新问题。崩溃java_class == NULL

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
//Some Other Code Not Regarding JVM

JNIEnv *env;
vm->AttachCurrentThread(&env, NULL);
jclass cls = env->FindClass("MenuActivity");
jmethodID mid = env->GetStaticMethodID(cls, "Test", "(I)V");
env->CallStaticVoidMethod(cls, mid);
return JNI_VERSION_1_6;
}

1 个答案:

答案 0 :(得分:1)

在Android上,没有library(shinyWidgets) library(shiny) ui <- fluidPage( titlePanel("pickerInput"), sidebarLayout( sidebarPanel( pickerInput("social","social media", choices = social, multiple = FALSE, options = list(deselectAllText = TRUE,actionsBox=TRUE)) ) , mainPanel() )) server <- function(input, output) {} shinyApp(ui, server) 。这些应用程序在JVM中运行,这对于访问系统API和服务至关重要。

从本机代码到应用程序Java部分的回调使用必须属于当前线程的JNI_CreateJavaVM()

如果它在Java线程上运行,则本机方法将JNIEnv作为第一个参数接收。您也可以从本机线程回调回Java。但是,然后,您必须将线程附加到JVM。 JNIEnv *接受AttachCurrentThread(),它可以作为全局代码存储在您的本机代码中。您可以在JavaVM *中获得它,或使用GetJavaVM()从JNIEnv派生它。

每个附加的本机线程,必须在终止时分离。最佳实践是使用JNI_OnLoad()定义一个析构函数,该析构函数将在线程退出之前被调用。

您可以在Android JNI tips article中阅读更多说明。