查找JNI

查找 Java 本机接口 (JNI) 标头和库。

JNI 使在 Android 上的 Java 虚拟机 (JVM) 或 Dalvik 虚拟机 (DVM) 中运行的 Java 代码能够调用以其他语言(例如 C 和 C++)编写的本机应用程序和库,并被这些应用程序和库调用。

该模块查找是否安装了 Java 并确定包含文件和库的位置。它还确定库的名称是什么。调用者可以设置变量“JAVA_HOME”来明确指定 Java 安装前缀。

在 3.24 版本加入: 添加了导入的目标、组件“AWT”、“JVM”和 Android NDK 支持。如果未指定任何组件,则模块在针对 Android 时默认为空组件列表,否则所有可用组件。

使用 Android NDK 时,会报告相应的包版本,并可以请求特定版本。在 Android API 级别 31 及以上,可以请求额外的“NativeHelper”组件。 NativeHelper 也作为 JVM 组件的隐式依赖项公开(仅当这不会导致冲突时),它提供对 JVM 功能的统一访问。

进口目标

在 3.24 版本加入.

JNI::JNI

主要 JNI 目标,仅在找到 jni.h 时定义。

JNI::AWT

Java AWT 本机接口 (JAWT) 库,仅在找到组件“AWT”时定义。

JNI::JVM

Java 虚拟机 (JVM) 库,仅在找到组件“JVM”时定义。

JNI::NativeHelper

当针对 Android API 级别 31 及更高级别时,导入目标将提供对公开 JVM 函数(例如 JNI_CreateJavaVM)的 libnativehelper.so 的访问。

结果变量

该模块设置以下结果变量:

JNI_INCLUDE_DIRS

要使用的包含目录。

JNI_LIBRARIES

要使用的库(JAWT 和 JVM)。

JNI_FOUND

如果找到 JNI 标头和库,则为 TRUE。

JNI_<组件>_FOUND

在 3.24 版本加入.

TRUE 如果找到``<component>``。

JNI_VERSION

完整的 Android NDK 包版本(包括后缀,例如“-beta3”和“-rc1”)或未定义。

JNI_VERSION_MAJOR

在 3.24 版本加入.

Android NDK 主要版本或未定义。

JNI_VERSION_MINOR

在 3.24 版本加入.

Android NDK 次要版本或未定义。

JNI_VERSION_PATCH

在 3.24 版本加入.

Android NDK 补丁版本或未定义。

缓存变量

以下缓存变量也可用于设置或使用:

JAVA_AWT_LIBRARY

Java AWT 本机接口 (JAWT) 库的路径。

JAVA_JVM_LIBRARY

Java 虚拟机 (JVM) 库的路径。

JAVA_INCLUDE_PATH

jni.h 的包含路径。

JAVA_INCLUDE_PATH2

机器相关标头“jni_md.h”和“jniport.h”的包含路径。仅当 jni.h 依赖于这些标头之一时才定义该变量。相比之下,Android NDK jni.h 通常可以独立使用。

JAVA_AWT_INCLUDE_PATH

jawt.h 的包含路径。