Estensioni SDK

Il modulo Estensioni SDK stabilisce il livello SDK di estensione del dispositivo e fornisce API che consentono alle app di eseguire query a livello di SDK dell'estensione. Questo modulo è aggiornabile, vale a dire 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) Determinare i valori degli attributi BOOTCLASSPATH, DEX2OATBOOTCLASSPATH e SYSTEMSERVERCLASSPATH variabili di ambiente.

Formato del modulo

Il modulo Estensioni SDK (com.android.sdkext) è in 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: A binario nativo eseguito nelle prime fasi dell'avvio del dispositivo e il processo di sviluppo. Legge i singoli file di configurazione di classpath dal sistema altri moduli, li unisce e definisce la definizione di CLASSPATH variabili di ambiente.

  • bin/derive_sdk: un programma binario nativo eseguito nelle prime fasi del processo di avvio del dispositivo. e legge i metadati degli altri moduli per impostare le proprietà di sistema relative dell'estensione SDK (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 a livello di SDK dell'estensione.

Ricava livello di SDK delle estensioni

Il programma derive_sdk legge i metadati archiviati come file protobuf binari nella etc/sdkinfo.binarypb percorso secondario all'interno di ogni modulo APEX. Per maggiori dettagli su protobuf struttura, fai riferimento protobuf .

Livello SDK estensione di lettura

Il modulo Estensioni SDK mostra SdkExtensions classe java nel pacchetto android.os.ext. Usa getExtensionVersion(int) per leggere la versione di un'estensione SDK (ad esempio, getExtensionVersion(Build.VERSION_CODES.R)).

Estrazione di percorsi delle classi

Il servizio derive_classpath legge e unisce i singoli file di configurazione /system/etc/classpaths/ e /apex/*/etc/classpaths/. Ogni configurazione archivia messaggio protobuf da classpaths.proto in un formato binario proto. L'esatto algoritmo di unione che determina l'ordine delle voci classpath è descritto in derive_classpath.cpp e potrebbero cambiare nel tempo.