Gambar Sistem Umum

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:

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 target aosp_$arch disimpan untuk pengembang aplikasi Android. Rencana pengujian CTS-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 berisi userdebug_plat_sepolicy.cil . Saat vendor_boot-debug.img atau boot-debug.img , /system/bin/init akan memuat userdebug_plat_sepolicy.cil dari GSI system.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 folder system/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 menggunakan img2simg 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 lama aosp_$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 dan aosp_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:

  1. 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 memiliki fastboot versi terbaru, buatlah dari pohon sumber Android.)
  2. Hapus partisi sistem saat ini, lalu flash GSI ke partisi sistem.
  3. Hapus data pengguna dan hapus data dari partisi lain yang diperlukan (misalnya, data pengguna dan partisi sistem).
  4. Nyalakan ulang perangkat.

Misalnya, untuk mem-flash GSI ke perangkat Pixel apa pun:

  1. Boot ke mode fastboot dan buka kunci bootloader .
  2. Perangkat yang mendukung fastbootd juga perlu boot ke fastbootd dengan:
    $ fastboot reboot fastboot
  3. Hapus dan flash GSI ke partisi sistem:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. Hapus data pengguna dan hapus data dari partisi lain yang diperlukan (misalnya, data pengguna dan partisi sistem):
    $ fastboot -w
  5. Reboot:
    $ fastboot reboot
Pada perangkat Android 10 atau lebih baru yang memiliki partisi sistem lebih kecil, pesan kesalahan berikut mungkin muncul saat mem-flash GSI:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
Gunakan 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_a
Postfix _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:
    1. Kirim patch ke cabang master AOSP .
    2. Cherrypick patch ke DESSERT -gsi .
    3. Ajukan bug agar cherrypick ditinjau.
  • 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.