این صفحه نحوه ساخت نمایشهای ABI هسته اندروید و اجرای مانیتورینگ ABI را شرح میدهد. این آموزش برای اندروید ۱۶ و بالاتر قابل اجرا است. برای نسخههای پایینتر، به بخش مانیتورینگ ABI نسخههای قبلی هسته مراجعه کنید.
همچنین به مستندات مرجع برای Kleaf: Support ABI monitoring (GKI) و Support ABI monitoring (Device) مراجعه کنید.
ساخت هسته و نمایش 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 به همراه گزارشهایی با فرمتهای دیگر تهیه میشود.
اتوماسیون باید از کد خروج دستور 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 بهروزرسانیشده میتواند در همان کامیتِ تغییر آپلود شود. تفاوتهای ABI از گزارش موجود در $DIST_DIR/abi_stgdiff/abi.report.short را در پیام کامیت لحاظ کنید.
نظارت بر ABI و اهداف دستگاه
مانیتورینگ ABI فقط باید برای اهداف ساخت هسته اصلی پیکربندی شود. پیکربندیهای ساخت ترکیبی (آنهایی که base_kernel را تعریف میکنند) که مستقیماً با هسته GKI کامپایل میشوند ، فقط باید پشتیبانی از ردیابی لیست نمادهای دستگاه را اضافه کنند . تعریف ABI باید با استفاده از ساخت GKI بهروزرسانی شود.
همچنین به مستندات مرجع برای Kleaf: Support ABI monitoring (Device) مراجعه کنید.
مانیتور ABI نسخههای قبلی کرنل (اندروید ۱۵ و پایینتر)
برای نسخههای قبلی هسته، دستورالعملهای ساخت و نظارت ABI به شرح زیر متفاوت است.
اندروید ۱۵ و ۱۴
دستورالعملها عمدتاً مشابه اندروید ۱۶ هستند، با این تفاوت که نمایش ABI مرجع، common/android/abi_gki_aarch64.stg است و $DIST_DIR به طور پیشفرض روی out_abi/kernel_aarch64/dist تنظیم شده است.
اندروید ۱۳
اندروید ۱۳ میتواند با Kleaf یا با اسکریپتهای ساخت قدیمی ساخته شود.
برای Kleaf، دستورالعملها مشابه اندروید ۱۴ هستند، با این تفاوت که فرمت ABI، XML است و نمایش مرجع ABI به common/android/abi_gki_aarch64.xml میباشد.
برای اسکریپتهای ساخت قدیمی، دستورالعملها مشابه اندروید ۱۲ هستند.
اندروید ۱۲ و پایینتر
فرمت ABI، XML است و نمایش مرجع ABI به common/android/abi_gki_aarch64.xml میباشد.
این کرنلها به جای Kleaf از build.sh استفاده میکنند. برای نظارت بر ABI باید build_abi.sh استفاده کنید که همان متغیرهای محیطی را برای سفارشیسازی build مانند 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 پیکربندی شده است ، لیست نمادها را بهروزرسانی میکند.