Estensioni SDK

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

Le estensioni SDK sono responsabili di:

  • Determinare il livello dell'SDK di estensione del dispositivo.
  • Fornire API per consentire alle app di eseguire query sul livello dell'SDK di 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 binario nativo che viene eseguito all'inizio della procedura di avvio del dispositivo. Legge i singoli file di configurazione del classpath dal sistema e da altri moduli, li unisce e definisce la definizione delle variabili di ambiente CLASSPATH.

  • bin/derive_sdk: un 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 di estensione (ad esempio, build.version.extensions.r).

  • javalib/framework-sdkextension.jar: Questo file si trova nel bootclasspath che espone le API alle app per eseguire query sul livello dell'SDK di estensione.

Derivare il livello dell'SDK dell'estensione

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

Leggi il livello dell'SDK di estensione

Il modulo Estensioni SDK espone 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)).

Derivare i classpath

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 da classpaths.proto in formato binario proto. L'algoritmo di unione esatto che determina l'ordine delle voci del classpath è descritto in derive_classpath.cpp e potrebbe cambiare nel tempo.