Android 9 dan lebih tinggi menyertakan dukungan untuk membuat partisi product
menggunakan sistem build Android. Sebelumnya, Android 8.x menerapkan pemisahan komponen khusus SoC dari partisi system
ke partisi vendor
tanpa mendedikasikan ruang untuk komponen khusus OEM yang dibuat dari sistem build Android. Android 9 dan lebih tinggi memberikan izin tambahan dan fitur daftar putih yang berlaku untuk aplikasi pribadi di partisi berbeda.
Tentang partisi produk
Banyak OEM menyesuaikan citra sistem AOSP untuk mengimplementasikan fitur mereka sendiri, serta persyaratan operator. Namun, penyesuaian tersebut membuat tidak mungkin menggunakan satu citra sistem untuk beberapa SKU perangkat lunak. Setiap gambar harus berbeda untuk mendukung penyesuaian, misalnya dengan lokal atau operator berbeda. Menggunakan partisi product
terpisah untuk memuat penyesuaian memungkinkan penggunaan satu citra sistem untuk beberapa SKU perangkat lunak. (Partisi system
menampung kode generik yang dapat dibagikan di antara banyak SKU perangkat lunak). Partisi vendor
terus menghosting kode BSP khusus SoC yang dapat dibagikan ke beberapa perangkat berdasarkan SoC tertentu.
Menggunakan partisi terpisah memiliki beberapa kelemahan, seperti mengelola ruang disk (sejumlah ruang harus tetap dicadangkan untuk pertumbuhan di masa depan) dan mempertahankan antarmuka biner aplikasi (ABI) yang stabil antar partisi. Sebelum memutuskan untuk menggunakan partisi product
, luangkan waktu untuk mempertimbangkan penerapan AOSP unik Anda dan kemungkinan taktik mitigasi (seperti mempartisi ulang perangkat selama pembaruan over-the-air (OTA) , yang tidak dilakukan oleh Google namun dilakukan oleh beberapa OEM ). Partisi dinamis akan menjadi solusi yang baik untuk ini.
Partisi dan izin produk
Di Android 9 dan lebih tinggi, perubahan dalam proses izin dan pemberian izin memengaruhi cara Anda memberikan izin aplikasi pribadi pada partisi `produk` Anda. File permissions.xml
harus berada di partisi yang sama dengan aplikasi priv. Menempatkan file permissions.xml
di partisi system
untuk aplikasi pribadi tidak memperluas izin tersebut ke aplikasi pribadi di partisi product
, meskipun yang pertama merupakan perpanjangan dari yang terakhir. Untuk detail tentang izin dan proses pemberian izin, lihat Daftar Izin Izin Istimewa .
Warisan /oem vs /produk
Kami memiliki dua jenis atribut partisi product
tergantung pada penerapan antarmuka produk . Selain itu, partisi product
berbeda dari partisi oem
lama:
Partisi | Atribut |
---|---|
oem |
|
product |
|
product (antarmuka yang diterapkan) |
|
Karena alasan ini, Android 9 mendukung partisi product
sambil tetap mempertahankan dukungan untuk partisi oem
lama, untuk perangkat yang bergantung padanya. Untuk memisahkan partisi product
dari partisi system
, Android 11 mendukung penerapan antarmuka product
.
/komponen produk
Partisi product
berisi komponen berikut:
- Properti sistem khusus produk (
/product/build.prop
) - RRO khusus produk (
/product/overlay/*.apk
) - Aplikasi khusus produk (
/product/app/*.apk
) - Aplikasi priv khusus produk (
/product/priv-app/*.apk
) - Pustaka khusus produk (
/product/lib/*
) - Pustaka Java khusus produk (
/product/framework/*.jar
) - Konfigurasi sistem Kerangka Android khusus produk (
/product/etc/sysconfig/*
dan/product/etc/permissions/*
) - File media khusus produk (
/product/media/audio/*
) - File
bootanimation
khusus produk
Tidak ada gambar_khusus
Anda tidak dapat menggunakan custom_images
. Mereka kekurangan dukungan untuk hal-hal berikut:
- Memasang modul ke target tertentu .
custom_images
mendukung penyalinan artefak ke dalam gambar tetapi tidak dapat memasang modul ke partisi tertentu dengan menentukan partisi targetnya sebagai bagian dari aturan pembangunan. - Dukungan segera .
custom_images
tidak dapat dibuat menggunakan sistem build Soong. - Dukungan pembaruan OTA .
custom_images
digunakan sebagai gambar ROM pabrik yang tidak dapat menerima pembaruan OTA.
Mempertahankan ABI antar partisi
Partisi product
di Android 9 merupakan perpanjangan dari partisi system
. Terdapat ABI yang lemah antara partisi product
dan system
, sehingga keduanya harus ditingkatkan secara bersamaan, dan ABI harus berbasis SDK sistem. Jika SDK sistem tidak mencakup semua permukaan API antara product
dan system
, OEM harus mempertahankan ABI mereka sendiri di antara kedua partisi tersebut.
Partisi product
dan system
dapat memiliki ketergantungan satu sama lain. Namun, pengujian dengan Generic System Image (GSI) harus berfungsi dengan baik tanpa partisi product
.
Ketika antarmuka product
diterapkan, partisi product
dipisahkan dengan partisi system
. Partisi product
hanya menggunakan antarmuka yang diizinkan dari partisi system
.
Partisi product
tidak boleh memiliki ketergantungan apa pun melalui antarmuka yang tidak stabil pada partisi vendor
. Interaksi langsung antara product
dan partisi vendor
dilarang. (Ini diberlakukan oleh SEpolicy.)
Menerapkan partisi produk
Sebelum menerapkan partisi produk baru, tinjau perubahan partisi produk terkait di AOSP . Kemudian, untuk menyiapkan product
, sertakan tanda papan atau pembuatan produk berikut:
-
BOARD_USES_PRODUCTIMAGE
-
BOARD_PRODUCTIMAGE_PARTITION_SIZE
-
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
-
PRODUCT_PRODUCT_PROPERTIES
untuk/product/build.prop
. Ini harus berada dalam$(call inherit-product path/to/device.mk)
, seperti padaPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Memasang modul ke partisi produk
Gunakan flag build berikut untuk menginstal modul ke partisi product
.
-
product_specific: true
diAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
diAndroid.mk
Mengaktifkan boot terverifikasi
Untuk mencegah partisi product
dirusak oleh perangkat lunak 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
.