อิมเมจระบบทั่วไป

รูปภาพระบบทั่วไป (GSI) คือรูปภาพระบบที่มีการกําหนดค่าที่ปรับแล้วสําหรับอุปกรณ์ Android ซึ่งถือว่าเป็นการใช้งาน Android เวอร์ชันเต็มที่มีโค้ดโครงการโอเพนซอร์ส Android (AOSP) ที่ไม่ได้แก้ไข ซึ่งอุปกรณ์ Android ทุกรุ่นที่ใช้ Android 9 ขึ้นไปจะใช้งานได้

GSI ใช้สำหรับการเรียกใช้การทดสอบ VTS และ CTS ใน GSI ระบบจะแทนที่อิมเมจระบบของอุปกรณ์ Android ด้วย GSI แล้วทดสอบด้วย ชุดทดสอบของผู้ให้บริการ (VTS) และ ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) เพื่อให้แน่ใจว่าอุปกรณ์ใช้อินเทอร์เฟซของผู้ให้บริการกับ Android เวอร์ชันล่าสุดได้อย่างถูกต้อง

หากต้องการเริ่มต้นใช้งาน GSI โปรดดูรายละเอียดการกำหนดค่า GSI (และความแปรปรวนที่อนุญาต) และประเภทในส่วนต่อไปนี้ เมื่อพร้อมที่จะใช้ GSI แล้ว ให้ดาวน์โหลดและสร้าง GSI สำหรับอุปกรณ์เป้าหมาย จากนั้นแฟลช GSI ไปยังอุปกรณ์ Android

การกําหนดค่าและความแตกต่างของ GSI

GSI ของ Android ปัจจุบันมีการกําหนดค่าดังต่อไปนี้

GSI ของ Android ปัจจุบันมีความแปรปรวนหลักๆ ดังต่อไปนี้

  • สถาปัตยกรรม CPU การรองรับคำสั่ง CPU ที่แตกต่างกัน (ARM, x86 ฯลฯ) และจำนวนบิตของ CPU (32 บิตหรือ 64 บิต)

เป้าหมาย 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 (ลงนามแล้ว)

GSI ทั้งหมดสร้างขึ้นจากโค้ดเบส Android 12 และสถาปัตยกรรม CPU แต่ละแบบจะมีไฟล์ GSI ที่เป็นไบนารีที่สอดคล้องกัน (ดูรายการเป้าหมายการสร้างในการสร้าง GSI)

การเปลี่ยนแปลง GSI ของ Android 12

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 12 ต้องใช้ GSI ของ Android 12 ในการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า

  • ชื่อเป้าหมาย เปลี่ยนชื่อเป้าหมาย GSI สำหรับการทดสอบการปฏิบัติตามข้อกำหนดเป็น gsi_$arch ระบบจะเก็บ GSI ที่มีชื่อเป้าหมาย aosp_$arch ไว้สำหรับนักพัฒนาแอป Android นอกจากนี้ ระบบยังลดจำนวนCTS-on-GSIในแผนทดสอบสำหรับการทดสอบอินเทอร์เฟซของผู้ให้บริการด้วย
  • เราจะเลิกใช้งาน GSI รุ่นเดิม GSI 12 นำวิธีแก้ปัญหาที่รองรับอุปกรณ์ Android 8.0 หรือ 8.1 ที่ไม่ได้ใช้ Treble อย่างเต็มรูปแบบออก
  • Userdebug SEPolicy GSI gsi_$arch มี userdebug_plat_sepolicy.cil เมื่อแฟลช vendor_boot-debug.img หรือ boot-debug.img สำหรับ OEM โดยเฉพาะ /system/bin/init จะโหลด userdebug_plat_sepolicy.cil จาก GSI system.img ดูรายละเอียดได้ในการทดสอบ VTS ด้วย Debug Ramdisk

การเปลี่ยนแปลง GSI ของ Android 11

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 11 ต้องใช้ GSI ของ Android 11 ในการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า

  • เนื้อหา system_ext Android 11 กําหนดพาร์ติชันใหม่ system_ext GSI จะใส่เนื้อหาส่วนขยายของระบบไว้ในโฟลเดอร์ system/system_ext
  • APEXes GSI มีทั้ง APEX ที่ผสานและบีบอัด ระบบจะกำหนดว่าจะใช้เวอร์ชันใดโดยดูจากพร็อพเพอร์ตี้ระบบ ro.apex.updatable ในพาร์ติชันของผู้ให้บริการขณะรันไทม์ โปรดดูรายละเอียดที่หัวข้ออ้างอิง การกำหนดค่าระบบเพื่อรองรับการอัปเดต APEX

