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

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

GSI ใช้เพื่อเรียกใช้การทดสอบ VTS และ CTS-on-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 อย่างเต็มรูปแบบออก
  • SEPolicy ของ Userdebug 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 ด้วย Debug 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ที่อัปเกรดแล้วใน ramdisk รองรับ OEM system.img ที่มีเลย์เอาต์ system-as-root
  • การเปิดเครื่องที่ได้รับการยืนยัน การใช้ 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)

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

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

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

ดาวน์โหลด 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 System-as-root สร้างเป้าหมาย
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. ตรวจสอบว่าอุปกรณ์มีคุณสมบัติต่อไปนี้
    • Treblized
    • วิธีการปลดล็อกอุปกรณ์ (เพื่อให้แฟลชได้โดยใช้ fastboot)
    • สถานะที่ปลดล็อกเพื่อให้แฟลชได้ผ่าน fastboot (หากต้องการให้แน่ใจว่าคุณมี fastboot เวอร์ชันล่าสุด ให้สร้าง จากโครงสร้างแหล่งที่มาของ Android)
  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. หากอุปกรณ์รองรับ Android Virtual Framework ให้แฟลชเฟิร์มแวร์เครื่องเสมือนที่ได้รับการปกป้องโดยทำดังนี้
    $ 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 ในตัวอย่างนี้

ร่วมให้ข้อมูลกับ GSI

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

  • การสร้างแพตช์ GSI DESSERT-gsi ไม่ใช่สาขาการพัฒนาและยอมรับเฉพาะการเลือกเชอร์รี่จาก สาขาการเผยแพร่ล่าสุดของ AOSP (android16-release) ดังนั้นหากต้องการส่งแพตช์ GSI คุณต้องทำดังนี้
    1. ส่งแพตช์ไปยังสาขา AOSP android16-release
    2. Cherrypick the patch to 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 และอื่นๆ