این صفحه نحوه ساخت نمایندگی های ABI هسته اندروید و اجرای نظارت ABI را شرح می دهد. برای اندروید 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
، اجرا شده در دستور قبلی، هرگونه تفاوت 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
همراه با گزارشهایی در قالبهای دیگر میآید.
اتوماسیون باید از کد خروج دستور build استفاده کند که در صورت یافتن تفاوت، غیر صفر است.
توجه داشته باشید که شاخه های فاز توسعه ، از جمله 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 به روز شده را می توان در همان commit تغییر آپلود کرد. تفاوت های ABI از گزارش را در $DIST_DIR/abi_stgdiff/abi.report.short
در پیام commit درج کنید.
نظارت ABI و اهداف دستگاه
نظارت ABI فقط باید برای اهداف ساخت هسته اصلی پیکربندی شود. پیکربندیهای ساخت مختلط (پیکربندیهایی که base_kernel
تعریف میکنند) که مستقیماً با هسته GKI کامپایل میشوند ، فقط نیاز به اضافه کردن پشتیبانی برای ردیابی لیست نمادهای دستگاه دارند . تعریف ABI باید با استفاده از ساخت GKI به روز شود.
همچنین به مستندات مرجع برای Kleaf: پشتیبانی از نظارت ABI (دستگاه) مراجعه کنید.
مانیتور ABI نسخه های هسته قبلی (اندروید 15 و پایین تر)
برای نسخههای هسته قبلی، دستورالعملهای ساخت و نظارت ABI به شرح زیر متفاوت است.
اندروید 15 و 14
دستورالعملها عمدتاً مشابه Android 16 هستند، با این تفاوت که نمایش ABI مرجع common/android/abi_gki_aarch64.stg
است و $DIST_DIR
پیشفرض out_abi/kernel_aarch64/dist
.
اندروید 13
اندروید 13 ممکن است با Kleaf یا با اسکریپت های ساخت قدیمی ساخته شود.
برای Kleaf، دستورالعملها مانند Android 14 است، با این تفاوت که فرمت ABI XML است و نمایش ABI مرجع common/android/abi_gki_aarch64.xml
است.
برای اسکریپت های ساخت قدیمی، دستورالعمل ها مانند اندروید 12 است.
اندروید 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 مرجع همانطور که توسط متغیر 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
، فهرست نمادها را بهروزرسانی میکند.