การเปลี่ยนแปลง GSI ของ Android 10

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 10 ต้องใช้ GSI ของ Android 10 ในการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า

  • บิลด์ผู้ใช้ GSI มีบิลด์สำหรับผู้ใช้จาก Android 10 ใน Android 10 คุณสามารถใช้ GSI ของบิลด์ผู้ใช้ในการทดสอบการปฏิบัติตามข้อกำหนด CTS-on-GSI/VTS ได้ ดูรายละเอียดได้ในการทดสอบ VTS ด้วย RAMdisk ที่ใช้แก้ไขข้อบกพร่อง
  • รูปแบบที่ไม่มีการแยกวิเคราะห์ GSI ที่มีเป้าหมาย aosp_$arch สร้างขึ้นด้วยรูปแบบที่ไม่มีการแยกวิเคราะห์ คุณสามารถใช้ img2simg เพื่อแปลง GSI ที่ไม่ได้แยกวิเคราะห์เป็นรูปแบบเบาบางได้หากจำเป็น
  • System-as-root เป้าหมายการสร้าง GSI รุ่นเดิมที่มีชื่อว่า aosp_$arch_a ได้เลิกใช้งานแล้ว สำหรับอุปกรณ์ที่อัปเกรดจาก Android 8 หรือ 8.1 เป็น Android 10 ที่มี ramdisk และไม่ใช่ระบบเป็นรูท ให้ใช้ GSI เดิม aosp_$arch_ab init ที่อัปเกรดใน RAM disk รองรับ system.img ของ OEM ที่มีเลย์เอาต์ระบบเป็นรูท
  • ยืนยันการบูต เมื่อใช้ GSI คุณจะต้องปลดล็อกอุปกรณ์เท่านั้น คุณไม่จำเป็นต้องปิดใช้การเริ่มระบบที่ยืนยัน

การเปลี่ยนแปลง GSI ของ Android 9

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 9 ต้องใช้ GSI ของ Android 9 สำหรับการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า

  • ผสาน GSI กับโปรแกรมจำลอง GSI สร้างขึ้นจากภาพระบบของผลิตภัณฑ์โปรแกรมจำลอง เช่น aosp_arm64 และ aosp_x86
  • System-as-root ใน Android เวอร์ชันเก่า อุปกรณ์ที่ไม่รองรับการอัปเดต A/B จะติดตั้งภาพระบบได้ในส่วนไดเรกทอรี /system ใน Android 9 ระบบจะเมานต์รูทของภาพระบบเป็นรูทของอุปกรณ์
  • อินเทอร์เฟซ Binder แบบ 64 บิต ใน Android 8.x GSI แบบ 32 บิตใช้อินเทอร์เฟซ Binder แบบ 32 บิต Android 9 ไม่รองรับอินเทอร์เฟซ Binder แบบ 32 บิต ดังนั้นทั้ง GSI 32 บิตและ GSI 64 บิตจะใช้อินเทอร์เฟซ Binder แบบ 64 บิต
  • การบังคับใช้ VNDK ใน Android 8.1 คุณจะใช้ VNDK หรือไม่ก็ได้ ตั้งแต่ Android 9 เป็นต้นไป คุณต้องใช้ VNDK ดังนั้นจึงต้องตั้งค่า BOARD_VNDK_VERSION
  • พร็อพเพอร์ตี้ของระบบที่เข้ากันได้ Android 9 เปิดใช้การตรวจสอบสิทธิ์เข้าถึงสำหรับพร็อพเพอร์ตี้ของระบบ (PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true) ที่เข้ากันได้

Android 9 การเปลี่ยนแปลง Keymaster

ใน Android เวอร์ชันเก่า อุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่าจำเป็นต้องยืนยันว่าข้อมูลเวอร์ชัน (ro.build.version.release และ ro.build.version.security_patch) ที่รายงานโดยระบบที่ทำงานอยู่ตรงกับข้อมูลเวอร์ชันที่รายงานโดย Bootloader โดยปกติแล้ว ข้อมูลดังกล่าวจะมาจากส่วนหัวของภาพสำหรับบูต

ใน Android 9 ขึ้นไป ข้อกำหนดนี้เปลี่ยนแปลงไปเพื่อให้ผู้ให้บริการบูต GSI ได้ กล่าวโดยละเอียดคือ Keymaster ไม่ควรดำเนินการตรวจสอบเนื่องจากข้อมูลเวอร์ชันที่ GSI รายงานอาจไม่ตรงกับข้อมูลเวอร์ชันที่รายงานโดยโปรแกรมบูตของผู้ให้บริการ สำหรับอุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่า ผู้ให้บริการต้องแก้ไขการใช้งาน Keymaster เพื่อข้ามการยืนยัน (หรืออัปเกรดเป็น Keymaster 4) โปรดดูรายละเอียดเกี่ยวกับ Keymaster ที่หัวข้อคีย์สโตร์ที่สำรองข้อมูลไว้ในฮาร์ดแวร์

ดาวน์โหลด GSI

