FindJNI

尋找 Java 原生介面 (JNI) 的標頭檔和函式庫。

JNI 讓在 Java 虛擬機器 (JVM) 或 Android 上的 Dalvik 虛擬機器 (DVM) 中執行的 Java 程式碼,可以呼叫或被以其他語言(如 C 和 C++)撰寫的原生應用程式和函式庫呼叫。

這個模組會尋找 Java 是否已安裝,並判斷 include 檔案和函式庫的位置。它也會判斷函式庫的名稱。呼叫者可以設定變數 JAVA_HOME 以明確指定 Java 安裝前綴目錄。

在 3.24 版本中新增: 新增了匯入的目標、元件 AWTJVM 和 Android NDK 支援。如果沒有指定元件,當目標是 Android 時,模組會預設為空的元件清單;否則會預設為所有可用的元件。

當使用 Android NDK 時,會回報對應的套件版本,並且可以請求特定的版本。在 Android API level 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 level 31 及以上版本時,匯入的目標將提供對 libnativehelper.so 的存取,該函式庫公開了 JVM 函數,例如 JNI_CreateJavaVM

結果變數

這個模組設定以下結果變數

JNI_INCLUDE_DIRS

要使用的 include 目錄。

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 的 include 路徑。

JAVA_INCLUDE_PATH2

機器相關標頭檔 jni_md.hjniport.h 的 include 路徑。只有在 jni.h 依賴這些標頭檔之一時才會定義此變數。相比之下,Android NDK jni.h 通常可以單獨使用。

JAVA_AWT_INCLUDE_PATH

jawt.h 的 include 路徑。