อิมเมจระบบทั่วไป (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 มีการสนับสนุนอย่างสมบูรณ์สำหรับ การเปลี่ยนแปลงทางสถาปัตยกรรมโดยใช้ AIDL/HIDL (หรือที่เรียกว่า Treble) รวมถึงการรองรับฟังก์ชัน อินเทอร์เฟซ AIDL และ อินเทอร์เฟซ HIDL คุณสามารถใช้ GSI ใน อุปกรณ์ Android ที่ใช้อินเทอร์เฟซผู้ให้บริการ AIDL/HIDL (โปรดดูรายละเอียดเพิ่มเติมที่ แหล่งข้อมูลสถาปัตยกรรม)
- ระบบไฟล์ GSI ใช้ระบบไฟล์ ext4
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
จาก GSIsystem.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 เพื่อขอคำแนะนำในการกะพริบที่ชัดเจน โปรดใช้ขั้นตอนต่อไปนี้เป็นแนวทางทั่วไป
- ตรวจสอบว่าอุปกรณ์มีคุณสมบัติต่อไปนี้
- พิมพ์ลาย
- วิธีการปลดล็อกอุปกรณ์ (เพื่อให้สามารถกะพริบได้โดยใช้
fastboot
) - สถานะปลดล็อกเพื่อให้กะพริบผ่าน
fastboot
(เพื่อให้มั่นใจว่าคุณมีfastboot
เวอร์ชันล่าสุด ให้สร้าง จากแผนผังแหล่งที่มาของ Android)
- ลบพาร์ติชันระบบปัจจุบัน แล้วแฟลช GSI ไปยังระบบ พาร์ติชัน
- ล้างข้อมูลผู้ใช้และล้างข้อมูลจากพาร์ติชันอื่นๆ ที่จำเป็น (สำหรับ เช่น ข้อมูลผู้ใช้และพาร์ติชันระบบ)
- รีบูตอุปกรณ์
ตัวอย่างเช่น หากต้องการแฟลช GSI ในอุปกรณ์ Pixel ให้ทำดังนี้
- บูตไปยัง
โหมด
fastboot
และ ปลดล็อก Bootloader - อุปกรณ์ที่รองรับ
fastbootd
ต้องบูตเข้าสู่fastbootd
ด้วย:$ fastboot reboot fastboot
- ลบและแฟลช GSI ไปยังพาร์ติชันระบบด้วยคำสั่งต่อไปนี้
$ fastboot erase system $ fastboot flash system system.img
- ล้างข้อมูลผู้ใช้และล้างข้อมูลจากพาร์ติชันอื่นๆ ที่จำเป็น (สำหรับ
เช่น ข้อมูลผู้ใช้และพาร์ติชันระบบ)
$ fastboot -w
- รีบูต:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failed
$ fastboot delete-logical-partition product_a
_a
ควรตรงกับรหัสช่องโฆษณาของพาร์ติชันระบบ
เช่น system_a
ในตัวอย่างนี้
มีส่วนร่วมใน GSI
Android ขอต้อนรับคุณมีส่วนร่วมในการพัฒนา GSI คุณมีส่วนร่วมได้ และช่วยปรับปรุง GSI โดย:
- การสร้างแพตช์ GSI
DESSERT-gsi
ไม่ใช่สาขาการพัฒนาและรับเฉพาะ cherry-picks จาก สาขาหลักของ AOSP ดังนั้นในการส่งแพตช์ GSI คุณต้อง- ส่งแพตช์ไปยัง
AOSP
สาขา
main
- เลือกแพตช์ไปยัง
DESSERT-gsi
- รายงานข้อบกพร่องเพื่อรับการตรวจสอบ cherry-pick
- ส่งแพตช์ไปยัง
AOSP
สาขา
- การรายงานข้อบกพร่อง GSI หรือให้คำแนะนำอื่นๆ รีวิว คำแนะนำใน การรายงานข้อบกพร่อง จากนั้น เรียกดูหรือไฟล์ GSI ข้อบกพร่อง
เคล็ดลับ
เปลี่ยนโหมดแถบนำทางโดยใช้ adb
เมื่อบูตด้วย GSI โหมดแถบนำทางจะได้รับการกำหนดค่าโดยการลบล้างผู้ให้บริการ คุณสามารถ เปลี่ยนโหมดแถบนำทางโดยการเรียกใช้คำสั่ง adb ต่อไปนี้ในรันไทม์
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
โดย mode อาจเป็น threebutton
, twobutton
gestural
และอื่นๆ