本頁面說明如何建構 Android 核心 ABI 表示法,並執行 ABI 監控。適用於 Android 14 以上版本。如需較低版本的資訊,請參閱舊版核心版本。
另請參閱 Kleaf 的參考文件:支援 ABI 監控 (GKI) 和 支援 ABI 監控 (裝置)。
建構核心及其 ABI 表示法
下載 GKI 來源後,請執行下列指令,建構 GKI 核心和 ABI 構件:
tools/bazel run //common:kernel_aarch64_abi_dist
這個指令會建構目前的 ABI 表示法,並將其複製到 out_abi/kernel_aarch64/dist/abi.stg
,以及已建構的核心和模組。
您可以在指令結尾 --
後為 ABI 工具指定額外的引數。舉例來說,如要變更 ABI 的目的地和建構構件,您可以使用 --dist_dir
選項:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
分析建構作業與參考表示法之間的 ABI 差異
在上述指令中執行的 //common:kernel_aarch64_abi_dist
目標會分析並回報在 common/android/abi_gki_aarch64.stg
中 (在 BUILD.bazel
中定義) 的建構和參考表示法之間的任何 ABI 差異。這些差異會在建構結束時列印出來,如以下範例所示:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
列印的報表來自位於 out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
的建構構件,以及其他格式的報表。
自動化應使用建構指令的結束程式碼,如果找到差異,則非零。
請注意,開發階段分支 (包括 android-mainline
) 沒有參考 ABI 表示法。否則 //common:kernel_aarch64_abi_dist
不會偵測到任何差異。
更新參考 ABI 表示法
任何會影響核心 ABI 的變更 (例如符號清單更新),都需要反映在參照 ABI 表示法中 (common/android/abi_gki_aarch64.stg
,定義請見 BUILD.bazel)。如要執行這項操作,請執行下列指令:
tools/bazel run //common:kernel_aarch64_abi_update
這個指令會執行「分析 ABI 差異」步驟中的所有項目,並另外更新來源中的參照表示法。更新後的 ABI 可在變更時與該變更一起上傳。在提交訊息中,加入 $DIST_DIR/abi.report.short
中報表的 ABI 差異。
ABI 監控和裝置目標
您只需為核心核心建構目標設定 ABI 監控功能。而使用 GKI 核心直接編譯的混合建構設定 (定義 base_kernel
) 就只需要新增追蹤裝置符號清單的支援功能。您應使用 GKI 版本更新 ABI 定義。
另請參閱 Kleaf 的參考說明文件:支援 ABI 監控 (裝置)。
舊版核心版本
Android 13
建構指令幾乎與 Android 14 相同,但 ABI 格式為 XML,參考 ABI 表示法則為 common/android/abi_gki_aarch64.xml
。
Android 13 以下版本
如同 Android 13,ABI 格式為 XML。
較舊的核心會使用 build.sh
而非 Kleaf。如要監控 ABI,您應使用 build_abi.sh
,因為它會接受相同的環境變數,以便自訂 build.sh
的建構作業。例如:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
這會建構核心,並將 ABI 表示法擷取至 OUT_DIR
(預設為 out_abi
) 子目錄,相當於 Kleaf 的 //common:kernel_aarch64_abi_dist
目標 (請參閱「建構核心和 ABI 構件」)。
參考 ABI 表示法會儲存在 android/abi_gki_aarch64.xml
中,如 common/build.config.gki.aarch64
中 ABI_DEFINITION
變數所定義。
如果您需要更新核心 ABI 表示法,最方便的方法是使用 --update
和 --print-report
選項:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
會列印檔案與新產生的 ABI 之間的 ABI 差異。
--update
選項會覆寫參考 ABI 表示法。當您為已設定 KMI_SYMBOL_LIST
的裝置使用 BUILD_CONFIG
時,系統也會執行符號清單更新。