查找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::AWTJava AWT 本机接口 (JAWT) 库,仅在找到组件“AWT”时定义。
JNI::JVMJava 虚拟机 (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_LIBRARYJava AWT 本机接口 (JAWT) 库的路径。
JAVA_JVM_LIBRARYJava 虚拟机 (JVM) 库的路径。
JAVA_INCLUDE_PATHjni.h的包含路径。JAVA_INCLUDE_PATH2机器相关标头“jni_md.h”和“jniport.h”的包含路径。仅当
jni.h依赖于这些标头之一时才定义该变量。相比之下,Android NDKjni.h通常可以独立使用。JAVA_AWT_INCLUDE_PATHjawt.h的包含路径。