O módulo "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
,DEX2OATBOOTCLASSPATH
eSYSTEMSERVERCLASSPATH
.
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.