Tag: jni

JNI Java in c ++

我正在尝试使用以下代码在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:如何使用JNI函数停止调用一系列C ++函数的Thread?

所以,这是我的情况: 我有一个Java应用程序,它使用来自“JavaToCpp”类的JNI方法将数据数组发送到C ++ DLL。 一旦C ++ DLL收到了所有数据,它就开始对它执行几个操作。 我正在使用新线程运行“JavaToCpp”类,因为我的Java接口在(长)(C ++)过程/子例程期间不会被冻结。 我实现了两个方法来停止工作(C ++)过程/子例程: 第一个“STOP”:正在创建一个将由C ++ DLL读取的文件,以便它可以干净地停止正在运行的过程/子例程。 第二个“KILL”:应该直接关闭/终止正在运行的C ++过程/子程序 问题是,在寻找一段时间之后,我没有找到任何好的技巧来实现它。 因此,如果有人知道如何在程序/子程序运行时杀死一个线程……

native / JNI中的Intents和onActivityResult

从这篇文章中我可以看到如何使用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()?

销毁后创建JVM

我试图在调用destroyVM之后调用JNI_CreateVM,但它总是返回-1。 这是JDK中的错误吗? 我发现以下链接描述了同样的问题: JNI Bug 该链接有一个示例代码,可以重现我遇到的问题。 有人知道如何解决这个问题吗? 谢谢, 萨米

通过命令行与JNI进行调用

我需要从Java应用服务器调用tesseract OCR(它是一个用C ++进行光学字符识别的开源库)。 现在,它很容易使用Runtime.exec()运行可执行文件。 基本逻辑是 将当前保存在内存中的图像保存到文件(a .tif) 将图像文件名传递给tesseract命令行程序。 使用FileReader从Java读取输出文本文件。 通过为Tesseract编写JNI包装器,我可以获得多少性能提升? 不幸的是,没有一个可在Linux中运行的开源JNI包装器。 我必须自己做,并且想知道这个好处是否值得开发成本。

如何使用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 – Java Stack vs Native Stack

在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堆栈中连续内存位置分配的本机堆栈,还是它们是非连续的(实际上是两个独立的堆栈)? […]

如何在Android代码中使用.so文件来使用本机方法

我有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:错误:无法访问android.support.v7.app.ActionBarActivity

我有一个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 我能做什么? 提前致谢。

Android JNI原生C函数调用杀死活动

什么有效:我有一个运行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 […]