O módulo de extensões do SDK decide o nível do SDK da extensão do dispositivo e fornece APIs para que os apps consultem o nível do SDK da extensão. Esse módulo é atuável, ou seja, ele pode receber atualizações de funcionalidade 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 de extensão do dispositivo.
- Fornecimento de APIs para que os apps consultem o nível do SDK da extensão.
- (A partir do Android 12) Determinação dos valores das
variáveis de ambiente
BOOTCLASSPATH,DEX2OATBOOTCLASSPATHeSYSTEMSERVERCLASSPATH.
Formato do módulo
O módulo de extensões do SDK (com.android.sdkext) está no
formato APEX e está disponível para dispositivos
com o Android 11 ou mais recente.
Formato do pacote
O módulo de extensões do SDK (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 executado no início do processo de inicialização do dispositivo. Ele lê arquivos de configuração de classpath individuais do sistema e de outros módulos, os mescla e define a definição das variáveis de ambienteCLASSPATH.bin/derive_sdk: um binário nativo executado no início do processo de inicialização do dispositivo e que lê os metadados de outros módulos para definir propriedades do sistema relacionadas ao SDK da extensão (por exemplo,build.version.extensions.r).javalib/framework-sdkextension.jar: esse arquivo está no bootclasspath que expõe APIs para apps para consultar o nível do SDK da extensão.
Derivar 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 do APEX. Para detalhes sobre a estrutura
do protobuf, consulte o
arquivo
protobuf.
Nível de leitura do SDK da extensão
O módulo de extensões do SDK expõe uma classe
SdkExtensions
Java no pacote android.os.ext. Use o método getExtensionVersion(int)
para ler a versão de uma extensão do SDK (por exemplo,
getExtensionVersion(Build.VERSION_CODES.R)).
Derivar classpaths
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 binário proto. 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.