Partizioni di prodotti

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
  • Non aggiornabile; in genere viene eseguito il flashing una volta in fabbrica.
  • Creato per piccole variazioni, come branding e colore. I contenuti della partizione oem diversi non indicano che il software del prodotto sia diverso.
  • La partizione system non dipende dalla partizione oem. Utilizza la partizione oem solo quando viene trovato un file specifico.
  • Utilizza solo l'API pubblica nella partizione system.
product
  • Aggiornabile
  • Accoppiato all'immagine di sistema (si aggiornano insieme)
  • Creato per prodotto o famiglie di prodotti.
  • La partizione di sistema può dipendere dalla partizione product.
  • Possono utilizzare API non pubbliche perché vengono aggiornate contemporaneamente.
product (interfacce applicate)
  • Aggiornabile
  • Scollegando l'immagine di sistema.
  • Creato per prodotto o famiglie di prodotti.
  • La partizione system non dipende dalla partizione product.
  • Non può utilizzare le API nascoste, ma utilizza solo le API pubbliche e di sistema nella system partizione.

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