Il modulo Estensioni SDK stabilisce il livello dell'SDK dell'estensione del dispositivo e fornisce API per consentire alle app di eseguire query sul livello SDK dell'estensione. Questo modulo è aggiornabile, il che significa che può ricevere aggiornamenti delle funzionalità al di fuori del normale ciclo di rilascio di Android.
SDK Extensions è responsabile di:
- Decidere il livello SDK dell'estensione del dispositivo.
- Fornire API per consentire alle app di eseguire query a livello di 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 codice binario nativo eseguito all'inizio della procedura di avvio del dispositivo. Legge i singoli file di configurazione di 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 all'inizio della procedura di avvio del dispositivo e legge i metadati di altri moduli per impostare le proprietà di sistema relative all'SDK dell'estensione (ad esempiobuild.version.extensions.r
).javalib/framework-sdkextension.jar
: questo file si trova nel percorso di caricamento iniziale che espone le API alle app per eseguire query a livello di SDK dell'estensione.
Livello SDK dell'estensione dedotto
Il programma derive_sdk
legge i metadati archiviati come file protobuf binari nel percorso secondario etc/sdkinfo.binarypb
all'interno di ogni modulo APEX. Per maggiori dettagli sulla struttura
protobuf, consulta il file
protobuf
.
Livello SDK estensione di lettura
Il modulo Estensioni SDK mostra 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)
).
Derive classpaths
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 di classpaths.proto
in un formato proto binario. L'algoritmo di unione esatto che determina l'ordine
delle voci del percorso di classe è descritto in
derive_classpath.cpp
e potrebbe cambiare nel tempo.