FindJNI¶
查找 Java 本机接口 (JNI) 头文件和库。
在 Android 上,JNI 使得在 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 及更高版本时,导入目标将提供对
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.h
和jniport.h
的包含路径。仅当jni.h
依赖于其中一个标头时才定义此变量。相反,Android NDKjni.h
通常可独立使用。JAVA_AWT_INCLUDE_PATH
到
jawt.h
的包含路径。