问题标签 [jnienv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
117 浏览

java - Android JNI Throwing Fault 无异常 - 尝试调用回调

JNI无异常导致错误

似乎发生在几个不同的领域,但通常在这段代码中:

我们检查了 env 仍然指向一个有效的内存位置,传入的大小在规范内

这在被调用几次后开始发生

有没有更好的方法来调试 JNI 问题?

我们还在似乎引发错误的行的正上方检查了 JNI 特定异常

0 投票
0 回答
477 浏览

java - JNI -> 将空终止的 cstring 转换为 jstring

我正在尝试使用 UTF-8 编码将 C 样式的字符串转换为 JString。我知道执行此操作的 NewStringUTF 方法。但是,输入的 c 风格字符串可能并不总是 UTF-8 编码。因此,如果我将非 UTF-8 c-string 传递给此方法,运行时会崩溃。

我打算将它转换为字节数组,然后从中构建 jstring。如果给定的字节数组不限于 UTF-8 编码,是否有返回默认(或)空 jstring 的构造函数?

0 投票
1 回答
3575 浏览

java - jni getMethodID 用于获取构造函数 ID 时返回 Null

classNameC 是一个全局变量,它的类没有构造函数。然后在其他函数中,我这样使用它:

这个构造函数有 2 个参数,一个是长的,下一个是布尔值。这个类有 2 个构造函数,另外一个没有参数并且用 0 初始化成员。

当我运行它时,它成功打印到创建的 SWIGTYPE p void 类并且 SWIGTYPE p void 构造函数为 NULL ,然后它给出了这个错误:

Java 运行时环境检测到一个致命错误:

SIGSEGV (0xb) 在 pc=0x00007f7ec503fa7b,pid=25307,tid=140182441326336

JRE 版本:Java(TM) SE Runtime Environment (7.0_65-b17) (build 1.7.0_65-b17) Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops) 有问题框架:V [libjvm.so+0x657a7b] JNI_ArgumentPusherVaArg::JNI_ArgumentPusherVaArg(_jmethodID*, __va_list_tag*)+0x1b

核心转储写入。默认位置:/home/manish/rathi/libdmc/dmcore/include/core 或 core.25307

包含更多信息的错误报告文件保存为:/home/manish/rathi/libdmc/dmcore/include/hs_err_pid25307.log

如果您想提交错误报告,请访问:
http ://bugreport.sun.com/bugreport/crash.jsp

中止(核心转储)

0 投票
1 回答
5374 浏览

java - 从 C++ 到 Java 的 Android JNI 回调

我尝试创建从 jni 到 java 的回调,但是当从 cpp 线程执行我的代码时,findClass 方法返回 null,但是从 jni 线程(本机线程)正确执行的相同类路径和方法。

}

0 投票
0 回答
1674 浏览

c++ - 编译终止致命错误:abc.h:没有这样的文件或目录

该项目是关于与 java 握手 Cpp 为此我使用 JNI,我进行了所有必要的配置,使 Cpp 项目在 Cpp 项目的 src 文件夹中生成头文件创建 ABC.h 文件和 abc.Cpp 文件。当我构建 abc.cpp 文件时,它显示错误编译失败,因为 p.thread 没有找到这样的目录,如果我删除这个 P.thread 头文件,它显示 ABC.h 未找到,而 ABC.h 文件在同一个文件夹中,我们包括在我们的 Cpp 文件中请帮助我解决这个问题,我是 JNI 的新手,下面附加的 PNG 文件向您展示了详细信息

0 投票
0 回答
144 浏览

java - JNI Newbyte 数组需要很长时间才能执行

我有一个简单的 JNI 调用,其中分配了新字节。我调用了 NewByteArray() 函数。但是该函数需要大约 30 秒来分配内存。如何让它快速或者我错过了什么。使用的 sdk 是 Android API 级别 21 (Android L)

0 投票
1 回答
812 浏览

java - 无法使用 JNI 使用外部 Java 类

我在通过 JNI 使用外部 Java 类时遇到问题。我将用一个玩具示例来说明我的问题。

这是我的 Java 类,例如使用 Apache Commons IO 的外部类 FilenameUtils:

Example.java

我的类路径是用 $CLASSPATH 设置的:

我用javac编译它,然后执行它。这是我得到的输出,这是正确的:

之前
foo
之后

当我使用 JNI 从 C++ 调用 Java 方法“base”时,问题就出现了。这是 C++ 代码:

测试.cpp

尽管我认为在我的情况下没有必要,因为它已经使用 $CLASSPATH 进行了配置,但我再次在 VM 选项中指定了类路径。我还在 CallStaticVoidMethod 函数中添加了参数 5,因为我不知道如何指定零参数。Java 方法不接收任何参数,因此被忽略。

然后我编译这个 C++ 代码:

并执行这个编译好的程序。这是我现在得到的输出:


完成 前

方法“base”的执行只是在它访问 getBaseName 方法时停止。没有引发异常,它只是停止执行,并返回到本机代码。

为什么无法执行 FilenameUtils.getBaseName() 方法?

我的机器运行的是 Mac OS 10.10 Yosemite,带有 Java 1.7.0.72 64 位。

提前致谢。

更新

我尝试将 commons-io-2.4.jar 直接包含在类路径中,现在程序可以工作了:

现在我的问题是,为什么使用 JNI 时类路径的行为会有所不同?

0 投票
1 回答
1432 浏览

java - 如何在 Android 中从 Native C/C++ 调用 Java API

Android C/C++ 原生调用 Java API 的例子很多。但是,我读过的所有这些示例都是 Android Java API 首先调用原生,然后原生通过使用传递的 JNI-ENV 调用其他 Java API。

没有通过的 JNI-ENV,C/C++ 怎么能得到呢?是否有可能 C/C++ 本机通过创建 JavaVM 在 Android 中调用 Java API?如果是,请分享链接。我已经完成了一个项目 CoCos2dx,但我无法找到明确的细节。github.com/nokia-developer/cocos2d-x-qt/tree/master/

提前致谢!

0 投票
0 回答
293 浏览

android - JNI:从 C 调用 Java 回调时的段错误

我是一个 C 语言的库,我正在将其用于 Android 应用程序。这个库有一个音频流,它偶尔会刷新。发生这种情况时,它会调用我设计的写回调函数。

我的意图是让 C 回调调用特定 Java 对象上的方法,该方法将处理带有 strem 的内容。

目前我有这样的代码:

回调方法如下所示:

我在 CallVoidMethod 处发生崩溃,其签名是由我传入的任何对象实现的接口:

我怀疑我不正确地获得/保留了对这些对象的引用,但我还没有找到一个很好的方法来处理它。关于如何更正确地处理这个问题的任何建议?

0 投票
0 回答
997 浏览

java - Qt JNI:decodeIndirectRef 中的间接引用 0x61382e48 无效

我正在尝试从 android 上的麦克风捕获音频数据的 Qt 项目。我参考了这篇文章:Android AudioRecord 示例,并将其写入 Qt 代码。

但是,在这一行 int result = mAudioRecorder->callMethod("read", "([BII)I", buffers, offset, size); 该应用程序崩溃并输出以下日志。

我猜这个错误是 JNI 调用错误的原因,但我找不到原因。

补充: 我发现0x61382e48缓冲区数组的地址

编辑: AudioRecord 的 Android 指南在这里

欢迎任何建议。