Generic system image (GSI)

Generic system image (GSI) adalah image sistem dengan konfigurasi yang disesuaikan untuk perangkat Android. Ini dianggap sebagai implementasi Android murni dengan kode Proyek Open Source Android (AOSP) yang tidak dimodifikasi sehingga perangkat Android apa pun yang menjalankan Android 9 atau yang lebih tinggi dapat berhasil dijalankan.

GSI digunakan untuk menjalankan pengujian VTS dan CTS-on-GSI. Image sistem perangkat Android diganti dengan GSI, lalu diuji dengan Vendor Test Suite (VTS) dan Compatibility Test Suite (CTS) untuk memastikan perangkat menerapkan antarmuka vendor dengan benar dengan versi Android terbaru.

Untuk memulai GSI, tinjau bagian berikut untuk mengetahui detail tentang konfigurasi GSI (dan varian yang diizinkan) dan jenis. Jika sudah siap menggunakan GSI, download dan build GSI untuk target perangkat Anda, lalu flash GSI ke perangkat Android.

Konfigurasi dan varian GSI

GSI Android saat ini memiliki konfigurasi berikut:

GSI Android saat ini mencakup varian utama berikut:

  • Arsitektur CPU. Dukungan untuk berbagai instruksi CPU (ARM, x86, dll.) dan bitness CPU (32 bit atau 64 bit).

Target GSI untuk pengujian kepatuhan Treble

GSI yang digunakan untuk pengujian kepatuhan ditentukan oleh versi Android yang digunakan perangkat untuk diluncurkan.

Jenis perangkat Target build
Perangkat yang diluncurkan dengan Android 15 gsi_$arch-user (Ditandatangani)
Perangkat yang diluncurkan dengan Android 14 gsi_$arch-user (Ditandatangani)
Perangkat yang diluncurkan dengan Android 13 gsi_$arch-user (Ditandatangani)
Perangkat yang diluncurkan dengan Android 12L gsi_$arch-user (Ditandatangani)
Perangkat yang diluncurkan dengan Android 12 gsi_$arch-user (Ditandatangani)
Perangkat yang diluncurkan dengan Android 11 gsi_$arch-user (Ditandatangani)

Semua GSI dibangun dari codebase Android 12, dan setiap arsitektur CPU memiliki biner GSI yang sesuai (lihat daftar target build di Membuat GSI).

Perubahan GSI Android 12

Perangkat yang diluncurkan dengan atau yang diupdate untuk Android 12 harus menggunakan GSI Android 12 untuk pengujian kepatuhan. Hal ini mencakup perubahan utama berikut dari GSI sebelumnya:

  • Nama target. Nama target GSI untuk pengujian kepatuhan diubah menjadi gsi_$arch. GSI dengan nama target aosp_$arch disimpan untuk developer aplikasi Android. Paket pengujian CTS-on-GSI juga dikurangi untuk menguji antarmuka vendor.
  • GSI lama dihentikan. GSI 12 menghapus solusi yang mengakomodasi perangkat Android 8.0 atau 8.1 yang tidak sepenuhnya Treblized.
  • Userdebug SEPolicy. gsi_$arch GSI berisi userdebug_plat_sepolicy.cil. Saat mem-flash vendor_boot-debug.img atau boot-debug.img khusus OEM, /system/bin/init akan memuat userdebug_plat_sepolicy.cil dari GSI system.img. Lihat Pengujian VTS dengan Debug Ramdisk untuk mengetahui detailnya.

Perubahan GSI Android 11

Perangkat yang diluncurkan dengan atau diupdate ke Android 11 harus menggunakan GSI Android 11 untuk pengujian kepatuhan. Hal ini mencakup perubahan utama berikut dari GSI sebelumnya:

  • Konten system_ext. Android 11 menentukan partisi baru system_ext. GSI menempatkan konten ekstensi sistem di folder system/system_ext.
  • APEX. GSI berisi APEX yang dipadatkan dan dikompresi. Mana yang akan digunakan ditentukan oleh properti sistem ro.apex.updatable di partisi vendor pada waktu proses. Baca artikel Mengonfigurasi sistem agar mendukung update APEX untuk mengetahui detailnya.

Perubahan GSI Android 10

Perangkat yang diluncurkan dengan atau diupdate ke Android 10 harus menggunakan GSI Android 10 untuk pengujian kepatuhan. Hal ini mencakup perubahan utama berikut dari GSI sebelumnya:

  • Build pengguna. GSI memiliki build pengguna dari Android 10. Di Android 10, GSI build pengguna dapat digunakan dalam pengujian kepatuhan CTS-on-GSI/VTS. Lihat Pengujian VTS dengan Debug Ramdisk untuk mengetahui detailnya.
  • Format yang tidak diuraikan. GSI dengan target aosp_$arch dibuat dengan format yang tidak diuraikan. Anda dapat menggunakan img2simg untuk mengonversi GSI yang tidak diuraikan ke format jarang jika diperlukan.
  • System-as-root. Target build GSI lama bernama aosp_$arch_a telah dihentikan secara bertahap. Untuk perangkat yang diupgrade dari Android 8 atau 8.1 ke Android 10 dengan ramdisk dan non-system-as-root, gunakan GSI aosp_$arch_ab lama. init yang diupgrade di ramdisk mendukung OEM system.img dengan tata letak system-as-root.
  • Verifikasi booting. Dengan GSI, Anda hanya perlu membuka kunci perangkat. Anda tidak perlu menonaktifkan booting terverifikasi.

Perubahan GSI Android 9

