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
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 dalamPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Menginstal modul ke partisi produk
Gunakan flag build berikut untuk menginstal modul ke partisi product
.
product_specific: true
dalamAndroid.bp
LOCAL_PRODUCT_MODULE := true
dalamAndroid.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
.