Android 9 e versioni successive includono il supporto per la creazione di partizioni product
utilizzando il sistema di compilazione Android. In precedenza,
Android 8.x imponeva la separazione dei componenti specifici per SoC
dalla partizione system
alla partizione vendor
senza dedicare spazio ai componenti specifici per OEM costruiti dal
sistema di compilazione Android. Android 9 e versioni successive forniscono autorizzazioni aggiuntive e funzionalità di lista consentita che si applicano alle app private in partizioni diverse.
Informazioni sulle partizioni dei prodotti
Molti OEM personalizzano l'immagine di sistema AOSP per implementare le proprie funzionalità, nonché i requisiti dell'operatore. Tuttavia, queste personalizzazioni rendono impossibile utilizzare una singola immagine di sistema per più SKU di software. Ogni
immagine deve essere diversa per supportare le personalizzazioni, ad esempio con
lingue o operatori diversi. L'utilizzo di una
partizione product
separata per contenere le personalizzazioni consente di
utilizzare una singola immagine di sistema per più SKU di software. La partition system
ospita codice generico che può essere condiviso tra molti SKU di software. La partizione vendor
continua a ospitare il codice BSP specifico per l'SoC, che può essere condiviso tra più dispositivi in base al SoC in questione.
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 a bit dell'applicazione (ABI) stabile tra le partizioni. Prima di decidere di utilizzare le partizioni product
, prenditi del tempo per valutare la tua implementazione AOSP unica e le possibili tattiche di mitigazione (ad esempio la ripartizione di un dispositivo durante un aggiornamento over-the-air (OTA), che non viene eseguita da Google, ma da alcuni OEM).
Il partizionamento dinamico è una buona soluzione per questo problema.
Partizioni e autorizzazioni dei prodotti
In Android 9 e versioni successive, una modifica della procedura di autorizzazione
e della lista consentita influisce sul modo in cui concedi le autorizzazioni priv-apps alle
partizioni "product". Il file permissions.xml
deve trovarsi nella stessa partizione delle app private. Il posizionamento di un file permissions.xml
nella partizione system
per le app con privilegi non estende queste autorizzazioni alle app con privilegi nella partizione product
, anche se la prima è un'estensione della seconda.
Per informazioni dettagliate sulle autorizzazioni e sulle procedure di inserimento nella lista consentita, consulta
Inserimento nella lista consentita delle autorizzazioni con privilegi.
/oem legacy e /product
Esistono due tipi di attributi della partizione product
a seconda della applicazione dell'interfaccia del prodotto. Inoltre, la partizione product
è diversa
dalla partizione oem
precedente:
Partizione | Attributi |
---|---|
oem |
|
product |
|
product (interfacce applicate) |
|
Per questi motivi, Android 9 supporta la partizione product
mantenendo il supporto per la partizione oem
precedente per i dispositivi che ne dipendono. Per disaccoppiare la partizione product
dalla partizione system
, Android 11 supporta la applicazione delle interfacce product
.
/componenti prodotto
La partizione product
contiene i seguenti componenti:
- Proprietà di sistema specifiche del prodotto (
/product/build.prop
) - RRO specifici per prodotto (
/product/overlay/*.apk
) - App specifiche per prodotto (
/product/app/*.apk
) - App private specifiche del prodotto (
/product/priv-app/*.apk
) - Librerie specifiche per prodotto (
/product/lib/*
) - Librerie Java specifiche del prodotto (
/product/framework/*.jar
) - Configurazioni di sistema del framework Android specifiche per il prodotto
(
/product/etc/sysconfig/*
e/product/etc/permissions/*
) - File multimediali specifici per il prodotto (
/product/media/audio/*
) - File
bootanimation
specifici del prodotto
Nessun custom_images
Non puoi utilizzare custom_images
. Non supportano quanto segue:
- Installazione di moduli in un target specifico.
custom_images
supporta la copia degli elementi in un'immagine, ma non può installare un modulo in una partizione specifica specificandone la partizione di destinazione all'interno di una regola di compilazione. - Assistenza Soong.
custom_images
non può essere compilato utilizzando il sistema di compilazione Soong. - Assistenza per gli aggiornamenti OTA.
custom_images
vengono utilizzate come immagini della ROM di fabbrica che non possono ricevere aggiornamenti OTA.
Mantenere gli 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
, pertanto è necessario eseguire l'upgrade di entrambe contemporaneamente e l'ABI deve essere basato sull'SDK di sistema. Se l'SDK di sistema non copre tutte le API tra product
e system
, gli OEM devono gestire i propri ABI tra le due partizioni.
Le partizioni product
e system
possono essere dipendenti l'una dall'altra. Tuttavia, i test con l'immagine di sistema generica (GSI) devono funzionare correttamente senza la partizione product
.
Quando le interfacce product
vengono applicate, 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 dipendenze tramite interfacce instabili sulla partizione vendor
. L'interazione diretta tra le partizioni product
e vendor
è vietata.
(Questa operazione viene applicata da SEpolicy.)
Implementare le partizioni dei prodotti
Prima di implementare una nuova partizione del prodotto, esamina le
modifiche correlate alla partizione del prodotto in AOSP. Poi, per configurare product
,
includi i seguenti flag di build della scheda o del prodotto:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
per/product/build.prop
. Devono trovarsi all'interno di un$(call inherit-product path/to/device.mk)
, come inPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Installa un modulo nella partizione del prodotto
Utilizza i seguenti flag di compilazione per installare un modulo nella partizione product
.
product_specific: true
inAndroid.bp
LOCAL_PRODUCT_MODULE := true
inAndroid.mk
Attiva Avvio verificato
Per impedire che la partizione product
venga manomessa da software dannoso, attiva Avvio verificato (AVB) di Android per quella partizione (come faresti per le partizioni vendor
e system
). Per abilitare AVB,
includi i seguenti flag di compilazione:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.