如何運行 ABI 監控

本節介紹如何建立 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 監控(設備)

較舊的核心版本

安卓13

建構指令與 Android 14 基本相同,只是 ABI 格式為 XML 並且參考 ABI 表示形式為common/android/abi_gki_aarch64.xml

Android 12 及更低版本

與 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時,它也會更新符號清單