این صفحه نحوه ساخت نمایندگی های ABI هسته اندروید و اجرای نظارت ABI را شرح می دهد. برای اندروید 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
، اجرا شده در دستور بالا، هر گونه تفاوت ABI یافت شده بین ساخت و نمایش مرجع واقع در common/android/abi_gki_aarch64.stg
(تعریف شده در BUILD.bazel
) را تجزیه و تحلیل و گزارش می کند. این تفاوت ها همانطور که در مثال زیر نشان داده شده است در انتهای ساخت چاپ می شوند:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
گزارش چاپ شده از build artifact واقع در out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
همراه با گزارشهایی در قالبهای دیگر میآید.
اتوماسیون باید از کد خروج دستور build استفاده کند که در صورت یافتن تفاوت، غیر صفر است.
توجه داشته باشید که شاخه های فاز توسعه ، از جمله 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 به روز شده را می توان در همان commit تغییر آپلود کرد. تفاوت های ABI از گزارش را در $DIST_DIR/abi.report.short
در پیام commit درج کنید.
نظارت ABI و اهداف دستگاه
نظارت ABI فقط باید برای اهداف ساخت هسته اصلی پیکربندی شود. پیکربندیهای ساخت مختلط (پیکربندیهایی که base_kernel
را تعریف میکنند) که مستقیماً با هسته GKI کامپایل میشوند ، فقط نیاز به اضافه کردن پشتیبانی برای ردیابی لیست نمادهای دستگاه دارند . تعریف ABI باید با استفاده از ساخت GKI به روز شود.
همچنین به مستندات مرجع برای Kleaf: پشتیبانی از نظارت ABI (دستگاه) مراجعه کنید.
نسخه های هسته قدیمی تر
اندروید 13
دستورالعملهای ساخت اکثراً مانند Android 14 هستند با این تفاوت که فرمت ABI XML است و نمایش ABI مرجع common/android/abi_gki_aarch64.xml
است.
اندروید 13 و پایین تر
همانطور که در اندروید 13، فرمت ABI 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 مرجع همانطور که توسط متغیر ABI_DEFINITION
در common/build.config.gki.aarch64
تعریف شده است در android/abi_gki_aarch64.xml
ذخیره می شود.
اگر نیاز به به روز رسانی نمایندگی 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
فهرست نمادها را بهروزرسانی میکند.