Il modulo Estensioni SDK decide il livello SDK di estensione del dispositivo e fornisce API affinché le app possano interrogare il livello SDK di estensione. Questo modulo è aggiornabile, il che significa che può ricevere aggiornamenti alle funzionalità al di fuori del normale ciclo di rilascio di Android.
Le estensioni SDK sono responsabili di:
- Decidere il livello SDK dell'estensione del dispositivo.
- Fornitura di API per le app per eseguire query sul livello SDK dell'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 file binario nativo che viene eseguito nelle prime fasi del processo 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 file binario nativo che viene eseguito nelle prime fasi del processo di avvio del dispositivo e legge i metadati di altri moduli per impostare le proprietà di sistema correlate all'SDK di estensione (ad esempio,build.version.extensions.r
).javalib/framework-sdkextension.jar
: questo file si trova nel percorso bootclass che espone le API alle app per eseguire query sul livello SDK dell'estensione.
Derivazione del livello SDK dell'estensione
Il programma derive_sdk
legge i metadati archiviati come file protobuf binari nel percorso secondario etc/sdkinfo.binarypb
all'interno di ciascun modulo APEX. Per dettagli sulla struttura del protobuf, fare riferimento al file protobuf
.
Lettura del livello SDK dell'estensione
Il modulo SDK Extensions 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)
).
Derivazione dei percorsi di classe
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 un formato proto binario. L'esatto algoritmo di fusione che determina l'ordine delle voci del classpath è descritto in derive_classpath.cpp
e potrebbe cambiare nel tempo.