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

อิมเมจระบบทั่วไป (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 (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 ที่สอดคล้องกัน (ดูรายการเป้าหมายบิวด์ใน การสร้าง GSI )

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

อุปกรณ์ที่เปิดตัวด้วยหรืออัปเดตเป็น 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 เฉพาะ OEM หรือ boot-debug.img /system/bin/init จะโหลด userdebug_plat_sepolicy.cil จาก GSI system.img อ้างอิง การทดสอบ VTS ด้วย Debug Ramdisk เพื่อดูรายละเอียด

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

อุปกรณ์ที่เปิดตัวด้วยหรืออัปเดตเป็น 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 และไม่ใช่ system-as-root ให้ใช้ 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 อาจไม่ตรงกับข้อมูลเวอร์ชันที่รายงานโดยโปรแกรมโหลดบูตของผู้จำหน่าย สำหรับอุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่า ผู้จำหน่ายจะต้องแก้ไขการใช้งาน Keymaster เพื่อข้ามการตรวจสอบ (หรืออัปเกรดเป็น Keymaster 4) สำหรับรายละเอียดเกี่ยวกับ Keymaster โปรดดูที่ Hardware-backed Keystore

ดาวน์โหลด GSI

คุณสามารถดาวน์โหลด GSI ที่สร้างไว้ล่วงหน้าได้จากเว็บไซต์ AOSP Continuous Integration (CI) ที่ 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

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

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

ชื่อจีเอสไอ ส่วนโค้งของซีพียู ความบิตของอินเทอร์เฟซ 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 ในตัวอย่างนี้

มีส่วนร่วมกับ GSI

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

  • การสร้างแพตช์ GSI DESSERT -gsi ไม่ใช่ สาขาการพัฒนาและยอมรับเฉพาะ cherrypicks จากสาขาหลัก AOSP ดังนั้นในการส่งแพตช์ GSI คุณต้อง:
    1. ส่งแพตช์ไปที่สาขา main 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 และอื่นๆ