اجرای پایش ABI

این صفحه نحوه ساختن نمایش‌های ABI هسته Android و اجرای پایش 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 و ساخت آرتیفکت‌ها، می‌توانید از گزینه --destdir استفاده کنید:

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

تفاوت‌های ABI بین ساخت و نمایش مرجع را تحلیل کنید

هدف //common:kernel_aarch64_abi_dist که در دستور قبلی اجرا شده است، هرگونه تفاوت ABI را که بین ساختار و نمایش مرجع موجود در common/gki/aarch64/abi.stg (تعریف‌شده در BUILD.bazel) پیدا شود تجزیه‌وتحلیل و گزارش می‌کند. این تفاوت‌ها در پایان ساختار چاپ می‌شوند، همان‌طور که در مثال زیر نشان داده شده است:

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

گزارش چاپ‌شده از مصنوع ساخت واقع در $DIST_DIR/abi_stgdiff/abi.report.short به‌همراه گزارش‌ها در قالب‌های دیگر می‌آید.

خودکارسازی باید از کد خروج فرمان ساخت استفاده کند که درصورت یافتن تفاوت‌ها غیرصفر است.

توجه داشته باشید که شاخه‌های مرحله توسعه، ازجمله 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 به‌روزشده می‌تواند در همان تغییر تعهد بارگذاری شود. تفاوت‌های ABI را از گزارش در $DIST_DIR/abi_stgdiff/abi.report.short در پیام تعهد بگنجانید.

پایش رابط دودویی نرم‌افزار و هدف‌های دستگاه

پایش ABI فقط باید برای هدف‌های ساخت هسته اصلی پیکربندی شود. پیکربندی‌های ساخت مختلط (پیکربندی‌هایی که base_kernel را تعریف می‌کنند) که مستقیماً با هسته GKI کامپایل می‌شوند فقط باید پشتیبانی از ردیابی فهرست نمادهای دستگاه را اضافه کنند. تعریف ABI باید بااستفاده از ساخت GKI به‌روز شود.

همچنین به اسناد مرجع 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

‫Android 13 ممکن است با Kleaf یا با دستورگان ساخت قدیمی ساخته شود.

برای 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

این هسته‌ها به‌جای Kleaf از build.sh استفاده می‌کنند. برای پایش ABI باید از build_abi.sh استفاده کنید که همان متغیرهای محیطی را برای سفارشی‌سازی ساختمان build.sh می‌پذیرد. برای مثال:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

این کار باعث ساختن هسته و استخراج نمایش ABI در زیرشاخه OUT_DIR (که به‌طور پیش‌فرض out_abi است) می‌شود و معادل هدف //common:kernel_aarch64_abi_dist در Kleaf است (به ساختن هسته و آرتیفکت‌های ABI مراجعه کنید).

نمایش ABI مرجع در android/abi_gki_aarch64.xml ذخیره می‌شود همان‌طور که متغیر ABI_DEFINITION در common/build.config.gki.aarch64 تعریف کرده است.

اگر نیاز دارید نمایش ABI هسته را به‌روز کنید، راحت‌ترین راه استفاده از گزینه‌های --update و --print-report است:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report تفاوت‌های ABI بین فایل موجود و ABI جدیداً تولیدشده را چاپ می‌کند.

گزینه --update بازنمایی ABI مرجع را ملغی می‌کند. همچنین هنگام استفاده از BUILD_CONFIG برای دستگاهی با KMI_SYMBOL_LIST پیکربندی‌شده، فهرست نماد به‌روزرسانی را انجام می‌دهد.