我正在尝试使用以下代码在cplusplus程序中创建Java虚拟机: JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption options[1]; options[0].optionString = “-Djava.class.path=D:\\Java Src\\TestStruct”; //Path to the java source code vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6 vm_args.nOptions = 1; vm_args.options = options; vm_args.ignoreUnrecognized = 0; int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args); if(ret < 0) printf("\nUnable to Launch JVM\n"); 我无法创建实例,因为它给我以下错误。 我能够编译,但它给出了像这样的运行时错误.. 错误输出:VM初始化期间发生错误无法加载本机库:找不到依赖库 任何人都可以提前帮助我:)
所以,这是我的情况: 我有一个Java应用程序,它使用来自“JavaToCpp”类的JNI方法将数据数组发送到C ++ DLL。 一旦C ++ DLL收到了所有数据,它就开始对它执行几个操作。 我正在使用新线程运行“JavaToCpp”类,因为我的Java接口在(长)(C ++)过程/子例程期间不会被冻结。 我实现了两个方法来停止工作(C ++)过程/子例程: 第一个“STOP”:正在创建一个将由C ++ DLL读取的文件,以便它可以干净地停止正在运行的过程/子例程。 第二个“KILL”:应该直接关闭/终止正在运行的C ++过程/子程序 问题是,在寻找一段时间之后,我没有找到任何好的技巧来实现它。 因此,如果有人知道如何在程序/子程序运行时杀死一个线程……
从这篇文章中我可以看到如何使用JNI从本地环境发送Intent: jclass activityClass = jniEnv->FindClass(“android/app/Activity”); jmethodID startAcitivtyMethod = jniEnv->GetMethodID(activityClass , “startActivity”, “(Landroid/content/Intent;)V”); jniEnv->CallVoidMethod(yourActivityObject, startAcitivityMethod, yourIntentObject); 但有可能,如何使用startActivityForResult()而不是startActivity()和onActivityResult()来获取startActivityForResult()的结果? 你如何访问onActivityResult()?
我试图在调用destroyVM之后调用JNI_CreateVM,但它总是返回-1。 这是JDK中的错误吗? 我发现以下链接描述了同样的问题: JNI Bug 该链接有一个示例代码,可以重现我遇到的问题。 有人知道如何解决这个问题吗? 谢谢, 萨米
我需要从Java应用服务器调用tesseract OCR(它是一个用C ++进行光学字符识别的开源库)。 现在,它很容易使用Runtime.exec()运行可执行文件。 基本逻辑是 将当前保存在内存中的图像保存到文件(a .tif) 将图像文件名传递给tesseract命令行程序。 使用FileReader从Java读取输出文本文件。 通过为Tesseract编写JNI包装器,我可以获得多少性能提升? 不幸的是,没有一个可在Linux中运行的开源JNI包装器。 我必须自己做,并且想知道这个好处是否值得开发成本。
我有一个JAVA应用程序,我希望使用JNI将对象作为参数传递给C代码,并且我想再次使用JNI从C代码接收对象到JAVA 。 在JAVA方面,我只是创建了一个应用程序并将其传递给方法,如下所示 JlibFprint.fp_image_data fpimg = new JlibFprint.fp_image_data(); //object to be pass //fp_image_data is the static inner class of the class JlibFprint JlibFprint.fp_image_data fpimg1 = new JlibFprint.fp_image_data(); //received object 这个对象传递给像这样的方法 fpimg1 = JlibFprint.binary_image(fpimg); 该方法的JNI代码如下所示: JNIEXPORT jobject JNICALL Java_jlibfprint_JlibFprint_binary_1image(JNIEnv *env, jclass jcls,jobject imgobj) { struct fp_img img; struct fp_img *imgptr; imgptr = &img; jfp2cfp(env,imgobj,imgptr); fp_init(); imgptr […]
在Android中,当我使用adb shell dumpsys meminfo检查应用程序内存时,我观察到单独的Java和本机堆,但只有1个堆栈条目。 Pss Private Private Swapped Heap Heap Heap Total Dirty Clean Dirty Size Alloc Free —— —— —— —— —— —— —— Native Heap 4516 4480 0 1848 11520 7412 4107 Dalvik Heap 9726 9668 0 12924 33436 28477 4959 Dalvik Other 1417 1416 0 28 Stack 288 288 0 0 我想问一下,在Android中,当一个java类通过JNI使用本机代码时,是在java堆栈中连续内存位置分配的本机堆栈,还是它们是非连续的(实际上是两个独立的堆栈)? […]
我有libmath.so文件,其中包含本机方法。 我需要在我的android代码中调用本机方法。 我创建了一个示例android应用程序并在libs / armeabi文件夹中添加了libmath.so,然后运行“右键单击鼠标” – > Android工具 – >添加本机支持。 现在,在应用程序的jni文件夹中创建以下具有以下内容的文件。 Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libmath LOCAL_SRC_FILES := libmath.cpp include $(BUILD_SHARED_LIBRARY) libmath.cpp #include 当我将项目作为Android应用程序运行时,它在控制台中显示如下: – 17:58:41 **** Build of configuration Default for project math **** “F:\\Vinay\\Softwares\\android-ndk-r10d\\ndk-build.cmd” all [armeabi] Compile++ thumb: math libs/armeabi/libmath.so 17:58:53 Build Finished (took 11s.695ms) 以下是我如何加载库的代码: – public […]
我有一个javah的问题,我已经阅读了4或5个stakcoverflowpost,错误“已解决”,但任何事都适合我。 我的问题: 当我执行javah命令时,我有这个错误: Error: cannot access android.support.v7.app.ActionBarActivity class file for android.support.v7.app.ActionBarActivity not found 我试过的: 这是我测试过的命令: C:\Users\MyUser\workspace3\PruebaApp\jni\include>javah -classpath ../../bin/classes;C:\Users\MyUser\AppData\Local\Android\sdk\platforms\android-14\android.jar -o ACK.h com.test.prueba.ACK 我已经尝试了同样的命令,只有“/”而只有“\”用于分离目标。 我用android-11,android-14和android-21试过了。 我试图将以下外部jar添加到我的项目中:“android-support-v4.jar”和“android-support-v7-appcompat.jar” 我试图用eclipse创建一个外部构建配置,就像这里: 找不到Javah Error android.app.Activity 我正在使用的工具 我在Windows 8.1上使用eclipse juno。 我执行命令的文件夹是{project_dir} / jni / include。 我从不同的文件夹中尝试过它,正确地修改了命令。 包含本机函数的.java文件是包中的“ACK.java”:“com.test.prueba” 在项目中,我使用的android库是android 5.0.1 我能做什么? 提前致谢。
什么有效:我有一个运行TUN / TAP服务的ac可执行文件,以及两个在终端运行正常的shell脚本(用于配置“ip route”和“iptables”),都以root身份运行。 什么行不通:我试图创建一个Android应用程序来按下按钮后运行c可执行文件和shell脚本。 我最初做的就是onClick会用processBuilder创建一个进程,如下所示: final Button button1 = … … public void onClick(View v) { String ip_address = edIPAddress.getText().toString(); Process process; try { process = new ProcessBuilder() .command(“/system/bin/su”, “-c”, “/data/tuntapserv/armeabi/mytunserv ” + ip_address) .redirectErrorStream(true) .start(); InputStream in = process.getInputStream(); OutputStream out = process.getOutputStream(); pOutput.append(“TUN/TAP IS CONFIGURED!\n”); } catch (Exception e) { // TODO […]