تصاویر سیستم عمومی

تصویر سیستم عمومی (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/init userdebug_plat_sepolicy.cil را از GSI system.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-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 س gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 س gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 س gsi_x86_64-user
gsi_x86_64-userdebug

الزامات فلش کردن GSI

دستگاه‌های Android می‌توانند طراحی‌های متفاوتی داشته باشند، بنابراین هیچ فرمان عمومی یا مجموعه دستورالعمل‌هایی برای فلش کردن GSI وجود ندارد که برای همه دستگاه‌ها اعمال شود. برای دریافت دستورالعمل‌های دقیق فلش کردن، با سازنده دستگاه Android تماس بگیرید. از مراحل زیر به‌عنوان یک دستورالعمل کلی استفاده کنید:

  1. مطمئن شوید دستگاه موارد زیر را داشته باشد:
    • زیر شده
    • روشی برای باز کردن قفل دستگاه‌ها (تا بتوان آن‌ها را بااستفاده از fastboot فلش کرد)
    • وضعیت باز برای اینکه ازطریق fastboot قابل‌نصب باشد (برای اطمینان از اینکه جدیدترین نسخه fastboot را دارید، آن را از درخت منبع Android بسازید.)
  2. پارتیشن سیستم فعلی را پاک کنید، سپس GSI را در پارتیشن سیستم فلش کنید.
  3. داده‌های کاربر را پاک کنید و داده‌های دیگر پارتیشن‌های ضروری (برای مثال، داده‌های کاربر و پارتیشن‌های سیستم) را پاک کنید.
  4. دستگاه را بازراه‌اندازی کنید.

برای مثال، برای نصب GSI در هر دستگاه Pixel:

  1. در حالت fastboot راه‌اندازی کنید و قفل راه‌انداز سیستم را باز کنید.
  2. دستگاه‌های پشتیبانی‌کننده fastbootd همچنین باید با انجام این کارها در fastbootd راه‌اندازی شوند:
    $ fastboot reboot fastboot
  3. ‫GSI را در پارتیشن سیستم پاک و نصب کنید:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. اگر دستگاهتان از «چارچوب مجازی Android» پشتیبانی می‌کند، «سفت‌افزار ماشین مجازی محافظت‌شده» را فلش کنید:
    $ fastboot flash pvmfw pvmfw.img
    
  5. داده‌های کاربر را پاک کنید و داده‌ها را از دیگر پارتیشن‌های ضروری پاک کنید (برای مثال، داده‌های کاربر و پارتیشن‌های سیستم):
    $ fastboot -w
  6. بازراه‌اندازی مجدد در bootloader:
    $ fastboot reboot-bootloader
  7. درستی‌سنجی «راه‌اندازی درستی‌سنجی‌شده» را هنگام نوشتن vbmeta ارائه‌شده غیرفعال کنید:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  8. Reboot:
    $ fastboot reboot
در دستگاه‌های Android 10 یا جدیدتر که پارتیشن‌های سیستم کوچک‌تری دارند، پیام خطای زیر ممکن است هنگام فلش کردن GSI ظاهر شود:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
از فرمان زیر برای حذف کردن پارتیشن محصول و آزاد کردن فضا برای پارتیشن سیستم استفاده کنید. این کار فضای اضافی برای فلش کردن GSI فراهم می‌کند:
$ fastboot delete-logical-partition product_a
پسوند _a باید با شناسه جایگاه پارتیشن سیستم مطابقت داشته باشد، مانند system_a در این مثال.

همیاری در GSIs

‫Android از همیاری‌های شما در توسعه GSI استقبال می‌کند. می‌توانید مشارکت کنید و به بهبود GSI کمک کنید:

  • درحال ایجاد وصله GSI. DESSERT-gsi شاخه توسعه نیست و فقط cherrypick را از شاخه جدیدترین نسخه AOSP‏ (android17-release) می‌پذیرد، بنابراین برای ارسال وصله GSI، باید:
    1. وصله را به شاخه AOSP android17-release ارسال کنید.
    2. وصله را برای DESSERT-gsi انتخاب کنید.
    3. برای بررسی cherrypick، گزارش اشکال ثبت کنید.
  • گزارش کردن اشکالات GSI یا ارائه پیشنهادهای دیگر. دستورالعمل‌های گزارش کردن اشکالات را مرور کنید، سپس اشکالات تصویر سیستم عمومی را مرور یا ثبت کنید.

نکته‌ها

تغییر حالت نوار پیمایش بااستفاده از adb

هنگام راه‌اندازی با GSI، حالت نوار پیمایش با ملغی کردن فروشنده پیکربندی می‌شود. می‌توانید حالت نوار پیمایش را با اجرای دستور adb زیر در زمان اجرا تغییر دهید.

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

که در آن mode می‌تواند threebutton، twobutton، gestural، و غیره باشد.