Partizioni del prodotto

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
  • Non aggiornabile; di solito lampeggia una volta in fabbrica.
  • Costruito in base a piccole variazioni, come marchio e colore. Avere contenuti diversi della partizione oem non significa che il software del prodotto sia diverso.
  • La partizione system non dipende dalla partizione oem . (Utilizza la partizione oem solo quando vi viene trovato un file specifico).
  • Utilizza solo l'API pubblica sulla partizione system .
product
  • Aggiornabile
  • Accoppiato con l'immagine del sistema (si aggiornano insieme)
  • Costruito per prodotto o famiglie di prodotti.
  • La partizione del sistema può dipendere dalla partizione product .
  • Può utilizzare API non pubbliche poiché vengono aggiornate simultaneamente.
product (interfacce forzate)
  • Aggiornabile
  • Disaccoppiato dall'immagine del sistema.
  • Costruito per prodotto o famiglie di prodotti.
  • La partizione system non dipende dalla partizione product .
  • Non è possibile utilizzare API nascoste, ma utilizza solo API pubbliche e di sistema sulla partizione system .

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 in PRODUCT_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 in Android.bp
  • LOCAL_PRODUCT_MODULE := true in Android.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 .