Gambar sistem generik (GSI) adalah gambar sistem dengan konfigurasi yang disesuaikan untuk perangkat Android. Ini dianggap sebagai implementasi Android murni dengan kode Android Open Source Project (AOSP) yang tidak dimodifikasi sehingga perangkat Android apa pun yang menjalankan Android 9 atau lebih tinggi dapat berjalan dengan sukses.
GSI digunakan untuk menjalankan pengujian VTS dan CTS-on-GSI. Citra sistem perangkat Android diganti dengan GSI kemudian diuji dengan Vendor Test Suite (VTS) dan Compatibility Test Suite (CTS) untuk memastikan bahwa perangkat mengimplementasikan antarmuka vendor dengan benar dengan Android versi terbaru.
Untuk memulai GSI, tinjau bagian berikut untuk mengetahui detail tentang konfigurasi GSI (dan varian yang diizinkan) dan jenis . Saat Anda siap menggunakan GSI, unduh dan buat GSI untuk target perangkat Anda, lalu flash GSI ke perangkat Android.
Konfigurasi dan varians GSI
GSI Android saat ini memiliki konfigurasi berikut:
- Tiga kali lipat. GSI mencakup dukungan penuh untuk perubahan arsitektur berbasis AIDL/HIDL (juga dikenal sebagai Treble ), termasuk dukungan untuk antarmuka AIDL dan antarmuka HIDL . Anda dapat menggunakan GSI di perangkat Android apa pun yang menggunakan antarmuka vendor AIDL/HIDL. (Untuk detail selengkapnya, lihat Sumber daya arsitektur .)
- Berkas sistem. GSI menggunakan sistem file ext4.
GSI Android saat ini mencakup varian utama berikut:
- arsitektur CPU. Dukungan untuk instruksi CPU yang berbeda (ARM, x86, dll.) dan bitness CPU (32 bit atau 64 bit).
Target GSI untuk uji kepatuhan Treble
GSI yang digunakan untuk pengujian kepatuhan ditentukan oleh versi Android yang digunakan untuk meluncurkan perangkat.
Tipe perangkat | Membangun target |
---|---|
Perangkat diluncurkan dengan Android 12 | gsi_$arch-user (Ditandatangani) |
Perangkat diluncurkan dengan Android 11 | gsi_$arch-user (Ditandatangani) |
Perangkat diluncurkan dengan Android 10 | gsi_$arch-user (Ditandatangani) |
Perangkat diluncurkan dengan Android 9 | gsi_$arch-userdebug |
Semua GSI dibuat dari basis kode Android 12, dan setiap arsitektur CPU memiliki biner GSI yang sesuai (lihat daftar target build di Membangun GSI ).
Perubahan GSI Android 12
Perangkat yang diluncurkan dengan atau diupdate ke Android 12 harus menggunakan GSI Android 12 untuk pengujian kepatuhan. Ini termasuk perubahan besar berikut dari GSI sebelumnya:
- Nama sasaran. Nama target GSI untuk pengujian kepatuhan diubah menjadi
gsi_$arch
. GSI dengan nama targetaosp_$arch
disimpan untuk pengembang aplikasi Android. Rencana pengujianCTS-on-GSI
juga dikurangi untuk menguji antarmuka vendor. - GSI lama dihapus secara bertahap. GSI 12 menghapus solusi yang mengakomodasi perangkat Android 8.0 atau 8.1 yang tidak sepenuhnya Treblized.
- Debug pengguna SEPolicy. GSI
gsi_$arch
berisiuserdebug_plat_sepolicy.cil
. Saatvendor_boot-debug.img
atauboot-debug.img
,/system/bin/init
akan memuatuserdebug_plat_sepolicy.cil
dari GSIsystem.img
. Referensi Pengujian VTS dengan Debug Ramdisk untuk detailnya.
Perubahan GSI Android 11
Perangkat yang diluncurkan dengan atau diupdate ke Android 11 harus menggunakan GSI Android 11 untuk pengujian kepatuhan. Ini termasuk perubahan besar berikut dari GSI sebelumnya:
- isi system_ext. Android 11 mendefinisikan partisi baru
system_ext
. GSI menempatkan konten ekstensi sistem di bawah foldersystem/system_ext
. - APEX. GSI berisi APEX yang diratakan dan dikompresi. Yang mana yang akan digunakan ditentukan oleh properti sistem
ro.apex.updatable
di partisi vendor saat run time. Referensi Konfigurasi sistem untuk mendukung pembaruan APEX untuk detailnya.
Perubahan GSI Android 10
Perangkat yang diluncurkan dengan atau diupdate ke Android 10 harus menggunakan GSI Android 10 untuk pengujian kepatuhan. Ini termasuk perubahan besar berikut dari GSI sebelumnya:
- Pembuatan pengguna. GSI memiliki build pengguna dari Android 10. Di Android 10, GSI build pengguna dapat digunakan dalam pengujian kepatuhan CTS-on-GSI/VTS. Referensi Pengujian VTS dengan Debug Ramdisk untuk detailnya.
- Format yang tidak dapat dipisahkan. GSI dengan target
aosp_$arch
dibuat dengan format unsparsed. Anda dapat menggunakanimg2simg
untuk mengonversi GSI yang tidak diurai ke format yang jarang jika perlu. - Sistem-sebagai-root. Target build GSI lama bernama
aosp_$arch_a
telah dihapus. Untuk perangkat yang diupgrade dari Android 8 atau 8.1 ke Android 10 dengan ramdisk dan non-system-as-root, gunakan GSI lamaaosp_$arch_ab
.init
yang ditingkatkan di ramdisk mendukung OEM system.img dengan tata letak sistem-sebagai-root. - Verifikasi boot. Menggunakan GSI Anda hanya perlu membuka kunci perangkat. Tidak perlu menonaktifkan verifikasi boot.
Perubahan GSI Android 9
Perangkat yang diluncurkan dengan atau diupdate ke Android 9 harus menggunakan GSI Android 9 untuk pengujian kepatuhan. Ini termasuk perubahan besar berikut dari GSI sebelumnya:
- Menggabungkan GSI dan emulator. GSI dibuat dari citra sistem produk emulator, misalnya,
aosp_arm64
danaosp_x86
. - Sistem-sebagai-root. Di versi Android sebelumnya, perangkat yang tidak mendukung pembaruan A/B dapat memasang citra sistem di bawah direktori
/system
. Di Android 9, root image sistem dipasang sebagai root perangkat. - Antarmuka pengikat 64-bit. Di Android 8.x, GSI 32-bit menggunakan antarmuka pengikat 32-bit. Android 9 tidak mendukung antarmuka pengikat 32-bit, jadi GSI 32-bit dan GSI 64-bit menggunakan antarmuka pengikat 64-bit.
- penegakan VNDK. Di Android 8.1, VNDK adalah opsional. Mulai dari Android 9, VNDK adalah wajib, jadi
BOARD_VNDK_VERSION
harus disetel. - Properti sistem yang kompatibel. Android 9 mengaktifkan pemeriksaan akses untuk properti sistem yang kompatibel (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
Perubahan Keymaster Android 9
Di Android versi sebelumnya, perangkat yang mengimplementasikan Keymaster 3 atau lebih rendah diperlukan untuk memverifikasi bahwa info versi ( ro.build.version.release
dan ro.build.version.security_patch
) yang dilaporkan oleh sistem yang berjalan cocok dengan info versi yang dilaporkan oleh bootloader. Informasi tersebut biasanya diperoleh dari header gambar boot.
Di Android 9 dan yang lebih tinggi, persyaratan ini telah diubah untuk memungkinkan vendor mem-boot GSI. Secara khusus, Keymaster tidak boleh melakukan verifikasi karena info versi yang dilaporkan oleh GSI mungkin tidak cocok dengan info versi yang dilaporkan oleh bootloader vendor. Untuk perangkat yang menerapkan Keymaster 3 atau lebih rendah, vendor harus memodifikasi implementasi Keymaster untuk melewati verifikasi (atau meningkatkan ke Keymaster 4). Untuk detail tentang Keymaster, lihat Keystore yang didukung Perangkat Keras .
Mengunduh GSI
Anda dapat mengunduh GSI bawaan dari situs web continuous integration (CI) AOSP di ci.android.com . Jika jenis GSI untuk platform perangkat keras Anda tidak tersedia untuk diunduh, lihat bagian berikut untuk detail tentang membuat GSI untuk target tertentu.
Membangun GSI
Dimulai dengan Android 9, setiap versi Android memiliki cabang GSI bernama DESSERT -gsi
di AOSP (misalnya, android12-gsi
adalah cabang GSI di Android 12). Cabang GSI menyertakan konten Android dengan semua patch keamanan dan patch GSI yang diterapkan.
Untuk membangun GSI, siapkan hierarki sumber Android dengan mengunduh dari cabang GSI dan memilih target pembangunan GSI . Gunakan tabel target build di bawah untuk menentukan versi GSI yang benar untuk perangkat Anda. Setelah pembangunan selesai, GSI adalah citra sistem (yaitu, system.img
) dan muncul di folder keluaran out/target/product/ generic_arm64
.
Misalnya, untuk membangun target build GSI gsi_arm64-userdebug
di cabang GSI android12-gsi
, jalankan perintah berikut.
$ 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
Target pembuatan GSI Android
Target build GSI berikut adalah untuk perangkat yang diluncurkan di Android 9 atau lebih tinggi.
nama GSI | lengkungan CPU | Bitness antarmuka pengikat | Sistem-sebagai-root | Membangun target |
---|---|---|---|---|
gsi_arm | LENGAN | 64 | kamu | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 | ARM64 | 64 | kamu | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 | x86 | 64 | kamu | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 | x86-64 | 64 | kamu | gsi_x86_64-user gsi_x86_64-userdebug |
Persyaratan untuk mem-flash GSI
Perangkat Android dapat memiliki desain yang berbeda, jadi tidak ada perintah umum atau serangkaian instruksi untuk mem-flash GSI agar diterapkan ke semua perangkat. Tanyakan kepada produsen perangkat Android untuk instruksi flashing eksplisit. Gunakan langkah-langkah berikut sebagai pedoman umum:
- Pastikan perangkat memiliki hal berikut:
- treblized
- Metode untuk membuka kunci perangkat (sehingga dapat di-flash menggunakan
fastboot
) - Status tidak terkunci untuk membuatnya dapat di-flash melalui
fastboot
(Untuk memastikan bahwa Anda memilikifastboot
versi terbaru, buatlah dari pohon sumber Android.)
- Hapus partisi sistem saat ini, lalu flash GSI ke partisi sistem.
- Hapus data pengguna dan hapus data dari partisi lain yang diperlukan (misalnya, data pengguna dan partisi sistem).
- Nyalakan ulang perangkat.
Misalnya, untuk mem-flash GSI ke perangkat Pixel apa pun:
- Boot ke mode
fastboot
dan buka kunci bootloader . - Perangkat yang mendukung
fastbootd
juga perlu boot kefastbootd
dengan:$ fastboot reboot fastboot
- Hapus dan flash GSI ke partisi sistem:
$ fastboot erase system $ fastboot flash system system.img
- Hapus data pengguna dan hapus data dari partisi lain yang diperlukan (misalnya, data pengguna dan partisi sistem):
$ fastboot -w
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedGunakan perintah berikut untuk menghapus partisi produk dan mengosongkan ruang untuk partisi sistem. Ini memberikan ruang ekstra untuk mem-flash GSI:
$ fastboot delete-logical-partition product_aPostfix
_a
harus cocok dengan id slot partisi sistem, seperti system_a
dalam contoh ini.Berkontribusi pada GSI
Android menyambut baik kontribusi Anda untuk pengembangan GSI. Anda dapat terlibat dan membantu meningkatkan GSI dengan:
- Membuat tambalan GSI.
DESSERT -gsi
bukan cabang pengembangan dan hanya menerima cherrypicks dari cabang master AOSP, jadi untuk mengirimkan tambalan GSI, Anda harus:- Kirim patch ke cabang
master
AOSP . - Cherrypick patch ke
DESSERT -gsi
. - Ajukan bug agar cherrypick ditinjau.
- Kirim patch ke cabang
- Melaporkan bug GSI atau membuat saran lain. Tinjau petunjuk di Melaporkan Bug , lalu telusuri atau laporkan bug GSI .
Tips
Mengubah mode bilah navigasi menggunakan adb
Saat melakukan booting dengan GSI, mode bilah navigasi dikonfigurasi oleh penimpaan vendor. Anda dapat mengubah mode bilah navigasi dengan menjalankan perintah adb berikut di runtime.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Dimana mode tersebut bisa berupa threebutton
, twobutton
, gestural
, dan sebagainya.