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,DEX2OATBOOTCLASSPATHeSYSTEMSERVERCLASSPATH.
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 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
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.