Android 9 dan yang lebih baru menyertakan dukungan untuk membangun
Partisi product
menggunakan sistem build Android. Sebelumnya,
Android 8.x menerapkan pemisahan komponen khusus SoC
dari partisi system
ke vendor
tanpa menyediakan ruang untuk komponen khusus OEM yang dibuat dari
sistem build Android. Android 9 dan yang lebih baru memberikan
izin
dan daftar yang diizinkan yang berlaku untuk aplikasi pribadi di partisi berbeda.
Tentang partisi produk
Banyak OEM menyesuaikan {i>image<i} sistem AOSP untuk mengimplementasikan fitur mereka sendiri,
serta persyaratan ekspedisi. Namun, penyesuaian seperti itu
tidak mungkin menggunakan satu image sistem untuk beberapa SKU software. Masing-masing
harus berbeda untuk mendukung penyesuaian, seperti dengan
lokal atau operator yang berbeda. Menggunakan
partisi product
terpisah untuk menampung penyesuaian membuatnya
satu image sistem untuk beberapa SKU software. (
Partisi system
menghosting kode umum yang dapat digunakan bersama oleh
banyak SKU software). Partisi vendor
terus dihosting
Kode BSP khusus SoC yang dapat dibagikan di antara beberapa
perangkat berdasarkan SoC yang diberikan.
Menggunakan partisi terpisah memiliki
beberapa kelemahan, seperti
mengelola kapasitas {i>disk<i} (jumlah ruang yang terbatas harus tetap direservasi untuk masa
pertumbuhan) dan mempertahankan
antarmuka biner aplikasi (ABI) yang stabil antarpartisi. Sebelum pembaruan
memutuskan untuk menggunakan partisi product
, luangkan waktu untuk mempertimbangkan
implementasi AOSP unik dan kemungkinan taktik mitigasi (seperti
mempartisi ulang perangkat selama over-the-air
(OTA) update, yang tidak dilakukan oleh Google, tetapi dilakukan oleh beberapa OEM).
Partisi dinamis adalah
adalah solusi yang baik.
Partisi dan izin produk
Di Android 9 dan yang lebih tinggi, perubahan izin
dan proses pemberian izin memengaruhi cara Anda memberikan izin aplikasi pribadi
partisi `product`. 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 product
partisi, meskipun yang pertama adalah
kepanjangan dari yang terakhir.
Untuk detail mengenai proses izin dan pemberian izin, lihat
Pemberian Izin Hak Hak Istimewa.
/oem lama versus /product
Kita memiliki dua jenis atribut partisi product
tergantung
pada produk
penerapan antarmuka. Selain itu, partisi product
berbeda
dibandingkan 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 pada
anotasi. Untuk memisahkan partisi product
dari system
Android 11 mendukung
menerapkan product
antarmuka.
komponen /product
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 privasi 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
. Mereka tidak memiliki dukungan untuk
berikut ini:
- Menginstal modul ke target tertentu.
custom_images
mendukung penyalinan artefak ke dalam gambar, tetapi tidak dapat menginstal modul ke partisi tertentu dengan menentukan targetnya partisi sebagai bagian dari aturan build. - Dukungan segera.
custom_images
tidak boleh yang dibangun menggunakan sistem build Soong. - Dukungan update OTA.
custom_images
digunakan sebagai ROM pabrik yang tidak dapat menerima pembaruan OTA.
Mempertahankan ABI di antara partisi
Partisi product
di Android 9 adalah ekstensi dari
Partisi system
. Terdapat ABI yang lemah antara
product
dan system
, jadi keduanya harus
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
dari kedua partisi.
Partisi product
dan system
dapat memiliki
ketergantungan satu sama lain. Namun, pengujian dengan atribut
Generic System Image (GSI)
harus berfungsi dengan baik tanpa partisi product
.
Saat antarmuka product
diterapkan, product
partisi dipisahkan dengan partisi system
. product
hanya menggunakan antarmuka yang diizinkan dari partisi system
.
Partisi product
tidak boleh memiliki dependensi melalui antarmuka yang tidak stabil di
Partisi vendor
. Interaksi langsung antara
Partisi product
dan vendor
dilarang.
(Hal ini diberlakukan oleh SEpolicy.)
Mengimplementasikan partisi produk
Sebelum menerapkan partisi produk baru, tinjau
terkait
perubahan partisi produk di AOSP. Kemudian, untuk menyiapkan product
,
menyertakan flag board atau flag build produk berikut:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
untuk/product/build.prop
. ID 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
Aktifkan Booting Terverifikasi
Untuk mencegah partisi product
dirusak oleh
perangkat lunak berbahaya, mengaktifkan
Android
Booting Terverifikasi (AVB) untuk partisi tersebut (seperti yang Anda lakukan untuk
partisi vendor
dan system
). Untuk mengaktifkan AVB,
menyertakan flag build berikut:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.