Estensioni SDK

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 e SYSTEMSERVERCLASSPATH .

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 ambiente CLASSPATH .

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