نحوه اجرای ABI Monitoring

این بخش نحوه ساخت نمایندگی های 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 است.

اندروید 12 و پایین تر

همانطور که در اندروید 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 فهرست نمادها را به‌روزرسانی می‌کند.