Perangkat yang diluncurkan dengan atau diupdate ke Android 9 harus menggunakan GSI Android 9 untuk pengujian kepatuhan. Hal ini mencakup perubahan utama berikut dari GSI sebelumnya:

  • Menggabungkan GSI dan emulator. GSI dibuat dari image sistem produk emulator, misalnya, aosp_arm64 dan aosp_x86.
  • System-as-root. Pada versi Android sebelumnya, perangkat yang tidak mendukung update A/B dapat memasang image sistem di direktori /system. Di Android 9, root image sistem dipasang sebagai root perangkat.
  • Antarmuka binder 64-bit. Di Android 8.x, GSI 32-bit menggunakan antarmuka binder 32-bit. Android 9 tidak mendukung antarmuka binder 32-bit, sehingga GSI 32-bit dan GSI 64-bit menggunakan antarmuka binder 64-bit.
  • Penerapan VNDK. Di Android 8.1, VNDK bersifat opsional. Mulai Android 9, VNDK bersifat wajib, sehingga BOARD_VNDK_VERSION harus ditetapkan.
  • Properti sistem yang kompatibel. Android 9 mengaktifkan pemeriksaan akses untuk properti sistem yang kompatibel (PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true).

Perubahan Keymaster Android 9

Di versi Android sebelumnya, perangkat yang menerapkan Keymaster 3 atau yang lebih lama diwajibkan 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 image booting.

Di Android 9 dan yang lebih tinggi, persyaratan ini telah berubah untuk memungkinkan vendor mem-booting 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 mengimplementasikan Keymaster 3 atau yang lebih rendah, vendor harus mengubah implementasi Keymaster untuk melewati verifikasi (atau mengupgrade ke Keymaster 4). Untuk mengetahui detail tentang Keymaster, lihat Keystore yang didukung Hardware.

Mendownload GSI

Anda dapat mendownload GSI bawaan dari situs continuous integration (CI) AOSP di ci.android.com. Jika jenis GSI untuk platform hardware Anda tidak tersedia untuk didownload, lihat bagian berikut untuk mengetahui detail tentang cara mem-build GSI untuk target tertentu.

Mem-build GSI

Mulai Android 9, setiap versi Android memiliki cabang GSI bernama DESSERT-gsi di AOSP (misalnya, android12-gsi adalah cabang GSI di Android 12). Cabang GSI mencakup konten Android dengan semua patch keamanan dan patch GSI yang diterapkan.

Untuk mem-build GSI, siapkan hierarki sumber Android dengan mendownload dari cabang GSI, lalu memilih target build GSI. Gunakan tabel target build di bawah untuk menentukan versi GSI yang benar untuk perangkat Anda. Setelah build selesai, GSI adalah image sistem (yaitu system.img) dan muncul di folder output out/target/product/generic_arm64.

Misalnya, untuk mem-build 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 build GSI Android

Target build GSI berikut ditujukan untuk perangkat yang diluncurkan di Android 9 atau yang lebih tinggi.

Nama GSI Arsitektur CPU Bitness antarmuka Binder Sistem-sebagai-root Target build
gsi_arm 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

Persyaratan untuk melakukan flash GSI

Perangkat Android dapat memiliki desain yang berbeda, sehingga tidak ada perintah umum atau serangkaian petunjuk untuk mem-flash GSI yang berlaku untuk semua perangkat. Hubungi produsen perangkat Android untuk mendapatkan petunjuk flashing yang jelas. Gunakan langkah-langkah berikut sebagai panduan umum:

  1. Pastikan perangkat memiliki hal berikut:
    • Treblized
    • Metode untuk membuka kunci perangkat (sehingga dapat di-flash menggunakan fastboot)
    • Status tidak terkunci agar dapat di-flash melalui fastboot (Untuk memastikan Anda memiliki fastboot versi terbaru, buat dari hierarki 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. Boot ulang perangkat.

Misalnya, untuk mem-flash GSI ke perangkat Pixel:

  1. Booting ke mode fastboot dan membuka kunci bootloader.
  2. Perangkat yang mendukung fastbootd juga perlu melakukan booting 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. Mulai ulang kembali ke bootloader:
    $ fastboot reboot-bootloader
  6. Nonaktifkan verifikasi Booting Terverifikasi saat mem-flash vbmeta yang disediakan:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  7. Reboot:
    $ fastboot reboot
Di perangkat Android 10 atau yang lebih baru yang memiliki partisi sistem yang lebih kecil, pesan error 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. Hal ini akan memberikan ruang tambahan untuk melakukan 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 pada pengembangan GSI. Anda dapat berpartisipasi dan membantu meningkatkan GSI dengan:

  • Membuat patch GSI. DESSERT-gsi bukan cabang pengembangan dan hanya menerima cherrypick dari cabang utama AOSP, jadi untuk mengirimkan patch GSI, Anda harus:
    1. Kirim patch ke cabang main AOSP.
    2. Pilih patch ke DESSERT-gsi.
    3. Laporkan bug agar produk ceri ditinjau.
  • Melaporkan bug GSI atau memberikan saran lainnya. Tinjau petunjuk di Melaporkan bug, lalu jelajahi atau laporkan bug GSI.

Tips

Mengubah mode menu navigasi menggunakan adb

Saat melakukan booting dengan GSI, mode menu navigasi dikonfigurasi oleh penggantian vendor. Anda dapat mengubah mode menu navigasi dengan menjalankan perintah adb berikut dalam runtime.

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

Dengan mode dapat berupa threebutton, twobutton, gestural, dan sebagainya.