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
eSYSTEMSERVERCLASSPATH
.
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.