问题标签 [jniwrapper]

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 回答
508 浏览

android - 异常 Ljava/lang/UnsatisfiedLinkError; 在 AOSP Build 中初始化时抛出

大家好,我正在使用jni代码在我的应用程序中生成一些数字。当我在我的设备上安装并运行它时,它使用 jni 代码可以正常工作,但是当我创建AOSP构建闪烁system.imgboot.img在我的设备UnsatisfiedLinkError中运行时获取jni代码时。

我的项目结构、代码片段和 logcat 如下所示

在此处输入图像描述

下面的代码用于 JNI Wrapper 类

随机生成器.java

安卓.mk

应用程序.mk

构建.gradle

下面是主要应用程序Android.mk代码片段。

安卓.mk

现在的问题是,当我使用此代码运行 android 应用程序时,它可以按预期的 jni 代码正常工作,甚至 AOSP 构建也成功完成。但是当我刷新 AOSP 构建时,我 UnsatisfiedLinkError会在运行时得到。

注意:在 AOSP 构建 .so 文件创建与应用程序相关code-generator但未在应用程序中找到路径后,我认为配置出现 Android.mk问题。请有人可以帮助我。

提前致谢。

0 投票
1 回答
73 浏览

c++ - 如何使用 C++ 模板实现从类型到对象方法调用的映射?

我想使用 C++ 模板为 JNI 代码中的 java 数组开发(又一个)包装器。主要目标是提高我的 C++ 模板编程技能。

我使用 Android NDK 编译代码(编译器是 Clang 6.0.2)

到目前为止,我已经设法做到了:

这不适用于int[]float[]其他数组byte[],因为此类调用GetByteArrayElements.

struct TypeToObjectType用来建立映射jbyteArray-> jbyte, jintArray-> jint

此映射缺少部分 java 类型 ->JEnv方法调用,即jbyteArray-> ( GetByteArrayElements, ReleaseByteArrayElements), jintArray-> ( GetIntArrayElements, ReleaseIntArrayElements)`

我该怎么做?

如何使用 C++11、C++14 的功能改进我的代码?

0 投票
2 回答
1309 浏览

java - 使用 C++ (JNI) 包装 Java 库

我有一个用 C++ 编写的大型程序,需要使用特定的 Java 库。理想情况下,我想创建一个等效的 C++ 库来包装这个现有的 Java 代码。因此,我一直在研究 JNI 调用 API。

由于我不是一个非常有经验的程序员,而且我对 JNI 和多语言编程也缺乏经验,我非常感谢一些关于如何解决这个问题的一般性指针/提示/建议。

我特别想知道的事情:

  1. Java 库中的每个 Java 类都应该映射到关联的 C++ 类吗?即在我的 C++ 库中,我会有一个类,每个类都为特定的 Java 类调用一个 JVM?或者我会有一个单一的 JVM,通过它可以访问所有内容?最好的方法是什么?为什么?
  2. 这样做的基本流程和架构是什么?
  3. 是否有任何特定资源可用于使用调用 API 从 Java lib 创建 C++ lib?

非常感谢!

0 投票
1 回答
86 浏览

java - 如果`jobject`代表同一个Java实例,它是否总是具有相同的地址?

给定一个 java 对象A a = new A()和一堆本机实例方法,如果我要将jobject表示的地址a传递给这些方法,地址是否总是相同的?

我在这些类中有多个 final 字段,我想将它们存储在我的 C 代码中的 hashmap 中(所以我不必继续使用 获取它们Get___Field),其中 a 的哈希是jobject地址。如果我可以保证传入的jobject表示的地址a总是相同的,那么哈希是确定性的,这意味着我的程序的行为不会不一致。

0 投票
3 回答
412 浏览

java - 将 JNI -> jobject(基本上是映射和/或 java 文件中的映射)转换为 std::map(c++)

我在 java 文件中有一个本地方法:-

从java生成头文件后,map在头文件方法中转换为jobject:-

我在 cpp 中有一个本机方法:

问:- 我需要将 Jobject 转换回 std::map(cpp) 以将其传递给 cpp 本机方法,有人可以建议做同样的标准方法吗?提前致谢。

0 投票
0 回答
43 浏览

c++ - 如何使用 JVM/JNI 从 C++ 代码调用 jboss-modules.jar

我有类似下面的东西,它正在 java.exe 上执行。

我想调用与上面相同的方法,但不是 java.exe ,而是我想使用 C++ 代码调用它。

我尝试使用 JNI 包装器调用,但无法做到。我面临的一个问题,

如果您看到 jboss-modules.jar 的 main.class,它没有采用“-c”选项,并且如果我将它作为参数传递,那么它会将问题显示为无效选项,代码示例如下:

0 投票
0 回答
266 浏览

visual-c++ - 从 32 位迁移 C++ 和 Java 64 位挑战

任何用于编译和运行使用 Java 32 位版本来链接 C++ 和 Java 中的本机代码的现有应用程序的指南或指针,从 Java9(JDK9) 开始,只有 64 位版本的 java 将可用。将 JNI 层(32 位)和 C++ 代码迁移到 64 位架构的任何方法。

注意:使用 Visual Studio 2012 IDE 编译和执行 C++ 代码。是否更新了 VC++ 中的配置参数(链接器属性、VC++ 目录、C/C++ 属性)以指向 64 位 JDK 版本。这确实可以编译,但是在调试时会在访问内置 C++ 方法时出现访问冲突错误。

0 投票
2 回答
609 浏览

android - *** 没有规则来制作目标 `src/main/jni/Build.config'。停止

由于我将我的 NDK 版本降级为14-16(因为在较新版本中不支持 GCC),我面临这个错误 *** No rule to make target `src/main/jni/Build.config'。停止

我不明白为什么在旧版本的 NDK 中它说在Android.mkfile this line中没有这样的文件或目录src/main/jni/Build.config

0 投票
3 回答
992 浏览

java - 如何将“Java 修改的 UTF-8”转换为常规的 UTF-8 并返回?

我围绕本机 C 库创建了一个 Java 包装器,并且对字符串编码有疑问。Java 使用的“Java 修改的 UTF-8”编码与常规 UTF-8 略有不同。这些差异可能会导致严重的问题:JNI 函数在通过常规 UTF-8 时可能会导致应用程序崩溃,因为它可能包含“Java 修改的 UTF-8”禁止的字节序列。请参阅以下主题:“Java Modified UTF-8 Encoding”是什么意思?

我的问题是将“Java 修改的 UTF-8”转换为常规 UTF-8 并返回的标准可靠方法是什么?

0 投票
3 回答
360 浏览

java-native-interface - 使用新的 java 包装器向 linphone 添加新的本机函数

向新的 linphone SDK 添加自定义功能。

在开发人员的指导下,我通过向 bellesip C 代码添加小功能来构建 liblinphone android sdk。还向 linphonecore_jni.cc 添加了相关条目并构建了 linphone-android-sdk。在文档页面上,它说将为本机功能自动生成包装器。但是在构建 AAR 并将其添加到 linphone 项目之后,我在核心方法中看不到我的方法。我都试过了-DENABLE_JAVA_WRAPPER=NO- DENABLE_JAVA_WRAPPER=YES

我尝试添加

我希望我可以在 linphone java 代码中调用本机方法。除了我在核心中的自定义方法外,所有方法都在填充。除了将 linphonesdk AAR 库文件添加到 linphone 项目之外,还有其他步骤吗?