รูปภาพระบบทั่วไป

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

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

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

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

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

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

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

เป้าหมาย GSI สำหรับการทดสอบการปฏิบัติตามข้อกำหนดของเสียงแหลม

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 ไม่สมบูรณ์
  • ผู้ใช้ดีบัก 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 ด้วย 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 คุณจะต้องปลดล็อกอุปกรณ์เท่านั้น ไม่จำเป็นต้องปิดการใช้งานการตรวจสอบการบูต

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

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

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

กำลังดาวน์โหลด GSI

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

อาคาร GSIs

เริ่มต้นด้วย 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

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

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

ชื่อ GSI ซีพียูอาร์ค Binder อินเทอร์เฟซ bitness ระบบในฐานะราก สร้างเป้าหมาย
gsi_arm แขน 64 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 64 Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 Y gsi_x86_64-user
gsi_x86_64-userdebug

ข้อกำหนดสำหรับการกะพริบ GSIs

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

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

เคล็ดลับ

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

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

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

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