Partisi produk

Android 9 dan yang lebih tinggi menyertakan dukungan untuk mem-build partisi product menggunakan sistem build Android. Sebelumnya, Android 8.x menerapkan pemisahan komponen khusus SoC dari partisi system ke partisi vendor tanpa menyediakan ruang untuk komponen khusus OEM yang di-build dari sistem build Android. Android 9 dan yang lebih tinggi menyediakan izin dan fitur daftar yang diizinkan tambahan yang berlaku untuk aplikasi priv di partisi yang berbeda.

Tentang partisi produk

Banyak OEM menyesuaikan image sistem AOSP untuk menerapkan fitur mereka sendiri, serta persyaratan operator. Namun, penyesuaian tersebut membuat satu image sistem tidak dapat digunakan untuk beberapa SKU software. Setiap gambar harus berbeda untuk mendukung penyesuaian, seperti dengan lokalitas atau operator yang berbeda. Menggunakan partisi product terpisah untuk memuat penyesuaian memungkinkan penggunaan satu image sistem untuk beberapa SKU software. (Partisi system menghosting kode generik yang dapat dibagikan di antara banyak SKU software). Partisi vendor terus menghosting kode BSP khusus SoC yang dapat dibagikan di antara beberapa perangkat berdasarkan SoC tertentu.

Menggunakan partisi terpisah memiliki beberapa kelemahan, seperti mengelola ruang disk (jumlah ruang yang terbatas harus tetap dicadangkan untuk pertumbuhan di masa mendatang) dan mempertahankan antarmuka biner aplikasi (ABI) yang stabil di antara partisi. Sebelum memutuskan untuk menggunakan partisi product, luangkan waktu untuk mempertimbangkan implementasi AOSP unik dan kemungkinan taktik mitigasi (seperti mempartisi ulang perangkat selama update over-the-air (OTA), yang tidak dilakukan oleh Google, tetapi dilakukan oleh beberapa OEM). Pembagian dinamis adalah solusi yang baik untuk hal ini.

Partisi dan izin produk

Di Android 9 dan yang lebih baru, perubahan pada izin dan proses daftar yang diizinkan memengaruhi cara Anda memberikan izin priv-apps di partisi `produk`. File permissions.xml harus berada di partisi yang sama dengan priv-apps. Menempatkan file permissions.xml di partisi system untuk aplikasi dengan hak istimewa tidak memperluas izin tersebut ke aplikasi dengan hak istimewa di partisi product, meskipun yang pertama adalah ekstensi dari yang kedua. Untuk mengetahui detail tentang izin dan proses daftar yang diizinkan, lihat Daftar yang Diizinkan untuk Izin dengan Hak Istimewa.

/oem lama versus /product

Kami memiliki dua jenis atribut partisi product, bergantung pada penerapan antarmuka produk. Selain itu, partisi product berbeda dengan partisi oem lama:

Partisi Atribut
oem
  • Tidak dapat diupdate; biasanya di-flash sekali di pabrik.
  • Dibuat per variasi kecil, seperti branding dan warna. Memiliki konten partisi oem yang berbeda tidak berarti software produk berbeda.
  • Partisi system tidak bergantung pada partisi oem. (Fungsi ini hanya menggunakan partisi oem jika file tertentu ditemukan di sana).
  • Hanya menggunakan API publik di partisi system.
product
  • Dapat diupdate
  • Disertai dengan image sistem (keduanya diupdate secara bersamaan)
  • Dibuat per produk atau kelompok produk.
  • Partisi sistem dapat bergantung pada partisi product.
  • Dapat menggunakan API non-publik karena API tersebut diperbarui secara bersamaan.
product (antarmuka yang diterapkan)
  • Dapat diupdate
  • Dipisahkan dengan image sistem.
  • Dibuat per produk atau kelompok produk.
  • Partisi system tidak bergantung pada partisi product.
  • Tidak dapat menggunakan API tersembunyi, tetapi hanya menggunakan API publik dan sistem di partisi system.

Karena alasan ini, Android 9 mendukung partisi product sekaligus mempertahankan dukungan untuk partisi oem lama, untuk perangkat yang bergantung padanya. Untuk memisahkan partisi product dari partisi system, Android 11 mendukung menerapkan antarmuka product.

/product components

Partisi product berisi komponen berikut:

  • Properti sistem khusus produk (/product/build.prop)
  • RRO spesifik per produk (/product/overlay/*.apk)
  • Aplikasi khusus produk (/product/app/*.apk)
  • Aplikasi priv khusus produk (/product/priv-app/*.apk)
  • Library khusus produk (/product/lib/*)
  • Library java khusus produk (/product/framework/*.jar)
  • Konfigurasi sistem Framework Android khusus produk (/product/etc/sysconfig/* dan /product/etc/permissions/*)
  • File media khusus produk (/product/media/audio/*)
  • File bootanimation khusus produk

Tidak ada custom_images

Anda tidak dapat menggunakan custom_images. Fitur ini tidak mendukung hal berikut:

  • Menginstal modul ke target tertentu. custom_images mendukung penyalinan artefak ke dalam image, tetapi tidak dapat menginstal modul ke partisi tertentu dengan menentukan partisi targetnya sebagai bagian dari aturan build.
  • Dukungan Soong. custom_images tidak dapat di-build menggunakan sistem build Soong.
  • Dukungan update OTA. custom_images digunakan sebagai image ROM bawaan yang tidak dapat menerima update OTA.

Mempertahankan ABI di antara partisi

Partisi product di Android 9 adalah ekstensi dari partisi system. Ada ABI yang lemah antara partisi product dan system, sehingga keduanya harus diupgrade secara bersamaan, dan ABI harus berbasis SDK sistem. Jika SDK sistem tidak mencakup semua platform API antara product dan system, OEM harus mempertahankan ABI mereka sendiri di antara kedua partisi.

Partisi product dan system dapat saling bergantung. Namun, pengujian dengan Generic System Image (GSI) harus berfungsi dengan baik tanpa partisi product.

Saat antarmuka product diterapkan, partisi product akan dipisahkan dengan partisi system. Partisi product hanya menggunakan antarmuka yang diizinkan dari partisi system.

Partisi product tidak boleh memiliki dependensi apa pun melalui antarmuka yang tidak stabil pada partisi vendor. Interaksi langsung antara partisi product dan vendor dilarang. (Hal ini diterapkan oleh SEpolicy.)

Menerapkan pemisahan produk

Sebelum menerapkan partisi produk baru, tinjau perubahan partisi produk terkait di AOSP. Kemudian, untuk menyiapkan product, sertakan flag build produk atau board berikut:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES untuk /product/build.prop. Nilai ini harus berada dalam $(call inherit-product path/to/device.mk), seperti dalam PRODUCT_PRODUCT_PROPERTIES += product.abc=ok.

Menginstal modul ke partisi produk

Gunakan flag build berikut untuk menginstal modul ke partisi product.

  • product_specific: true dalam Android.bp
  • LOCAL_PRODUCT_MODULE := true dalam Android.mk

Mengaktifkan Booting Terverifikasi

Untuk mencegah partisi product diubah oleh software berbahaya, aktifkan Android Verified Boot (AVB) untuk partisi tersebut (seperti yang Anda lakukan untuk partisi vendor dan system). Untuk mengaktifkan AVB, sertakan flag build berikut: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.