java - Android 工具链上没有可链接的 JNI 库

标签 java android java-native-interface

Android 工具链中似乎有“jni.h” header ,但没有可链接的库。

有人可以指导我如何在应用程序中从 C 代码调用 Java 函数吗?

最佳答案

Android 不导出 JNI 库。这意味着系统中无法从用户空间 C 代码调用 JNI_CreateJavaVM() 及其同类。您可以创建自己的 JVM,但它不会是同一个 Java,并且无法访问 Android SDK 类和方法。

在 Android 中,Zigote 进程是使用特殊的 JVM(Dalvik 或 ART)启动的,然后 Java 可以加载您的 C 代码(以 .so 文件的形式),反之亦然。

您的 C 代码可以使用标准 JNI 技术,例如 CallVoidMethod() 及其类似技术来调用 Java 方法。请注意,Android SDK Java 方法通常需要一些“句柄”(例如 context)来完成其工作;通常,您必须依赖从 Java 到 C 的一些调用来为您提供这些句柄。

关于java - Android 工具链上没有可链接的 JNI 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039241/

相关文章:

java - Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final - MySQL 上的 GeneratedValue

java - 无法解析 JavaCV 中的导入

java - 我们如何在 Swing 中的两个面板之间画一条线

android - 三星 Galaxy 设备相机 Intent 问题

java - 如何使用 swig 类型映射将 std::vector<std::pair<std::string, int>> 从 Java 返回到 C++

Java Web 应用程序需要同时支持 Web 和移动设备

Android 应用内支付动态产品列表

Android - 将两个构建类型设置为同一源文件夹

java - 没有方法的接口(interface)

c++ - 如何在 Android Studio 中为 NDK 构建解决 "undefined reference"?