O módulo SDK Extensions decide o nível do SDK da extensão do dispositivo e fornece APIs para os aplicativos consultarem o nível do SDK da 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 do SDK são responsáveis por:
- Decidir o nível do SDK da extensão do dispositivo.
- Fornecendo APIs para aplicativos para consultar o nível do SDK da extensão.
- (Iniciando o Android 12) Determinando os valores para as variáveis de ambiente
BOOTCLASSPATH,DEX2OATBOOTCLASSPATHeSYSTEMSERVERCLASSPATH.
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:
(Iniciando o 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 outros módulos, os mescla e define a definição de variáveis de ambienteCLASSPATH.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 as propriedades do sistema relacionadas à extensão SDK (por exemplo,build.version.extensions.r).javalib/framework-sdkextension.jar: Este arquivo está no bootclasspath que expõe as APIs aos aplicativos para consultar o nível do SDK da extensão.
Derivando o nível do SDK da extensão
O programa derive_sdk lê metadados armazenados como arquivos protobuf binários no etc/sdkinfo.binarypb sdkinfo.binarypb dentro de cada módulo APEX. Para 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 getExtensionVersion(int) para ler a versão de uma extensão do 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 a 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.