已关闭。新问题将在新问题中解决。
有关最新问题,请参见编辑。我试图将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;
}
答案 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中阅读更多说明。