Livello API del fornitore

Il livello API del fornitore si riferisce alla versione dell'interfaccia supportata dalla partizione del fornitore. L'interfaccia è bidirezionale; descrive l'API che la partizione del fornitore fornisce alla partizione di sistema (il livello di astrazione hardware o l'interfaccia HAL) e anche l'API che la partizione del fornitore richiede dalla partizione di sistema (il kit di sviluppo per sviluppatori nativi di basso livello o l'interfaccia LLNDK).

Il livello dell'API del fornitore viene utilizzato anche per determinare i requisiti del software del fornitore (VSR), ovvero una raccolta di requisiti funzionali e non funzionali che il software nella partizione del fornitore deve soddisfare.

Il resto di questa pagina spiega come vengono utilizzate le proprietà di sistema, a seconda della versione di Android, per determinare il livello API del fornitore.

Blocco del fornitore

Android consente a un fornitore di bloccare la partizione del fornitore in una versione specifica della VSR. L'insieme di funzionalità che Android si aspetta dalla partizione del fornitore è determinato dal livello dell'API del fornitore associato alla partizione. In fase di runtime, il comportamento del software in esecuzione nella partizione di sistema viene adattato per adattarsi al livello dell'API del fornitore della partizione del fornitore. Ad esempio, il software nella partizione di sistema potrebbe non utilizzare le nuove funzionalità se non sono supportate dal livello API della partizione del fornitore.

Il blocco del fornitore è disponibile solo se stai creando un dispositivo compatibile con Android.

Determinazione del livello API del fornitore (Android 14-QPR3 e versioni successive)

Per Android 14-QPR3 e versioni successive, il livello API del fornitore viene rilasciato separatamente, il che significa che il livello API dell'SDK e il livello API del fornitore non sono sincronizzati.

A causa delle pianificazioni di rilascio separate, per Android 14-QPR3 e versioni successive, il livello dell'API del fornitore è completamente disaccoppiato dal livello dell'API dell'SDK. Per garantire la chiarezza di questo disaccoppiamento, il formato del livello API del fornitore è una data formattata come AAAAMM (anno e mese), mentre il livello SDK è un numero intero.

Android 14-QPR3 e versioni successive contiene le seguenti proprietà di sistema relative al livello API del fornitore (ro.vendor.api_level):

Proprietà di sistema Formato Descrizione Impostazione iniziale
ro.board.api_level AAAAMM Il livello API del fornitore supportato dal software di un chipset. Questa proprietà è impostata per tutti i chipset. Viene impostato automaticamente dal sistema di compilazione.
ro.board.first_api_level AAAAMM Il livello API del fornitore con cui è stato rilasciato per la prima volta il software di un chipset. Questa proprietà è una funzione di solo chipset ed è impostata dai fornitori di SoC se il chipset SoC è idoneo per il blocco del fornitore. Dopo l'impostazione iniziale, non deve essere modificato. I fornitori di SoC impostano questa impostazione utilizzando BOARD_SHIPPING_API_LEVEL.
ro.product.first_api_level Numero intero Il livello API SDK con cui il dispositivo viene avviato inizialmente. Questa proprietà viene impostata dall'OEM e non viene mai aggiornata, nemmeno dopo gli upgrade del sistema operativo.
ro.vendor.api_level AAAAMM Il livello API del fornitore a cui deve essere conforme il dispositivo nel suo complesso. Descritto dopo questa tabella.
ro.board.api_frozen booleano Questa proprietà viene impostata su true se il livello dell'API del fornitore rappresentato da ro.board.api_level è stato finalizzato. Se questa proprietà non è impostata, il valore predefinito è false.
ro.llndk.api_level AAAAMM Il livello API del fornitore nel formato AAAAMM fornito dall'attuale LLNDK nella partizione di sistema. LLNDK è compatibile con le versioni precedenti, pertanto qualsiasi immagine del fornitore precedente o uguale a questo livello API può essere flashata con questa immagine di sistema. Questa proprietà viene impostata dalla partizione di sistema.

La proprietà ro.vendor.api_level viene derivata in uno dei due seguenti modi:

  • Se il chipset è idoneo per il blocco del fornitore:

    ro.vendor.api_level = min(
      ro.board.api_level,
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))
    
  • Se il chipset non è bloccato al fornitore:

    ro.vendor.api_level =
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
    

Il metodo AVendorSupport_getVendorApiLevelOf() determina il corrispondente livello API del fornitore da un livello API dell'SDK. Ad esempio, AVendorSupport_getVendorApiLevelOf(35), dove 35 è il livello API SDK della release principale di Android nel 2024, restituisce 202404, che è la data approssimativa per Android 14-QPR3 quando è stato impostato il livello API fornitore corrente.

Determinare il livello API del fornitore (Android 13)

Il livello API del fornitore segue il livello API dell'SDK, che è destinato all'interfaccia app-OS e viene aggiornato una volta all'anno quando la nuova piattaforma Android viene rilasciata in AOSP.

Android 13 contiene le seguenti proprietà di sistema relative al livello API del fornitore (ro.vendor.api_level):

Proprietà di sistema Formato Descrizione Impostazione iniziale
ro.board.first_api_level Numero intero Il livello API del fornitore con cui è stato rilasciato per la prima volta il software di un chipset. Si tratta di una funzione solo del chipset e non può essere modificata dai fornitori di SoC o dagli OEM. Questa proprietà viene impostata solo per i chipset idonei al blocco del fornitore Il valore viene stabilito impostando BOARD_SHIPPING_API_LEVEL nel file device.mk.
ro.board.api_level Numero intero Il livello API del fornitore supportato dal software di un chipset. Questa proprietà viene impostata solo per i chipset idonei al blocco del fornitore. Questa proprietà è impostata per tutti i chipset. Inizialmente, il valore di questa proprietà viene impostato dal sistema di compilazione sullo stesso valore di ro.board.first_api_level, ma può essere aggiornato se viene eseguito l'upgrade della partizione del fornitore.
ro.product.first_api_level Numero intero Il livello API SDK con cui il dispositivo viene avviato inizialmente. Questa proprietà viene impostata dall'OEM e non viene mai aggiornata, nemmeno dopo gli upgrade del sistema operativo.
ro.vendor.api_level Numero intero Il livello API del fornitore a cui deve essere conforme il dispositivo nel suo complesso. Descrizione dopo questa tabella.
ro.vndk.version Numero intero La versione di VNDK su cui è basata la partizione del fornitore. Questa proprietà viene impostata dalla partizione di sistema.
ro.vendor.build.version.sdk Numero intero Il livello API SDK della struttura di origine in cui è stata creata la partizione del fornitore.
ro.vendor.build.version.release Numero intero La versione della piattaforma dell'albero di origine in cui è stata creata la partizione del fornitore.
ro.vendor.build.version.release_or_codename Numero intero Il nome in codice della struttura ad albero di origine in cui è stata creata la partizione del fornitore.

La proprietà ro.vendor.api_level viene impostata automaticamente sul valore minimo di ro.board.api_level (o ro.board.first_api_level se ro.board.api_level non è definito) e ro.product.first_api_level.