Extensões do SDK

O módulo SDK Extensions decide o nível do SDK de extensão do dispositivo e fornece APIs para aplicativos consultarem o nível do SDK de extensão. Este módulo é atualizável, o que significa que pode receber atualizações de funcionalidades fora do ciclo normal de lançamento do Android.

As extensões SDK são responsáveis ​​por:

  • Decidir o nível do SDK de extensão do dispositivo.
  • Fornecimento de APIs para aplicativos consultarem o nível do SDK de extensão.
  • (A partir do Android 12) Determinação dos valores das variáveis ​​de ambiente BOOTCLASSPATH , DEX2OATBOOTCLASSPATH e SYSTEMSERVERCLASSPATH .

Formato do módulo

O módulo SDK Extensions ( com.android.sdkext ) está no formato APEX e está disponível para dispositivos com Android 11 ou superior.

Formato do pacote

O módulo SDK Extensions ( com.google.android.sdkext ) está no formato APEX e contém os seguintes componentes:

  • (A partir do Android 12) bin/derive_classpath : um binário nativo que é executado no início do processo de inicialização do dispositivo. Ele lê arquivos de configuração de caminho de classe individuais do sistema e de outros módulos, mescla-os e define a definição de variáveis ​​de ambiente CLASSPATH .

  • bin/derive_sdk : um binário nativo que é executado no início do processo de inicialização do dispositivo e lê metadados de outros módulos para definir propriedades do sistema relacionadas ao SDK de extensão (por exemplo, build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : este arquivo está no bootclasspath que expõe APIs a aplicativos para consultar o nível do SDK de extensão.

Derivando o nível do SDK da extensão

O programa derive_sdk lê metadados armazenados como arquivos protobuf binários no subcaminho etc/sdkinfo.binarypb dentro de cada módulo APEX. Para obter detalhes sobre a estrutura do protobuf, consulte o arquivo protobuf .

Lendo o nível do SDK da extensão

O módulo SDK Extensions expõe uma classe java SdkExtensions no pacote android.os.ext . Use o método getExtensionVersion(int) para ler a versão de uma extensão SDK (por exemplo, getExtensionVersion(Build.VERSION_CODES.R) ).

Derivando caminhos de classe

O serviço derive_classpath lê e mescla arquivos de configuração individuais em /system/etc/classpaths/ e /apex/*/etc/classpaths/ . Cada configuração armazena mensagem protobuf de classpaths.proto em um formato proto binário. O algoritmo de mesclagem exato que determina a ordem das entradas do caminho de classe é descrito em derive_classpath.cpp e pode mudar com o tempo.