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 |
|
product |
|
product (antarmuka yang diterapkan) |
|
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
bootanimationkhusus produk
Tidak ada custom_images
Anda tidak dapat menggunakan custom_images. Fitur ini tidak mendukung hal berikut:
- Menginstal modul ke target tertentu.
custom_imagesmendukung 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_imagestidak dapat di-build menggunakan sistem build Soong. - Dukungan update OTA.
custom_imagesdigunakan 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_PRODUCTIMAGEBOARD_PRODUCTIMAGE_PARTITION_SIZEBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPEPRODUCT_PRODUCT_PROPERTIESuntuk/product/build.prop. Nilai ini harus berada dalam$(call inherit-product path/to/device.mk), seperti dalamPRODUCT_PRODUCT_PROPERTIES += product.abc=ok.
Menginstal modul ke partisi produk
Gunakan flag build berikut untuk menginstal modul ke partisi product.
product_specific: truedalamAndroid.bpLOCAL_PRODUCT_MODULE := truedalamAndroid.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.