问题标签 [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.
android - 异常 Ljava/lang/UnsatisfiedLinkError; 在 AOSP Build 中初始化时抛出
大家好,我正在使用jni
代码在我的应用程序中生成一些数字。当我在我的设备上安装并运行它时,它使用 jni 代码可以正常工作,但是当我创建AOSP构建闪烁system.img
并boot.img
在我的设备UnsatisfiedLinkError
中运行时获取jni
代码时。
我的项目结构、代码片段和 logcat 如下所示
下面的代码用于 JNI Wrapper 类
随机生成器.java
安卓.mk
应用程序.mk
构建.gradle
下面是主要应用程序
Android.mk
代码片段。
安卓.mk
现在的问题是,当我使用此代码运行 android 应用程序时,它可以按预期的 jni 代码正常工作,甚至 AOSP 构建也成功完成。但是当我刷新 AOSP 构建时,我
UnsatisfiedLinkError
会在运行时得到。
注意:在 AOSP 构建 .so 文件创建与应用程序相关
code-generator
但未在应用程序中找到路径后,我认为配置出现Android.mk
问题。请有人可以帮助我。
提前致谢。
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 的功能改进我的代码?
java - 使用 C++ (JNI) 包装 Java 库
我有一个用 C++ 编写的大型程序,需要使用特定的 Java 库。理想情况下,我想创建一个等效的 C++ 库来包装这个现有的 Java 代码。因此,我一直在研究 JNI 调用 API。
由于我不是一个非常有经验的程序员,而且我对 JNI 和多语言编程也缺乏经验,我非常感谢一些关于如何解决这个问题的一般性指针/提示/建议。
我特别想知道的事情:
- Java 库中的每个 Java 类都应该映射到关联的 C++ 类吗?即在我的 C++ 库中,我会有一个类,每个类都为特定的 Java 类调用一个 JVM?或者我会有一个单一的 JVM,通过它可以访问所有内容?最好的方法是什么?为什么?
- 这样做的基本流程和架构是什么?
- 是否有任何特定资源可用于使用调用 API 从 Java lib 创建 C++ lib?
非常感谢!
java - 如果`jobject`代表同一个Java实例,它是否总是具有相同的地址?
给定一个 java 对象A a = new A()
和一堆本机实例方法,如果我要将jobject
表示的地址a
传递给这些方法,地址是否总是相同的?
我在这些类中有多个 final 字段,我想将它们存储在我的 C 代码中的 hashmap 中(所以我不必继续使用 获取它们Get___Field
),其中 a 的哈希是jobject
地址。如果我可以保证传入的jobject
表示的地址a
总是相同的,那么哈希是确定性的,这意味着我的程序的行为不会不一致。
java - 将 JNI -> jobject(基本上是映射和/或 java 文件中的映射)转换为 std::map(c++)
我在 java 文件中有一个本地方法:-
从java生成头文件后,map在头文件方法中转换为jobject:-
我在 cpp 中有一个本机方法:
问:- 我需要将 Jobject 转换回 std::map(cpp) 以将其传递给 cpp 本机方法,有人可以建议做同样的标准方法吗?提前致谢。
c++ - 如何使用 JVM/JNI 从 C++ 代码调用 jboss-modules.jar
我有类似下面的东西,它正在 java.exe 上执行。
我想调用与上面相同的方法,但不是 java.exe ,而是我想使用 C++ 代码调用它。
我尝试使用 JNI 包装器调用,但无法做到。我面临的一个问题,
如果您看到 jboss-modules.jar 的 main.class,它没有采用“-c”选项,并且如果我将它作为参数传递,那么它会将问题显示为无效选项,代码示例如下:
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++ 方法时出现访问冲突错误。
android - *** 没有规则来制作目标 `src/main/jni/Build.config'。停止
由于我将我的 NDK 版本降级为14-16
(因为在较新版本中不支持 GCC),我面临这个错误 *** No rule to make target `src/main/jni/Build.config'。停止
我不明白为什么在旧版本的 NDK 中它说在Android.mk
file this line中没有这样的文件或目录src/main/jni/Build.config
。
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 并返回的标准可靠方法是什么?
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 项目之外,还有其他步骤吗?