FindJNI

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

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

此模块查找 Java 是否已安装并确定包含文件和库的位置。它还确定库的名称。调用方可以显式设置变量 JAVA_HOME 来指定一个 Java 安装前缀。

版本 3.24 中添加: 添加了导入目标、组件 AWTJVM 以及对 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 及更高版本时,导入目标将提供对 libnativehelper.so 的访问,后者公开 JVM 函数(例如 JNI_CreateJavaVM)。

结果变量

此模块设置以下结果变量

JNI_INCLUDE_DIRS

要使用的包含目录。

JNI_LIBRARIES

要使用的库(JAWT 和 JVM)。

JNI_FOUND

如果找到了 JNI 头文件和库,则为 TRUE

JNI_<component>_FOUND

在版本 3.24 中添加。

找到了 <component>,则为 TRUE

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.hjniport.h 的包含路径。仅当 jni.h 依赖于其中一个标头时才定义此变量。相反,Android NDK jni.h 通常可独立使用。

JAVA_AWT_INCLUDE_PATH

jawt.h 的包含路径。