Tag: jni

如何从JNI返回一个数组到Java?

我正在尝试使用Android NDK。 有没有办法将JNI中创build的数组(在我的情况下,一个int[] )返回给Java? 如果是这样,请提供一个JNI函数的简单例子。 -谢谢

Android Studio中的JNI和Gradle

我正在尝试将本地代码添加到我的应用程序。 我拥有../main/jni所有内容, ../main/jni在我的Eclipse项目中一样。 我已经添加ndk.dir=…到我的local.properties 。 我还没有做任何其他事情(我不知道还有什么其他要求,所以如果我错过了一些让我知道)。 当我尝试build立我得到这个错误: Execution failed for task ':app:compileDebugNdk'. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: /Users/me/android-ndk-r8e/ndk-build NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/Users/me/Project/app/build/ndk/debug/Android.mk APP_PLATFORM=android-19 NDK_OUT=/Users/me/Project/app/build/ndk/debug/obj NDK_LIBS_OUT=/Users/me/Project/app/build/ndk/debug/lib APP_ABI=all Error Code: 2 Output: make: *** No rule to make target `/Users/me/Project/webapp/build/ndk/debug//Users/me/Project/app/src/main/jni/jni_part.cpp', needed by `/Users/me/Project/app/build/ndk/debug/obj/local/armeabi-v7a/objs/webapp//Users/me/Project/app/src/main/jni/jni_part.o'. Stop. 我需要做什么? Android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # OpenCV OPENCV_CAMERA_MODULES:=on OPENCV_INSTALL_MODULES:=on include …/OpenCV-2.4.5-android-sdk/sdk/native/jni/OpenCV.mk […]

从Java调用Win32 API方法

我需要从Java程序中调用Wininet.dll中的一些方法 。 我可以find很多关于如何调用从Java创build的新DLL的教程,但似乎找不到有关如何从Java调用已经存在的DLL的教程。 我知道这涉及到JNI,但是我到底该怎么做呢? 我需要在Wininet.h上调用javah吗? 我在哪里得到一个Wininet.h的副本? 指向现有的详细教程的指针就足够了。

如何捕获JNI / Javaexception

我的应用程序中有一个JNI图层。 在某些情况下,Java引发exception。 我怎么能在JNI层得到Javaexception? 我有这样的代码如下所示。 if((*(pConnDA->penv))->ExceptionCheck(pConnDA->penv)) { (*(pConnDA->penv))->ExceptionDescribe(pConnDA->penv); (*(pConnDA->penv))->ExceptionClear(pConnDA->penv); } 这段代码是否只能捕获JNIexception? 在控制台(stderr)中将exception描述logging在哪里? 我怎么把它放到缓冲区中,这样我就可以把它传递给我的logging器模块?

我怎样才能捕获SIGSEGV(分段错误),并得到在Android上的JNI下的堆栈跟踪?

我将项目移动到新的Android本地开发工具包(即JNI),我想赶上SIGSEGV,如果它发生(也可能是SIGILL,SIGABRT,SIGFPE),以提供一个很好的崩溃报告对话框,而不是(或之前)目前发生的事情:该进程的直接不必要的死亡,以及操作系统可能尝试重启该进程。 ( 编辑: JVM / Dalvik虚拟机捕捉信号并logging堆栈跟踪和其他有用的信息;我只是想提供给用户的选项,真正的电子邮件信息给我)。 情况是:大量的C代码我没有写在这个应用程序的大部分工作(所有的游戏逻辑),虽然它在许多其他平台上经过了充分的testing,但是我完全有可能在我的Android端口,会喂它垃圾并导致在本机代码崩溃,所以我想崩溃转储(本机和Java),目前在Android日志中显示(我想这将是在非Android情况下stderr)。 我可以自由地修改C和Java代码,尽pipecallback函数(进出JNI)的数量大约为40,显然,小差异的奖励点。 我听说过J2SE中的信号链接库libjsig.so,如果我可以在Android上安全地安装一个信号处理程序,这将解决我的问题的捕捉部分,但是我看不到Android / Dalvik这样的库。

从JAR中提取并加载DLL

我的Java应用程序使用DL​​L库。 我怎样才能从JAR文件工作? 该DLL位于项目的源文件夹中。 我必须将其包含在我的JAR中,在运行时(在jar的同一个目录中)提取它并加载它。

在哪里可以findjava.lang本地方法的源代码?

我对JNI非常熟悉,我很好奇地看到我的机器特定的实现java.lang包中的一些本地方法。 例如, Thread#currentThread() 。 我在[JDK_HOME] / jre / bin中发现了一堆DLL,但就像我说的,我试图find源代码。 有谁知道本地源代码可以find的地方? 它是否可用,还是由Sun分类(哎呀,我的意思是“我们就是为了赢得它”Oracle)?

在Android中从c ++调用java方法

我试图从C ++中获得一个简单的Java方法调用,而Java调用本地方法。 这是Java代码: public class MainActivity extends Activity { private static String LIB_NAME = "name"; static { System.loadLibrary(LIB_NAME); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.textview); tv.setText(this.getJniString()); } public void messageMe(String text) { System.out.println(text); } public native String getJniString(); } […]

是什么让JNI电话慢?

我知道在Java中进行JNI调用时,“跨越边界”的速度很慢。 不过,我想知道它是什么让它变慢? 在进行JNI调用时,底层的jvm实现是如何做的?

如何解决JNI项目中的UnsatisfiedLinkError(无法find相关的库)

我正在使用JNI的Java项目。 JNI调用我自己编写的自定义库,让我们说mylib.dll,这取决于第三方库libsndfile-1.dll。 当我运行我的程序时,它崩溃了 java.lang.UnsatisfiedLinkError: C:\…path…\mylib.dll: Can't find dependent libraries. 我search了这个网站(和其他人),我已经尝试了一些修复: 我跑了依赖沃克。 DW给出了一些警告 – libsndfile,MPR.DLL和SHLWAPI.DLL所需的两个库有“未parsing的导入” – 但DW FAQ表示可以安全地忽略这些警告。 我修复了mylib.dll中的方法名称,正如这里所build议的那样。 方法名已经被编译器弄坏了,但是我添加了链接器标志,现在dll方法名与我的jni头文件中的名称完全匹配。 我将所有这些DLL放在相同的目录中 – 与调用它们的.jar相同的目录 – 以确保它们位于正确的PATH上。 没有骰子。 有谁知道发生了什么事? 我正在MacBook Pro上通过Visual Studio 2010进行开发(通过Parallels)。 我正在使用东芝笔记本电脑在Windows XP中进行testing。