AAR 程式庫可能包含 Android Gradle 外掛程式可使用的原生依附元件。AGP 也能產生 AAR,藉此向消費者顯示原生程式庫。
使用原生依附元件
從 Android Gradle 外掛程式 4.0 開始,C/C++ 依附元件可以從 build.gradle
檔案中的已連結 AAR 匯入。Gradle 會自動提供這些功能給原生建構系統,但您必須將建構系統設定為使用匯入的程式庫和標頭。由於 C/C++ 依附元件是以 AAR 發布,以下通用 AAR 的連結可能有所幫助:
- 建立 Android 程式庫以取得一般 AAR 文件,以及如何將其整合至專案中,特別是當您打算將 AAR 當做本機 C/C++ 依附元件使用時。
- 新增建構依附元件,瞭解如何在
build.gradle
檔案中新增依附元件 (特別是遠端依附元件)。
本文件說明如何設定原生建構系統,並假設您已將 C/C++ 依附元件 AAR 新增至專案的 Gradle 建構環境。
AAR 中的原生依附元件
Gradle 模組的 AAR 依附元件可能會曝露原生資料庫,以供應用程式使用。在 AAR 中,prefab
目錄包含 Prefab 套件,其中包含原生依附元件的標頭和程式庫。
每個依附元件最多可曝露一個 Prefab 套件,其中可含有一或多個模組。Prefab 模組是單一程式庫,可以是共用、靜態或僅限標頭的程式庫。
使用程式庫和模組名稱時,您需要知道程式庫的使用方式。依照慣例,套件名稱會與 Maven 構件名稱相符,而模組名稱會與 C/C++ 程式庫名稱相符,但並非必要。請參閱依附元件的說明文件,以判斷使用的名稱。
建構系統設定
您必須為 Android Gradle 模組啟用 prefab
功能。
如要這麼做,請將以下內容新增至模組 build.gradle
檔案的 android
區塊中:
Kotlin
buildFeatures { prefab = true }
Groovy
buildFeatures { prefab true }
您也可以在專案的 gradle.properties
檔案中設定版本:
android.prefabVersion=2.0.0
一般來說,所選的預設 AGP 能符合您的需求。除非您需要修正錯誤或想使用的新功能,否則應選取其他版本。
從 AAR 匯入的依附元件會透過 CC_FIND_ROOT_PATH 曝露給 CMake。叫用 CMake 時,Gradle 會自動設定此內容值,所以如果您的建構會修改這個變數,請務必附加,而不要用指派的方式。
每個依附元件都會向您的建構作業曝露設定檔套件。這些是使用 find_package 指令匯入。此指令會搜尋與指定套件名稱和版本相符的設定檔套件,並曝露要在建構作業中使用的目標。舉例來說,假使您的應用程式定義 libapp.so
,且使用 cURL,您的 CMakeLists.txt
應該包含以下內容:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
app.cpp
現在可以 #include "curl/curl.h"
,但 libapp.so
會在建構時自動連結至 libcurl.so
,應用程式也會包含 libcurl.so
。
在 AAR 中發布原生程式庫
AGP 4.1 新增了建立原生 AAR 的功能。
如要匯出原生程式庫,請將以下內容加入程式庫專案的 build.gradle.kts
檔案的 android
區塊中:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Groovy
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
在此範例中,從 ndk-build 或 CMake 外部原生建構作業的 mylibrary
和 myotherlibrary
程式庫會封裝在建構產生的 AAR 中,並且每個都會將標頭從指定目錄匯出到他們的依附元件。