Android 9 e versioni successive includono il supporto per la creazione di partizioni del product
utilizzando il sistema di build Android. In precedenza, Android 8.x imponeva la separazione dei componenti specifici del SoC dalla partizione di system
alla partizione del vendor
senza dedicare spazio ai 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 del vettore. Tuttavia, tali personalizzazioni rendono impossibile utilizzare una singola 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 del product
separata per contenere le personalizzazioni rende possibile utilizzare un'unica immagine di sistema per più SKU software. (La partizione di system
ospita codice generico che può essere condiviso tra molti SKU software). La partizione del 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 product
partizioni del 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 whitelisting influisce sul modo in cui concedi i permessi delle app private alle partizioni del tuo "prodotto". Il file permissions.xml
deve risiedere nella stessa partizione delle app priv. Posizionare un file permissions.xml
nella partizione di system
per le app priv non estende tali autorizzazioni alle app priv nella partizione del product
, anche se la prima è un'estensione della seconda. Per dettagli sulle autorizzazioni e sui processi di whitelist, vedere Whitelisting di autorizzazioni privilegiate .
Legacy / oem vs / prodotto
Abbiamo due tipi di attributi della partizione del product
seconda dell'applicazione dell'interfaccia del prodotto . Inoltre, la partizione del product
è diversa dalla partizione oem
legacy:
Partizione | Attributi |
---|---|
oem |
|
product |
|
product (interfacce applicate) |
|
Per questi motivi, Android 9 supporta la partizione del product
pur mantenendo il supporto per la partizione oem
legacy, per i dispositivi che dipendono da essa. Per disaccoppiare la partizione del product
dalla partizione di system
, Android 11 supporta l' applicazione delle interfacce del product
.
/ componenti del prodotto
La partizione del 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
/product/priv-app/*.apk
specifiche del prodotto (/product/priv-app/*.apk
) - Librerie specifiche del
/product/lib/*
(/product/lib/*
) - Librerie java specifiche del prodotto (
/product/framework/*.jar
) - Configurazioni del sistema Android Framework specifiche del
/product/etc/sysconfig/*
(/product/etc/sysconfig/*
e/product/etc/permissions/*
) - File multimediali specifici del
/product/media/audio/*
(/product/media/audio/*
) - File di
bootanimation
specifici del prodotto
Nessuna immagine_personalizzata
Non puoi usare custom_images
. Mancano di 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 specificando la sua partizione di destinazione come parte di una regola di compilazione. - Soong supporto .
custom_images
non può essere creato utilizzando il sistema di compilazione Soong. - Supporto per l'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 del product
in Android 9 è un'estensione della partizione di system
. C'è un ABI debole tra product
partizioni del product
e del system
, quindi entrambe devono essere aggiornate contemporaneamente e l'ABI dovrebbe essere basato sull'SDK di 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 del product
e del system
possono dipendere l'una dall'altra. Tuttavia, i test con Generic System Image (GSI) devono funzionare correttamente senza la partizione del product
.
Quando vengono applicate le interfacce del product
, la partizione del product
viene disaccoppiata dalla partizione di system
. La partizione del product
utilizza solo le interfacce consentite dalla partizione di system
.
La partizione del product
non deve avere alcuna dipendenza dalla partizione del vendor
. È vietata l'interazione diretta tra il product
e le partizioni del vendor
. (Questo è applicato da SEpolicy.)
Implementazione di partizioni di prodotto
Prima di implementare una nuova partizione del prodotto, esaminare le relative modifiche alla partizione del prodotto in AOSP . Quindi, per impostare il product
, includi i seguenti flag di scheda o build 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 del product
.
-
product_specific: true
inAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
inAndroid.mk
Abilitazione dell'avvio verificato
Per evitare che la partizione del product
venga manomessa da software dannoso, abilitare Android Verified Boot (AVB) per quella partizione (proprio come si fa per il vendor
e system
partizioni di system
). Per abilitare AVB, includi i seguenti flag di build: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.