FindJNI¶
尋找 Java 原生介面 (JNI) 的標頭檔和函式庫。
JNI 讓在 Java 虛擬機器 (JVM) 或 Android 上的 Dalvik 虛擬機器 (DVM) 中執行的 Java 程式碼,可以呼叫或被以其他語言(如 C 和 C++)撰寫的原生應用程式和函式庫呼叫。
這個模組會尋找 Java 是否已安裝,並判斷 include 檔案和函式庫的位置。它也會判斷函式庫的名稱。呼叫者可以設定變數 JAVA_HOME
以明確指定 Java 安裝前綴目錄。
在 3.24 版本中新增: 新增了匯入的目標、元件 AWT
、JVM
和 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.h
和jniport.h
的 include 路徑。只有在jni.h
依賴這些標頭檔之一時才會定義此變數。相比之下,Android NDKjni.h
通常可以單獨使用。JAVA_AWT_INCLUDE_PATH
jawt.h
的 include 路徑。