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

อิมเมจระบบทั่วไป (GSI) เป็นอิมเมจระบบที่มีการกำหนดค่าที่ปรับแล้ว สำหรับอุปกรณ์ Android ถือว่าเป็นการใช้งาน Android ที่แท้จริง โค้ด Android Open Source Project (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 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)

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

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

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

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

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

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

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

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

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

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

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

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

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 ได้ที่ คีย์สโตร์ที่ใช้ฮาร์ดแวร์

ดาวน์โหลด 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 Arc บิตเนสของอินเทอร์เฟซ 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)
  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. รีบูต:
    $ 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
Postfix _a ควรตรงกับรหัสสล็อตของพาร์ติชันระบบ เช่น system_a ในตัวอย่างนี้

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

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

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

เคล็ดลับ

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

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

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

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