تصویر سیستم عمومی (GSI) تصویر سیستمی با پیکربندیهای تنظیمشده برای دستگاههای Android است. این برنامه بهعنوان پیادهسازی Android خالص با کد «پروژه منبع باز Android» (AOSP) اصلاحنشده درنظر گرفته میشود که هر دستگاه Android دارای Android نسخه ۹ یا بالاتر میتواند آن را با موفقیت اجرا کند.
از GSI برای اجرای آزمایشهای VTS و CTS-on-GSI استفاده میشود. تصویر سیستم دستگاه Android با GSI جایگزین میشود و سپس با مجموعه آزمایش فروشنده (VTS) و مجموعه آزمایش سازگاری (CTS) آزمایش میشود تا اطمینان حاصل شود که دستگاه رابطهای فروشنده را بهدرستی با جدیدترین نسخه Android پیادهسازی میکند.
برای شروع کار با «میانآگهیهای جهانی»، بخشهای زیر را برای جزئیات مربوط به پیکربندیهای میانآگهیهای جهانی (و انحرافهای مجاز) و انواع آن مرور کنید. وقتی آماده استفاده از GSI هستید، GSI را برای هدف دستگاهتان بارگیری و ایجاد کنید، سپس GSI را در دستگاه Android فلش کنید.
پیکربندی و تغییرات GSI
GSI کنونی Android پیکربندی زیر را دارد:
- زیر. GSI شامل پشتیبانی کامل از تغییرات معماری مبتنی بر AIDL/HIDL (که بهعنوان Treble نیز شناخته میشود)، ازجمله پشتیبانی از میاناهای AIDL و میاناهای HIDL است. میتوانید از GSI در هر دستگاه Android که از میاناهای فروشنده AIDL/HIDL استفاده میکند استفاده کنید. (برای جزئیات بیشتر، منابع معماری را ببینید.)
- سیستم فایل. «تصویر سیستم عمومی» از سیستم فایل ext4 استفاده میکند.
Android GSI کنونی شامل تفاوتهای اصلی زیر است:
- معماری CPU. پشتیبانی از دستورالعملهای مختلف واحد پردازش مرکزی (ARM، x86، و غیره) و بیت واحد پردازش مرکزی (۳۲ بیت یا ۶۴ بیت).
هدفهای GSI برای آزمایشهای انطباق Treble
GSI مورداستفاده برای آزمایش سازگاری براساس نسخه Android که دستگاه با آن راهاندازی میشود تعیین میشود.
| نوع دستگاه | ساختن هدف |
|---|---|
| دستگاههایی که با Android 15 عرضه میشوند | gsi_$arch-user (امضاشده) |
| دستگاههایی که با Android 14 عرضه میشوند | gsi_$arch-user (امضاشده) |
| دستگاههایی که با Android 13 عرضه میشوند | gsi_$arch-user (امضاشده) |
| دستگاههایی که با Android 12L عرضه میشوند | gsi_$arch-user (امضاشده) |
| دستگاههایی که با Android 12 عرضه میشوند | gsi_$arch-user (امضاشده) |
| دستگاههایی که با Android 11 عرضه میشوند | gsi_$arch-user (امضاشده) |
همه «تصاویر سیستم عمومی» از پایگاه کد Android 12 ساخته شدهاند و هر معماری واحد پردازش مرکزی دارای یک دودویی «تصویر سیستم عمومی» متناظر است (فهرست هدفهای ساخت را در ساختن تصاویر سیستم عمومی ببینید).
تغییرات Android 12 GSI
دستگاههایی که با Android 12 عرضه میشوند یا به آن بهروزرسانی میشوند باید از GSIهای Android 12 برای آزمایش مطابقت استفاده کنند. این شامل تغییرات عمده زیر نسبت به GSIهای قبلی است:
- نام هدف. نام هدف GSI برای آزمایشهای
انطباق به
gsi_$archتغییر کرده است. «شاخص ثانویه سراسری» با نام هدفaosp_$archبرای توسعهدهندگان برنامه Android حفظ میشود. طرح آزمایشCTS-on-GSIبرای آزمایش کردن میانای فروشنده نیز کاهش یافته است. - GSI قدیمی بهتدریج متوقف میشود. GSI 12 راهحلهای موقتی را که برای دستگاههای Android 8.0 یا 8.1 که کاملاً Treblized نیستند درنظر گرفته شده است برمیدارد.
- Userdebug SEPolicy. GSI
gsi_$archحاویuserdebug_plat_sepolicy.cilاست. هنگام نصبvendor_boot-debug.imgمخصوص سازنده اصلی تجهیزات یاboot-debug.img،/system/bin/inituserdebug_plat_sepolicy.cilرا از GSIsystem.imgبار میکند. برای جزئیات، به آزمایش VTS با Debug Ramdisk مراجعه کنید.
تغییرات Android 11 GSI
دستگاههایی که با Android 11 عرضه میشوند یا به Android 11 بهروزرسانی میشوند باید از Android 11 GSI برای آزمایش سازگاری استفاده کنند. این شامل تغییرات عمده زیر از «میانههای سرویس Google» قبلی میشود:
- محتوای system_ext. Android 11
بخش جدیدی را تعریف میکند
system_ext. GSI محتوای افزونه سیستم را در پوشهsystem/system_extقرار میدهد. - APEXes. GSI حاوی APEXهای فشرده و مسطح است.
اینکه از کدام یک استفاده شود در زمان اجرا توسط مشخصه سیستم
ro.apex.updatableدر پارتیشن فروشنده تعیین میشود. برای جزئیات بیشتر، به پیکربندی سیستم برای پشتیبانی از بهروزرسانیهای APEX مراجعه کنید.
تغییرات Android 10 GSI
دستگاههایی که با Android 10 عرضه میشوند یا به Android 10 بهروزرسانی میشوند باید از Android 10 GSI برای آزمایشهای انطباق استفاده کنند. این شامل تغییرات عمده زیر از «میانههای سرویس Google» قبلی میشود:
- ساخت کاربر. GSI دارای ساخت کاربر از Android 10 است. در Android 10، میتوان از ساخت کاربر GSI در آزمایش انطباق CTS-on-GSI/VTS استفاده کرد. برای جزئیات، به آزمایش VTS با دیسک مجازی اشکالزدایی مراجعه کنید.
- قالب تجزیهنشده. GSI با هدفهای
aosp_$archبا قالب غیرپراکنده ساخته شده است. درصورت نیاز، میتوانید ازimg2simgبرای تبدیل GSI غیرتنک به قالب تنک استفاده کنید. - System-as-root (سیستم بهعنوان ریشه). هدف ساخت GSI قدیمی بهنام
aosp_$arch_aبهتدریج حذف شده است. برای دستگاههایی که از Android 8 یا 8.1 به Android 10 با ramdisk و non-system-as-root ارتقا یافتهاند، از GSI قدیمیaosp_$arch_abاستفاده کنید.initارتقایافته در ramdisk از OEM system.img با چیدمان system-as-root پشتیبانی میکند. - راهاندازی درستیسنجیشده. بااستفاده از GSI، فقط باید قفل دستگاه را باز کنید. نیازی به غیرفعال کردن راهاندازی درستیسنجیشده نیست.
تغییرات GSI در Android 9
دستگاههایی که با Android 9 عرضه میشوند یا به آن بهروزرسانی میشوند باید از GSIهای Android 9 برای آزمایش مطابقت استفاده کنند. این شامل تغییرات عمده زیر از «میانههای سرویس Google» قبلی میشود:
- GSI و شبیهساز را ادغام میکند. GSI از تصاویر سیستم محصولات شبیهساز، برای مثال،
aosp_arm64وaosp_x86ساخته میشود. - System-as-root (سیستم بهعنوان ریشه). در نسخههای قبلی Android، دستگاههایی که از بهروزرسانیهای A/B پشتیبانی نمیکردند میتوانستند تصویر سیستم را در
دایرکتوری
/systemنصب کنند. در Android 9، ریشه تصویر سیستم بهعنوان ریشه دستگاه نصب میشود. - میانای چسباننده ۶۴ بیتی. در Android 8.x، از میانای binder ۳۲ بیتی در GSI ۳۲ بیتی استفاده میشد. Android 9 از میانای چسباننده ۳۲ بیتی پشتیبانی نمیکند، بنابراین هم GSIهای ۳۲ بیتی و هم GSIهای ۶۴ بیتی از میانای چسباننده ۶۴ بیتی استفاده میکنند.
- اجرای VNDK. در Android 8.1، VNDK اختیاری بود.
از Android 9 به بعد، VNDK اجباری است، بنابراین
BOARD_VNDK_VERSIONباید تنظیم شود. - خصوصیت سیستم سازگار. Android
۹ بررسی دسترسی را برای دارایی سیستم سازگار (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true) فعال میکند.
Android 9 تغییرات Keymaster
در نسخههای قبلی Android، دستگاههایی که Keymaster 3 یا نسخههای پایینتر را پیادهسازی میکردند ملزم بودند تأیید کنند که اطلاعات نسخه (ro.build.version.release و ro.build.version.security_patch) گزارششده توسط سیستم درحال اجرا با اطلاعات نسخه گزارششده توسط راهانداز سیستم مطابقت دارد. این اطلاعات معمولاً از سرصفحه تصویر راهاندازی بهدست میآمد.
در Android 9 و بالاتر، این الزام تغییر کرده است تا به فروشندگان امکان دهد GSI را راهاندازی کنند. بهطور دقیق، Keymaster نباید درستیسنجی را انجام دهد زیرا اطلاعات نسخه گزارششده توسط GSI ممکن است با اطلاعات نسخه گزارششده توسط بارکننده فروشنده مطابقت نداشته باشد. برای دستگاههایی که Keymaster 3 یا نسخههای پایینتر را پیادهسازی میکنند، فروشندگان باید پیادهسازی Keymaster را تغییر دهند تا درستیسنجی را رد کنند (یا به Keymaster 4 ارتقا دهند). برای جزئیات مربوط به Keymaster، به Keystore با پشتیبانی سختافزاری مراجعه کنید.
بارگیری GSI
میتوانید «تصویر سیستم عمومی» ازپیشساخته را از وبسایت ادغام مداوم (CI) «پروژه متنباز Android» (AOSP) در ci.android.com بارگیری کنید. اگر نوع «تصویر سیستم عمومی» برای پلاتفرم سختافزاری شما برای بارگیری دردسترس نیست، برای جزئیات مربوط به ساختن «تصویر سیستم عمومی» برای اهداف خاص به بخش زیر مراجعه کنید.
ساختن GSI
از Android 9، هر نسخه Android شاخه GSI بهنام DESSERT-gsi در AOSP دارد (برای مثال، android12-gsi شاخه GSI در Android 12 است). شاخههای GSI شامل محتوای Android با
همه وصلههای امنیتی و
وصلههای GSI اعمالشده است.
برای ساختن GSI، درخت منبع Android را با
بارگیری از شاخه GSI و
انتخاب هدف ساخت GSI راهاندازی کنید. از جدولهای هدف ساخت زیر برای تعیین نسخه صحیح GSI
برای دستگاهتان استفاده کنید. پساز تکمیل ساخت، GSI تصویر سیستم (یعنی system.img) است و در پوشه برونداد
out/target/product/generic_arm64 نشان داده میشود.
برای مثال، برای ساختن هدف ساخت GSI
gsi_arm64-userdebug در شاخه GSI android12-gsi،
فرمانهای زیر را اجرا کنید.
$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi $ repo sync -cq $ source build/envsetup.sh $ lunch gsi_arm64-userdebug $ make -j4
هدفهای ساخت GSI در Android
هدفهای ساخت GSI زیر برای دستگاههایی است که با Android نسخه ۹ یا بالاتر عرضه میشوند.
| نام GSI | معماری واحد پردازش مرکزی | تعداد بیتهای میانای Binder | سیستم بهعنوان ریشه | ساختن هدف |
|---|---|---|---|---|
gsi_arm |
مجهز کردن | 32 | س | gsi_arm-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | س | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | س | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | س | gsi_x86_64-usergsi_x86_64-userdebug |
الزامات فلش کردن GSI
دستگاههای Android میتوانند طراحیهای متفاوتی داشته باشند، بنابراین هیچ فرمان عمومی یا مجموعه دستورالعملهایی برای فلش کردن GSI وجود ندارد که برای همه دستگاهها اعمال شود. برای دریافت دستورالعملهای دقیق فلش کردن، با سازنده دستگاه Android تماس بگیرید. از مراحل زیر بهعنوان یک دستورالعمل کلی استفاده کنید:
- مطمئن شوید دستگاه موارد زیر را داشته باشد:
- زیر شده
- روشی برای باز کردن قفل دستگاهها (تا بتوان آنها را بااستفاده از
fastbootفلش کرد) - وضعیت باز برای اینکه ازطریق
fastbootقابلنصب باشد (برای اطمینان از اینکه جدیدترین نسخهfastbootرا دارید، آن را از درخت منبع Android بسازید.)
- پارتیشن سیستم فعلی را پاک کنید، سپس GSI را در پارتیشن سیستم فلش کنید.
- دادههای کاربر را پاک کنید و دادههای دیگر پارتیشنهای ضروری (برای مثال، دادههای کاربر و پارتیشنهای سیستم) را پاک کنید.
- دستگاه را بازراهاندازی کنید.
برای مثال، برای نصب GSI در هر دستگاه Pixel:
- در حالت
fastbootراهاندازی کنید و قفل راهانداز سیستم را باز کنید. - دستگاههای پشتیبانیکننده
fastbootdهمچنین باید با انجام این کارها درfastbootdراهاندازی شوند:$ fastboot reboot fastboot
- GSI را در پارتیشن سیستم پاک و نصب کنید:
$ fastboot erase system $ fastboot flash system system.img
- اگر دستگاهتان از «چارچوب مجازی Android» پشتیبانی میکند، «سفتافزار ماشین مجازی محافظتشده» را فلش کنید:
$ fastboot flash pvmfw pvmfw.img
- دادههای کاربر را پاک کنید و دادهها را از دیگر پارتیشنهای ضروری پاک کنید (برای
مثال، دادههای کاربر و پارتیشنهای سیستم):
$ fastboot -w
- بازراهاندازی مجدد در bootloader:
$ fastboot reboot-bootloader
- درستیسنجی «راهاندازی درستیسنجیشده» را هنگام نوشتن vbmeta ارائهشده غیرفعال کنید:
$ fastboot --disable-verification flash vbmeta vbmeta.img
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition')
fastboot: error: Command failed$ fastboot delete-logical-partition product_a
_a باید با شناسه جایگاه پارتیشن سیستم مطابقت داشته باشد،
مانند system_a در این مثال.
همیاری در GSIs
Android از همیاریهای شما در توسعه GSI استقبال میکند. میتوانید مشارکت کنید و به بهبود GSI کمک کنید:
- درحال ایجاد وصله GSI.
DESSERT-gsiشاخه توسعه نیست و فقط cherrypick را از شاخه جدیدترین نسخه AOSP (android17-release) میپذیرد، بنابراین برای ارسال وصله GSI، باید:- وصله را به شاخه
AOSP
android17-releaseارسال کنید. - وصله را برای
DESSERT-gsiانتخاب کنید. - برای بررسی cherrypick، گزارش اشکال ثبت کنید.
- وصله را به شاخه
AOSP
- گزارش کردن اشکالات GSI یا ارائه پیشنهادهای دیگر. دستورالعملهای گزارش کردن اشکالات را مرور کنید، سپس اشکالات تصویر سیستم عمومی را مرور یا ثبت کنید.
نکتهها
تغییر حالت نوار پیمایش بااستفاده از adb
هنگام راهاندازی با GSI، حالت نوار پیمایش با ملغی کردن فروشنده پیکربندی میشود. میتوانید حالت نوار پیمایش را با اجرای دستور adb زیر در زمان اجرا تغییر دهید.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
که در آن mode میتواند threebutton، twobutton،
gestural، و غیره باشد.