執行 ABI 監控

本頁面說明如何建構 Android 核心 ABI 表示法,並執行 ABI 監控。適用於 Android 16 以上版本。如需較低版本的資訊,請參閱「ABI 監控先前核心版本」。

另請參閱 Kleaf 的參考文件:支援 ABI 監控 (GKI)支援 ABI 監控 (裝置)

建構核心及其 ABI 表示法

下載 GKI 來源後,請執行下列指令,建構 GKI 核心和 ABI 構件:

tools/bazel run //common:kernel_aarch64_abi_dist

這個指令會建構目前的 ABI 表示法,並將其與已建構的核心和模組一起複製到 $DIST_DIR/abi.stg$DIST_DIR 預設為 out_abi/kernel_aarch64_abi_dist/dist

您可以在 -- 後面的指令結尾指定 ABI 工具的額外引數。舉例來說,如要變更 ABI 和建構構件,您可以使用 --dist_dir 選項:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

分析建構作業與參考表示法之間的 ABI 差異

在上述指令中執行的 //common:kernel_aarch64_abi_dist 目標會分析建構作業與位於 common/gki/aarch64/abi.stg 的參考表示法 (在 BUILD.bazel 中定義) 之間的任何 ABI 差異,並回報這些差異。這些差異會在建構作業結束時列印出來,如以下範例所示:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

列印報表來自位於 $DIST_DIR/abi_stgdiff/abi.report.short 的建構成果,以及其他格式的報表。

自動化作業應使用建構指令的結束代碼,如果發現差異,該代碼會是 0 以外的值。

請注意,開發階段分支 (包括 android-mainline) 沒有參考 ABI 表示法。否則 //common:kernel_aarch64_abi_dist 不會偵測到任何差異。

更新參考 ABI 表示法

任何影響核心 ABI 的變更 (例如符號清單更新),都必須反映在參考 ABI 表示法 (common/gki/aarch64/abi.stg,在 BUILD.bazel 中定義) 中。如要執行這項操作,請執行下列指令:

tools/bazel run //common:kernel_aarch64_abi_update

這個指令會執行「分析 ABI 差異」步驟中的所有操作,並更新來源中的參照表示法。更新後的 ABI 可在變更時一併提交。在提交訊息中,加入 $DIST_DIR/abi_stgdiff/abi.report.short 中報表的 ABI 差異。

ABI 監控和裝置目標

只需針對核心核心建構目標設定 ABI 監控功能。直接使用 GKI 核心編譯的混合式建構設定 (定義 base_kernel 的設定),只需要新增追蹤裝置符號清單的支援功能。您使用 GKI 版本更新 ABI 定義。

另請參閱 Kleaf 的參考說明文件:支援 ABI 監控 (裝置)

使用 ABI 監控先前核心版本 (Android 15 以下)

針對先前的核心版本,ABI 建構和監控指示如下所示。

Android 15 和 14

這些指示與 Android 16 大致相同,但參考 ABI 表示法為 common/android/abi_gki_aarch64.stg,而 $DIST_DIR 預設為 out_abi/kernel_aarch64/dist

Android 13

您可以使用 Kleaf 或舊版建構指令碼建構 Android 13。

針對 Kleaf,操作說明與 Android 14 相同,但 ABI 格式為 XML,參考 ABI 表示法則為 common/android/abi_gki_aarch64.xml

針對舊版建構指令碼,操作說明與 Android 12 相同。

Android 12 以下版本

ABI 格式為 XML,參考 ABI 表示法為 common/android/abi_gki_aarch64.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.aarch64ABI_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 時,系統也會執行符號清單更新