Il modulo 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:
- Decidere 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,DEX2OATBOOTCLASSPATHeSYSTEMSERVERCLASSPATH.
Formato del modulo
Il modulo SDK Extensions (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 file 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 ambienteCLASSPATH.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 percorso secondario
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 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.