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.

Extensiones SDK es responsable de:

  • Decidir el nivel de extensión SDK del dispositivo.
  • Proporcionar API para que las aplicaciones consulten el nivel del SDK de 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 SDK Extensions ( 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 temprano en el proceso de arranque del dispositivo y lee metadatos de otros módulos para establecer propiedades del sistema relacionadas con la extensión SDK (por ejemplo, build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : este archivo se encuentra en la ruta de clase de arranque que expone las API a las aplicaciones para consultar el nivel del SDK de extensión.

Derivando el nivel del SDK de extensión

El programa derive_sdk lee los metadatos almacenados como archivos binarios protobuf 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 SdkExtensions en el paquete android.os.ext . Utilice el método getExtensionVersion(int) para leer la versión de una extensión del SDK (por ejemplo, getExtensionVersion(Build.VERSION_CODES.R) ).

Derivando rutas de clases

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