Android 9 e versioni successive includono il supporto per la creazione di partizioni product
utilizzando il sistema di build Android. In precedenza, Android 8.x imponeva la separazione dei componenti specifici del SoC dalla partizione system
alla partizione vendor
senza dedicare spazio per i componenti specifici dell'OEM creati dal sistema di build Android. Android 9 e versioni successive forniscono autorizzazioni aggiuntive e funzionalità di whitelist che si applicano alle app private su partizioni diverse.
Informazioni sulle partizioni del prodotto
Molti OEM personalizzano l'immagine del sistema AOSP per implementare le proprie funzionalità, nonché i requisiti dell'operatore. Tuttavia, tali personalizzazioni rendono impossibile l'utilizzo di un'unica immagine di sistema per più SKU software. Ogni immagine deve essere diversa per supportare le personalizzazioni, ad esempio con impostazioni locali o operatori diversi. L'utilizzo di una partizione product
separata per contenere le personalizzazioni consente di utilizzare un'unica immagine di sistema per più SKU software. (La partizione system
ospita codice generico che può essere condiviso tra molti SKU software). La partizione vendor
continua a ospitare il codice BSP specifico del SoC che può essere condiviso tra più dispositivi in base al SoC specificato.
L'utilizzo di partizioni separate presenta alcuni svantaggi, come la gestione dello spazio su disco (una quantità limitata di spazio deve rimanere riservata per la crescita futura) e il mantenimento di un'interfaccia binaria dell'applicazione (ABI) stabile tra le partizioni. Prima di decidere di utilizzare le partizioni product
, prenditi del tempo per considerare la tua implementazione AOSP unica e le possibili tattiche di mitigazione (come il ripartizionamento di un dispositivo durante un aggiornamento over-the-air (OTA) , che non viene eseguito da Google ma da alcuni OEM) ). Il partizionamento dinamico sarà una buona soluzione per questo.
Partizioni e autorizzazioni del prodotto
In Android 9 e versioni successive, una modifica alle autorizzazioni e al processo di inserimento nella whitelist influisce sul modo in cui concedi le autorizzazioni alle app private sulle partizioni "prodotto". Il file permissions.xml
deve risiedere nella stessa partizione di priv-apps. L'inserimento di un file permissions.xml
nella partizione system
per priv-apps non estende tali permessi a priv-apps nella partizione product
, anche se il primo è un'estensione del secondo. Per informazioni dettagliate sulle autorizzazioni e sui processi di inserimento nella whitelist, vedere Inserimento nella lista consentita delle autorizzazioni privilegiate .
Legacy /oem vs /prodotto
Sono disponibili due tipi di attributi della partizione product
a seconda dell'applicazione dell'interfaccia del prodotto . Inoltre, la partizione product
è diversa dalla partizione oem
legacy:
Partizione | Attributi |
---|---|
oem |
|
product |
|
product (interfacce forzate) |
|
Per questi motivi, Android 9 supporta la partizione product
pur mantenendo il supporto per la partizione legacy oem
, per i dispositivi che dipendono da essa. Per separare la partizione product
dalla partizione system
, Android 11 supporta l'applicazione delle interfacce product
.
/componenti del prodotto
La partizione product
contiene i seguenti componenti:
- Proprietà di sistema specifiche del prodotto (
/product/build.prop
) - RRO specifici del prodotto (
/product/overlay/*.apk
) - App specifiche del prodotto (
/product/app/*.apk
) - App private specifiche del prodotto (
/product/priv-app/*.apk
) - Librerie specifiche del prodotto (
/product/lib/*
) - Librerie Java specifiche del prodotto (
/product/framework/*.jar
) - Configurazioni di sistema Android Framework specifiche del prodotto (
/product/etc/sysconfig/*
e/product/etc/permissions/*
) - File multimediali specifici del prodotto (
/product/media/audio/*
) - File
bootanimation
specifici del prodotto
Nessuna immagine_personalizzata
Non puoi utilizzare custom_images
. Non dispongono del supporto per quanto segue:
- Installazione di moduli in una destinazione specifica .
custom_images
supporta la copia di artefatti in un'immagine ma non può installare un modulo in una partizione specifica specificandone la partizione di destinazione come parte di una regola di compilazione. - Presto supporto .
custom_images
non può essere creato utilizzando il sistema di compilazione Soong. - Supporto aggiornamento OTA .
custom_images
vengono utilizzate come immagini ROM di fabbrica che non possono ricevere aggiornamenti OTA.
Mantenimento degli ABI tra le partizioni
La partizione product
in Android 9 è un'estensione della partizione system
. Esiste un'ABI debole tra le partizioni product
e system
, quindi è necessario aggiornarle entrambe contemporaneamente e l'ABI deve essere basata sull'SDK del sistema. Se l'SDK di sistema non copre tutte le superfici API tra product
e system
, gli OEM devono mantenere i propri ABI tra le due partizioni.
Le partizioni product
e system
possono dipendere l'una dall'altra. Tuttavia, i test con l' immagine di sistema generica (GSI) devono funzionare correttamente senza la partizione product
.
Quando vengono applicate le interfacce product
, la partizione product
viene disaccoppiata dalla partizione system
. La partizione product
utilizza solo le interfacce consentite dalla partizione system
.
La partizione product
non deve avere alcuna dipendenza tramite interfacce instabili sulla partizione vendor
. È vietata l'interazione diretta tra le partizioni product
e vendor
. (Ciò è imposto da SEpolicy.)
Implementazione delle partizioni del prodotto
Prima di implementare una nuova partizione del prodotto, rivedere le modifiche alla partizione del prodotto correlate in AOSP . Quindi, per configurare product
, includi i seguenti flag di scheda o di creazione del prodotto:
-
BOARD_USES_PRODUCTIMAGE
-
BOARD_PRODUCTIMAGE_PARTITION_SIZE
-
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
-
PRODUCT_PRODUCT_PROPERTIES
per/product/build.prop
. Questi devono essere all'interno di$(call inherit-product path/to/device.mk)
, come inPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Installazione di un modulo nella partizione del prodotto
Utilizzare i seguenti flag di build per installare un modulo nella partizione product
.
-
product_specific: true
inAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
inAndroid.mk
Abilitazione dell'avvio verificato
Per evitare che la partizione product
venga manomessa da software dannoso, abilita Android Verified Boot (AVB) per quella partizione (proprio come fai per le partizioni del vendor
e system
). Per abilitare AVB, includere i seguenti flag di build: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.