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

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

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

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

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

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

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

Android GSI ปัจจุบันมีความแปรปรวนที่สำคัญดังต่อไปนี้:

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

เป้าหมาย GSI สำหรับการทดสอบความสอดคล้องของ Treble

GSI ที่ใช้สำหรับการทดสอบการปฏิบัติตามข้อกำหนดจะพิจารณาจากเวอร์ชัน Android ที่เปิดตัวอุปกรณ์

ประเภทอุปกรณ์ สร้างเป้าหมาย
อุปกรณ์ที่เปิดตัวด้วย Android 12 gsi_$arch-user (ลงชื่อ)
อุปกรณ์ที่เปิดตัวด้วย Android 11 gsi_$arch-user (ลงชื่อ)
อุปกรณ์ที่เปิดตัวด้วย Android 10 gsi_$arch-user (ลงชื่อ)
อุปกรณ์ที่เปิดตัวด้วย Android 9 gsi_$arch-userdebug

GSI ทั้งหมดสร้างขึ้นจากโค้ดเบสของ Android 12 และสถาปัตยกรรม CPU แต่ละตัวมีไบนารี GSI ที่สอดคล้องกัน (ดูรายการเป้าหมายของบิลด์ใน Building 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 ที่ยังไม่ Treblized อย่างสมบูรณ์
  • 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 สำหรับรายละเอียด

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

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

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

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

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

  • สร้างผู้ใช้ GSI มีรุ่นผู้ใช้จาก Android 10 ใน Android 10 รุ่นผู้ใช้ GSI สามารถใช้ในการทดสอบการปฏิบัติตามข้อกำหนด CTS-on-GSI/VTS อ้างอิง การทดสอบ VTS ด้วย Debug Ramdisk สำหรับรายละเอียด
  • รูปแบบที่ไม่กระจัดกระจาย GSI ที่มีเป้าหมาย aosp_$arch สร้างขึ้นด้วยรูปแบบที่ไม่กระจาย คุณสามารถใช้ img2simg เพื่อแปลง GSI ที่ไม่กระจายเป็นรูปแบบที่กระจายได้หากจำเป็น
  • ระบบเป็นราก เป้าหมายบิลด์ 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 ต้องใช้ Android 9 GSI สำหรับการทดสอบความสอดคล้อง ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI รุ่นก่อนหน้า:

  • ผสาน GSI และโปรแกรมจำลอง GSI สร้างขึ้นจากอิมเมจระบบของผลิตภัณฑ์โปรแกรมจำลอง เช่น aosp_arm64 และ aosp_x86
  • ระบบเป็นราก ใน Android รุ่นก่อนหน้า อุปกรณ์ที่ไม่รองรับการอัปเดต A/B สามารถเมานต์อิมเมจระบบภายใต้ไดเร็กทอรี /system ใน Android 9 รูทของอิมเมจระบบจะเมาต์เป็นรูทของอุปกรณ์
  • อินเตอร์เฟสตัวประสาน 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

ใน 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 build เป้าหมาย 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

เป้าหมายการสร้าง Android GSI

เป้าหมายบิลด์ GSI ต่อไปนี้มีไว้สำหรับอุปกรณ์ที่เปิดตัวบน Android 9 หรือสูงกว่า

ชื่อ GSI ซุ้มซีพียู บิตของส่วนต่อประสาน Binder ระบบเป็นราก สร้างเป้าหมาย
gsi_arm แขน 64 วาย gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 วาย gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 64 วาย 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 และ ปลดล็อค 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 ควรตรงกับ slot id ของพาร์ติชันระบบ เช่น system_a ในตัวอย่างนี้

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

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

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

เคล็ดลับ

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

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

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

โดยที่ mode สามารถเป็น threebutton twobutton gestural และอื่นๆ