Estensioni SDK

Il modulo Estensioni SDK stabilisce il livello dell'SDK dell'estensione del dispositivo e fornisce API per consentire alle app di eseguire query sul livello SDK dell'estensione. Questo modulo è aggiornabile, il che significa che può ricevere aggiornamenti delle funzionalità al di fuori del normale ciclo di rilascio di Android.

SDK Extensions è responsabile di:

  • Decidere il livello SDK dell'estensione del dispositivo.
  • Fornire API per consentire alle app di eseguire query a livello di SDK dell'estensione.
  • (A partire da Android 12) Determinazione dei valori per le variabili di ambiente BOOTCLASSPATH, DEX2OATBOOTCLASSPATH e SYSTEMSERVERCLASSPATH.

Formato del modulo

Il modulo Estensioni SDK (com.android.sdkext) è in formato APEX ed è disponibile per i dispositivi con Android 11 o versioni successive.

Formato del pacchetto

Il modulo Estensioni SDK (com.google.android.sdkext) è in formato APEX e contiene i seguenti componenti:

  • (A partire da Android 12) bin/derive_classpath: un codice binario nativo eseguito all'inizio della procedura di avvio del dispositivo. Legge i singoli file di configurazione di classpath dal sistema e da altri moduli, li unisce e definisce la definizione delle variabili di ambiente CLASSPATH.

  • bin/derive_sdk: un file binario nativo che viene eseguito all'inizio della procedura di avvio del dispositivo e legge i metadati di altri moduli per impostare le proprietà di sistema relative all'SDK dell'estensione (ad esempio build.version.extensions.r).

  • javalib/framework-sdkextension.jar: questo file si trova nel percorso di caricamento iniziale che espone le API alle app per eseguire query a livello di SDK dell'estensione.

Livello SDK dell'estensione dedotto

Il programma derive_sdk legge i metadati archiviati come file protobuf binari nel percorso secondario etc/sdkinfo.binarypb all'interno di ogni modulo APEX. Per maggiori dettagli sulla struttura protobuf, consulta il file protobuf.

Livello SDK estensione di lettura

Il modulo Estensioni SDK mostra una classe Java SdkExtensions nel pacchetto android.os.ext. Utilizza il metodo getExtensionVersion(int) per leggere la versione di un'estensione dell'SDK (ad esempio, getExtensionVersion(Build.VERSION_CODES.R)).

Derive classpaths

Il servizio derive_classpath legge e unisce i singoli file di configurazione in /system/etc/classpaths/ e /apex/*/etc/classpaths/. Ogni configurazione memorizza il messaggio protobuf di classpaths.proto in un formato proto binario. L'algoritmo di unione esatto che determina l'ordine delle voci del percorso di classe è descritto in derive_classpath.cpp e potrebbe cambiare nel tempo.