คุณสามารถดาวน์โหลด GSI ที่คอมไพล์ไว้ล่วงหน้าได้จากเว็บไซต์การผสานรวมอย่างต่อเนื่อง (CI) ของ AOSP ที่ ci.android.com หากดาวน์โหลด GSI ประเภทใดประเภทหนึ่งสำหรับแพลตฟอร์มฮาร์ดแวร์ของคุณไม่ได้ โปรดดูรายละเอียดการสร้าง GSI สำหรับเป้าหมายที่เฉพาะเจาะจงในส่วนต่อไปนี้

สร้าง 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 9 ขึ้นไป

ชื่อ GSI สถาปัตยกรรม CPU จำนวนบิตของอินเทอร์เฟซ Binder ระบบเป็นรูท สร้างเป้าหมาย
gsi_arm เปิดระบบ 32 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 Y gsi_x86_64-user
gsi_x86_64-userdebug

ข้อกำหนดสำหรับการแฟลช GSI

อุปกรณ์ Android อาจมีการออกแบบที่แตกต่างกัน จึงไม่มีคำสั่งทั่วไปหรือชุดวิธีการสำหรับแฟลช GSI เพื่อใช้กับอุปกรณ์ทั้งหมด โปรดสอบถามวิธีการแฟลชที่ชัดเจนจากผู้ผลิตอุปกรณ์ Android ใช้ขั้นตอนต่อไปนี้เป็นแนวทางทั่วไป

  1. ตรวจสอบว่าอุปกรณ์มีสิ่งต่อไปนี้
    • เสียงแหลม
    • วิธีการปลดล็อกอุปกรณ์ (เพื่อให้สามารถแฟลชโดยใช้ fastboot ได้)
    • สถานะ "ปลดล็อก" เพื่อให้แฟลชได้ผ่าน fastboot (สร้าง fastboot จากซอร์สทรีของ Android เพื่อให้แน่ใจว่าคุณมี fastboot เวอร์ชันล่าสุด)
  2. ลบพาร์ติชันระบบปัจจุบัน แล้วแฟลช GSI ลงในพาร์ติชันระบบ
  3. ล้างข้อมูลผู้ใช้และล้างข้อมูลออกจากพาร์ติชันอื่นๆ ที่จำเป็น (เช่น พาร์ติชันข้อมูลผู้ใช้และพาร์ติชันระบบ)
  4. รีบูตอุปกรณ์

เช่น หากต้องการแฟลช GSI ลงในอุปกรณ์ Pixel ให้ทำดังนี้

  1. บูตเข้าสู่โหมด fastboot และปลดล็อก bootloader
  2. อุปกรณ์ที่รองรับ fastbootd ต้องบูตเข้าสู่ fastbootd ด้วย โดยทำดังนี้
    $ fastboot reboot fastboot
  3. ลบและแฟลช GSI ลงในพาร์ติชันระบบโดยทำดังนี้
    $ fastboot erase system
    $ fastboot flash system system.img
  4. ล้างข้อมูลผู้ใช้และล้างข้อมูลจากพาร์ติชันอื่นๆ ที่จำเป็น (เช่น พาร์ติชันข้อมูลผู้ใช้และพาร์ติชันระบบ)
    $ fastboot -w
  5. รีบูตกลับไปยัง Bootloader โดยทำดังนี้
    $ fastboot reboot-bootloader
  6. ปิดใช้การยืนยันการเปิดเครื่องที่ได้รับการยืนยันขณะแฟลช vbmeta ที่ระบุ
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  7. 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 ในตัวอย่างนี้

มีส่วนร่วมใน GSI

Android ยินดีรับการมีส่วนร่วมของคุณในการพัฒนา GSI คุณมีส่วนร่วมและช่วยปรับปรุง GSI ได้โดยทำดังนี้

  • การสร้างแพตช์ GSI DESSERT-gsi ไม่ใช่สาขาการพัฒนาและยอมรับเฉพาะการคัดสรรจากสาขาหลักของ AOSP ดังนั้นหากต้องการส่งแพตช์ GSI คุณต้องดำเนินการดังนี้
    1. ส่งแพตช์ไปยังสาขา AOSP main
    2. เลือกเฉพาะบางรายการในแพตช์ไปยัง DESSERT-gsi
    3. รายงานข้อบกพร่องเพื่อให้เราตรวจสอบรายการที่เลือก
  • การรายงานข้อบกพร่อง GSI หรือให้คำแนะนำอื่นๆ โปรดอ่านวิธีการในการรายงานข้อบกพร่อง จากนั้นเรียกดูหรือรายงานข้อบกพร่อง GSI

เคล็ดลับ

เปลี่ยนโหมดแถบนำทางโดยใช้ adb

เมื่อบูตด้วย GSI โหมดแถบนําทางจะได้รับการกําหนดค่าโดยการลบล้างของผู้ให้บริการ คุณเปลี่ยนโหมดแถบนําทางได้โดยเรียกใช้คําสั่ง adb ต่อไปนี้ในรันไทม์

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

โดยที่ mode อาจเป็น threebutton, twobutton, gestural และอื่นๆ