Extensiones SDK

El módulo Extensiones de SDK decide el nivel de SDK de extensión del dispositivo y proporciona API para que las aplicaciones consulten el nivel de SDK de extensión. Este módulo es actualizable, lo que significa que puede recibir actualizaciones de funcionalidad fuera del ciclo de lanzamiento normal de Android.

SDK Extensions es responsable de:

  • Decidir el nivel SDK de extensión del dispositivo.
  • Proporcionar API para que las aplicaciones consulten el nivel del SDK de la extensión.
  • (A partir de Android 12) Determinación de los valores de las variables de entorno BOOTCLASSPATH , DEX2OATBOOTCLASSPATH y SYSTEMSERVERCLASSPATH .

Formato del módulo

El módulo de extensiones SDK ( com.android.sdkext ) está en formato APEX y está disponible para dispositivos con Android 11 o superior.

formato de paquete

El módulo de extensiones SDK ( com.google.android.sdkext ) está en formato APEX y contiene los siguientes componentes:

  • (A partir de Android 12) bin/derive_classpath : un binario nativo que se ejecuta al principio del proceso de arranque del dispositivo. Lee archivos de configuración de classpath individuales del sistema y otros módulos, los fusiona y define la definición de las variables de entorno CLASSPATH .

  • bin/derive_sdk : un binario nativo que se ejecuta al principio del proceso de arranque del dispositivo y lee los metadatos de otros módulos para establecer las propiedades del sistema relacionadas con el SDK de la extensión (por ejemplo, build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : este archivo está en bootclasspath que expone las API a las aplicaciones para consultar el nivel del SDK de la extensión.

Derivación del nivel de SDK de la extensión

El programa derive_sdk lee los metadatos almacenados como archivos protobuf binarios en la subruta etc/sdkinfo.binarypb dentro de cada módulo APEX. Para obtener detalles sobre la estructura de protobuf, consulte el archivo protobuf .

Nivel de SDK de extensión de lectura

El módulo SDK Extensions expone una clase java de SdkExtensions en el paquete android.os.ext . Utilice el getExtensionVersion(int) para leer la versión de una extensión SDK (por ejemplo, getExtensionVersion(Build.VERSION_CODES.R) ).

Derivación de classpaths

El servicio derive_classpath lee y fusiona archivos de configuración individuales en /system/etc/classpaths/ y /apex/*/etc/classpaths/ . Cada configuración almacena el mensaje protobuf de classpaths.proto en un formato binario proto. El algoritmo de combinación exacto que determina el orden de las entradas de classpath se describe en derive_classpath.cpp y puede cambiar con el tiempo.