Historicamente, o Android só ofereceu suporte a tamanhos de página de memória de 4 KB, o que otimizou o desempenho da memória do sistema para a quantidade média de memória total que os dispositivos Android normalmente tinham. A partir do Android 15, o AOSP oferece suporte a dispositivos configurados para usar um tamanho de página de 16 KB (dispositivos de 16 KB). Se o app usar alguma biblioteca do NDK, seja direta ou indiretamente por um SDK, será necessário recriar o app para que ele funcione nesses dispositivos de 16 KB.
À medida que os fabricantes de dispositivos continuam criando dispositivos com quantidades maiores de memória física (RAM), muitos deles vão adotar tamanhos de página de 16 KB (e eventualmente maiores) para otimizar o desempenho do dispositivo. Ao adicionar suporte para dispositivos com tamanho de página de 16 KB, você permite que o app seja executado nesses dispositivos e aproveite as melhorias de desempenho associadas. Sem recompilação, os apps não vão funcionar em dispositivos de 16 KB em versões futuras do Android.
Para ajudar você a adicionar suporte ao app, fornecemos orientações sobre como verificar se o app foi afetado, como recompilar o app (se aplicável) e como testar o app em um ambiente de 16 KB usando emuladores (incluindo imagens do sistema Android 15 para o Android Emulator).
Requisito de compatibilidade do Google Play
Para garantir que seu app funcione corretamente nas versões mais recentes do Android, todos os apps destinados ao Android 15 (nível 35 da API) e versões mais recentes precisam aceitar tamanhos de página de memória de 16 KB em dispositivos de 64 bits no Google Play. A partir de 1º de fevereiro de 2027, se as atualizações do seu app não forem compatíveis com tamanhos de página de 16 KB de memória, não será possível lançá-las.
Benefícios e ganhos de performance
Os dispositivos configurados com tamanhos de página de 16 KB usam um pouco mais de memória em média, mas também têm várias melhorias de desempenho para o sistema e os apps:
- Tempos de inicialização do app mais rápidos enquanto o sistema está sob pressão de memória: 3,16% mais baixos em média, com melhorias mais significativas (até 30%) em alguns apps testados.
- Redução do consumo de energia durante o lançamento do app: redução média de 4,56%
- Lançamento mais rápido da câmera: 4,48% mais rápido em média e 6,60% mais rápido em média
- Tempo de inicialização do sistema melhorado: melhoria de 8% (aproximadamente 950 milissegundos) em média
Essas melhorias são baseadas nos testes iniciais, e os resultados em dispositivos reais provavelmente serão diferentes. Forneceremos análises adicionais de ganhos em potencial para apps à medida que continuarmos nossos testes.
Verificar se o app foi afetado
Se o app usar código nativo, recompile o app com suporte para dispositivos de 16 KB. Se você não tiver certeza se o app usa código nativo, use o APK Analyzer para identificar se há código nativo e verifique o alinhamento dos segmentos ELF de bibliotecas compartilhadas encontradas. O Android Studio também oferece recursos que ajudam a detectar automaticamente problemas de alinhamento.
Se o app usa apenas código escrito na linguagem de programação Java ou Kotlin, incluindo bibliotecas ou SDKs, ele já oferece suporte a dispositivos de 16 KB. No entanto, recomendamos que você teste o app em um ambiente de 16 KB para verificar se não há regressões inesperadas no comportamento do app.
O app usa código nativo?
Seu app usa código nativo se alguma das seguintes situações se aplicar:
- O app usa qualquer código C/C++ (nativo). Se o app usa o Android NDK, ele usa código nativo.
- O app se vincula a bibliotecas ou dependências nativas de terceiros (como SDKs) que as usam.
- O app é criado por um criador de apps de terceiros que usa bibliotecas nativas no dispositivo.
Identificar bibliotecas nativas usando o APK Analyzer
O APK Analyzer é uma ferramenta que permite avaliar vários aspectos de um APK. Para verificar se o app usa código nativo (independente de ser compatível com 16 KB):
- Abra o Android Studio, clique em File > Open e escolha qualquer projeto.
Na barra de menus, clique em Build > Analyze APK....
Escolha o APK que você quer analisar.
Confira se há algum arquivo de objeto compartilhado (
.so) na pastalib. Se houver arquivos de objeto compartilhados, seu app usará código nativo. A coluna Alinhamento mostra mensagens de aviso para arquivos com problemas de alinhamento. Se não houver arquivos de objeto compartilhado ou uma pastalib, o app não usa código nativo.
Detectar problemas de alinhamento com verificações automáticas
O Android Studio avisa proativamente se as bibliotecas ou APKs pré-criados não estiverem em conformidade com 16 KB. Use a ferramenta APK Analyzer para analisar quais bibliotecas precisam ser atualizadas ou se são necessárias mudanças no código.
O lint no Android Studio também destaca bibliotecas nativas que não estão alinhadas a 16 KB.
Verificar o alinhamento de segmentos ELF para bibliotecas compartilhadas
Para bibliotecas compartilhadas, verifique se os segmentos ELF estão
alinhados corretamente usando o alinhamento ELF de 16 KB. Se você estiver desenvolvendo no
Linux ou no macOS, use o script check_elf_alignment.sh conforme descrito na
seção a seguir. Também é possível usar as ferramentas de linha de comando diretamente.
Use o script check_elf_alignment.sh (Linux ou macOS)
Siga estas etapas para verificar o alinhamento dos segmentos ELF usando o script check_elf_alignment.sh:
Salve o script
check_elf_alignment.shem um arquivo.Execute o script no arquivo APK do app:
check_elf_alignment.sh APK_NAME.apkO script gera
ALIGNEDouUNALIGNEDpara todas as bibliotecas compartilhadasarm64-v8a.Se alguma biblioteca compartilhada
arm64-v8aoux86_64forUNALIGNED, será necessário atualizar o empacotamento dessas bibliotecas, recompilar o app e testar novamente seguindo as etapas desta seção.
Usar ferramentas de linha de comando diretamente
Siga estas etapas para verificar o alinhamento de segmentos ELF usando ferramentas de linha de comando diretamente:
- Verifique se o SDK do Android Build-Tools versão 35.0.0 ou mais recente e o Android NDK estão instalados usando o SDK Manager no Android Studio ou a ferramenta de linha de comando
sdkmanager. Extraia o arquivo APK do app:
Linux ou macOS
unzip APK_NAME.apk -d /tmp/my_apk_outWindows (PowerShell)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_outNo diretório temporário em que você extraiu o arquivo APK, verifique o conteúdo do diretório
libpara arquivos de objeto compartilhado (.so). Esses são os mesmos arquivos de objeto compartilhado que você teria visto ao identificar bibliotecas nativas usando o APK Analyzer. Execute o seguinte comando em cada arquivo de objeto compartilhado:Linux ou macOS
SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOADWindows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"Em que
SDK_ROOT_LOCATIONé o caminho para o diretório em que você instalou o SDK do Android,SHARED_OBJECT_FILEé o nome do arquivo de objeto compartilhado que você está verificando eNDK_VERSIONé a versão do Android NDK instalada (por exemplo,28.0.12433566). A saída será semelhante a esta para cada arquivo verificado:LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14 LOAD off 0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14 LOAD off 0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14Verifique as linhas de saída para garantir que os segmentos de carga não tenham valores menores que
2**14. Se algum segmento de carga tiver valores2**13,2**12ou menores, atualize o pacote dessas bibliotecas, recompile o app e faça um novo teste seguindo as etapas desta seção.Em seguida, execute a ferramenta de linha de comando
zipalignno arquivo APK do app:Linux ou macOS
SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apkWindows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apkEm que
SDK_ROOT_LOCATIONé o caminho para o diretório em que você instalou o SDK do Android eAPK_NAMEé o nome do arquivo APK do seu app. A última linha da saída vai dizer "Verification successful" se todas as bibliotecas compartilhadas estiverem alinhadas corretamente.Se a verificação falhar, algumas bibliotecas compartilhadas precisarão ser realinhadas. Portanto, atualize o pacote dessas bibliotecas, recompile o app e faça um novo teste seguindo as etapas desta seção.
Verificar a flag de segurança RELRO
Para reduzir os exploits de segurança, os linkers modernos usam a flag Relocation Read-Only (RELRO) para tornar as seções de realocação do arquivo de objeto compartilhado somente leitura após o carregamento. Ative a flag RELRO no seu build.
Uma seção RELRO com um endereço inicial mais tamanho do segmento (MemSize) que não seja alinhado a 16 KB causa uma falha no app durante a execução com uma falha de segmentação. Isso
acontece se o arquivo .so foi criado com a cadeia de ferramentas NDK r27 e versões anteriores sem
ativar as flags relevantes.
Execute o seguinte comando em cada arquivo de objeto compartilhado (Linux ou macOS):
SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-readelf -Wl SHARED_OBJECT_FILE.so | grep 'RELRO\|Type'
A string GNU_RELRO será impressa se houver um segmento RELRO.
Em seguida, verifique o alinhamento do segmento RELRO somando o endereço de deslocamento virtual (VirtAddr) com o tamanho da memória do segmento (MemSiz) e dividindo por 16 KB (0x4000). Se o resto (módulo) for zero, o segmento RELRO será alinhado a 16 KB.
Confira um exemplo de um arquivo .so não alinhado:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
GNU_RELRO 0x0cfaf0 0x00000000000dfaf0 0x00000000000dfaf0 0x01510 0x01510 R 0x1
Fórmula: (VirtAddr + MemSiz) % 0x4000 == 0
Resultado: (0xdfaf0 + 0x01510) % 0x4000 = 0xE1000 % 0x4000 == 0x1000
Como 0x1000 não é zero, o libbad.so não está em conformidade com 16 KB. O intervalo de proteção RELRO de DC000 (a quebra de página anterior) a E4000 é somente leitura, mas o vinculador do Android espera que o subintervalo de E1000 a E4000 seja gravável, resultando em uma falha de segmentação. Nesse caso, recrie o arquivo .so conforme descrito na seção Compile seu app usando o alinhamento ELF de 16 KB.
Confira um exemplo de um arquivo .so alinhado com um segmento RELRO:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
GNU_RELRO 0x0cfaf0 0x00000000000dfaf0 0x00000000000dfaf0 0x01510 0x00510 R 0x1
Criar o app com suporte a dispositivos de 16 KB
Se o app usar código nativo, siga as etapas descritas nas seções a seguir para garantir que ele seja compatível com dispositivos de 16 KB:
- Atualizar o pacote das bibliotecas compartilhadas
- Compile o app usando o alinhamento ELF de 16 KB
- Corrigir código e resolver problemas de tempo de execução
- Otimizar alocadores de memória personalizados (se aplicável)
- Verificar se os SDKs são compatíveis com 16 KB
Atualizar o pacote das bibliotecas compartilhadas
Faça upgrade para a versão 8.5.1 ou mais recente do AGP e use bibliotecas compartilhadas não compactadas.
Use bundletool para verificar o alinhamento de ZIP
Para conferir o alinhamento do pacote, use:
bundletool dump config --bundle=<my .aab> | grep alignment
Se você vir PAGE_ALIGNMENT_16K, isso significa que seu pacote solicita um alinhamento de compactação de 16 KB. Se você vir PAGE_ALIGNMENT_4K, isso vai instruir o APK criado com
esse AAB a ter arquivos .so alinhados de 4 KB no arquivo ZIP.
AGP versão 8.5.1 ou mais recente
Dispositivos de 16 KB exigem que os apps enviados com bibliotecas compartilhadas não compactadas as alinhem em um limite de 16 KB alinhado a zip. Para isso, atualize para a versão 8.5.1 ou mais recente do Plug-in do Android para Gradle (AGP). Consulte a seção Assistente de upgrade do plug-in do Android para Gradle para saber mais sobre o processo de upgrade.
AGP versão 8.5 ou anterior
Se não for possível fazer upgrade do AGP para a versão 8.5.1 ou mais recente, a alternativa é mudar para usar bibliotecas compartilhadas compactadas. Atualize a configuração do Gradle para que ele compacte as bibliotecas compartilhadas ao empacotar o app e evite problemas de instalação com bibliotecas compartilhadas não alinhadas.
Groovy
No arquivo build.gradle, adicione a seguinte opção:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
No arquivo build.gradle.kts, adicione a seguinte opção:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
AGP versão 8.0 ou anterior
Se você estiver usando uma versão do AGP igual ou anterior à 8.0, também será necessário desativar
a opção de biblioteca nativa não compactada para App Bundles no arquivo
gradle.properties:
android.bundle.enableUncompressedNativeLibs=false
Compile seu app usando o alinhamento ELF de 16 KB
Para que o app seja executado, os dispositivos de 16 KB exigem que os segmentos ELF das bibliotecas compartilhadas sejam alinhados corretamente usando o alinhamento ELF de 16 KB.
Para desenvolvedores de jogos, se o jogo for executado no mecanismo de jogos Unity, consulte o guia do Unity. Se o jogo for executado no mecanismo de jogos Unreal, consulte o guia do Unreal.Para mecanismos de jogos nativos, continue com este guia.
Para compilar o app usando o alinhamento ELF de 16 KB, siga as etapas em uma das seções abaixo, dependendo da versão do Android NDK que você está usando.
Android NDK r28 e versões mais recentes
As versões r28 e mais recentes do NDK compilam 16 KB alinhados por padrão.
Android NDK r27 e versões anteriores
Para oferecer suporte à compilação de bibliotecas compartilhadas alinhadas a 16 KB com o Android NDK versão r27 ou anterior, use as seguintes flags do vinculador:
-Wl,-z,max-page-size=16384
-Wl,-z,common-page-size=16384
Saiba como atualizar os arquivos de configuração do sistema de build:
ndk-build
Se você estiver usando ndk-build, atualize seu Android.mk para ativar o alinhamento ELF de 16 KB:
LOCAL_LDFLAGS += -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384
CMake
Se você estiver usando o CMake, atualize o CMakeLists.txt para ativar o alinhamento ELF de 16 KB:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
"-Wl,-z,max-page-size=16384"
"-Wl,-z,common-page-size=16384"
)
Corrigir o código e resolver problemas de ambiente de execução
Mesmo que o app esteja alinhado a 16 KB, ele pode encontrar erros se lugares no código presumirem que um dispositivo está usando um tamanho de página específico. Para evitar isso, siga estas etapas:
Remova todas as dependências codificadas que referenciam a constante
PAGE_SIZEou instâncias na lógica do código que presumem que o tamanho da página de um dispositivo é de 4 KB (4096).Use
getpagesize()ousysconf(_SC_PAGESIZE).Procure usos de
mmap()e outras APIs que exigem argumentos alinhados à página e substitua por alternativas quando necessário.
Em alguns casos, se o app usar PAGE_SIZE como um valor conveniente que não está
vinculado ao tamanho da página subjacente, isso não vai causar falhas no app quando
usado no modo de 16 KB. No entanto, se esse valor for transmitido ao kernel com
mmap sem MAP_FIXED, o kernel ainda usará uma página inteira, o que desperdiça
alguma memória. Por esses motivos, PAGE_SIZE fica indefinido quando o modo de 16 KB é
ativado no NDK r27 e versões mais recentes.
Se o app usa PAGE_SIZE dessa forma e nunca transmite esse valor diretamente para
o kernel, em vez de usar PAGE_SIZE, crie uma nova variável com um novo
nome para refletir que ela é usada para outras finalidades e não reflete uma página
de memória real.
Otimizar alocadores de memória personalizados
Em sistemas de 16 KB, a menor unidade de memória física alocada pelo sistema operacional é quatro vezes maior do que em sistemas de 4 KB. Se um alocador personalizado foi projetado com base em pressupostos de 4 KB, ele poderá espalhar objetos pequenos por várias páginas de 16 KB e reter memória vazia desnecessariamente. Isso pode aumentar substancialmente o uso da memória física (RSS) e reduzir a eficiência da troca compactada (ZRAM).
Se o código gerenciar os próprios pools de memória, siga estas recomendações:
1. Evite limites de bytes codificados para liberar memória
Muitos alocadores usam limites de bytes fixos para decidir quando liberar a memória de volta para o SO usando madvise(MADV_DONTNEED) (por exemplo, liberar memória somente se objetos ativos ocuparem menos de 8 KB).
Em um sistema de 16 KB, mesmo um único objeto ativo de 16 bytes fixa uma página inteira de 16 KB (que é maior que 8 KB). Como resultado, o limite de liberação nunca é atingido, e o alocador nunca retorna a memória não usada ao kernel.
O que fazer:nunca use constantes de bytes fixadas no código para heurísticas de liberação de página.
Ajuste dinamicamente os limites de lançamento no tempo de execução com base no tamanho real da página
usando sysconf(_SC_PAGESIZE).
2. Preencha primeiro as páginas já usadas (alocação densa primeiro)
Se um alocador distribuir a memória na ordem "primeiro a entrar, primeiro a sair" (PEPS) ou em rodízio, as novas alocações serão espalhadas por muitas páginas de 16 KB parcialmente preenchidas. Um único objeto em uma página mantém todos os 16 KB residentes na RAM física.
O que fazer:sempre aloque novos objetos da página ou do bloco mais cheio (denso) antes de tocar em páginas vazias ou pouco usadas. Concentrar novas alocações em páginas já sujas permite que as páginas pouco usadas sejam naturalmente drenadas para zero objetos ativos, para que toda a página de 16 KB possa ser liberada para o SO.
3. Alinhe os pools de memória a 16 KB e mantenha os tamanhos moderados
Intervalos de várias páginas projetados para sistemas de 4 KB podem reter um excesso de memória não liberada em kernels de 16 KB. Além disso, classes de tamanho que não dividem uniformemente em 16 KB causam fragmentação no final de cada página.
O que fazer:
- Verifique se todos os pools de memória, limites de slab e alinhamentos de buffer são múltiplos exatos do tamanho da página de tempo de execução.
- Reavalie os tamanhos de extensão de várias páginas para classes de objetos pequenos para evitar alocar blocos muito grandes que prendem a memória ociosa.
4. Liberar imediatamente a memória física para grandes buffers em cache
Alocadores personalizados geralmente armazenam em cache buffers grandes (> 64 KB) em um pool na memória para que possam ser reutilizados sem pagar a sobrecarga das chamadas de sistema mmap ou munmap. No entanto, manter esses buffers sujos na memória desperdiça megabytes de RAM física enquanto aguarda um timer de remoção.
O que fazer:mantenha o intervalo de endereços de memória virtual reservado para reutilização rápida, mas chame madvise(..., MADV_DONTNEED) ou madvise(..., MADV_FREE) imediatamente ao retornar um buffer para o cache. O sistema operacional recupera a RAM física imediatamente, enquanto o app ainda pode reutilizar o endereço virtual instantaneamente sem realocação.
5. Zerar a memória na liberação em vez da alocação para compactação ZRAM
O Android usa a troca compactada (ZRAM) para manter os apps em segundo plano na memória. Em dispositivos de 16 KB, se uma página tiver apenas um objeto ativo, toda a página de 16 KB vai permanecer residente ou será trocada para a zRAM. Os dados de lixo restantes (como ponteiros e strings desatualizados) em partes liberadas anteriormente dessa página são compactados de maneira inadequada.
Se o alocador zerar a memória (por exemplo, para segurança ou alocações inicializadas com zero), considere zerar na desalocação (free()) em vez de na alocação:
- As páginas fixadas custam menos:a memória inativa em páginas de 16 kB parcialmente preenchidas é compactada até quase nada na ZRAM. Assim, as páginas fixadas não desperdiçam espaço de troca físico.
- Sobrecarga mínima de cache:quando
free()é chamado, a memória já está ativa no cache da CPU, evitando mais ausências no cache depois.
Resumo das recomendações
| Área | Recomendação | Impacto esperado |
|---|---|---|
| Limites de exclusão permanente | Escalone os limites de lançamento de forma dinâmica usando sysconf(_SC_PAGESIZE). |
Impede o deadlock permanente da lógica de lançamento. |
| Ordem de alocação | Alocar primeiro da página ou do bloco mais denso (quase cheio). | Reduz a memória residente (RSS) ao agrupar objetos ativos. |
| Dimensionamento de extensão | Alinhe as classes de tamanho a múltiplos de 16 KB e evite slabs grandes demais. | Elimina a fragmentação da página final e reduz a folga de memória. |
| Caches de buffer | Chame madvise(MADV_DONTNEED) imediatamente ao armazenar em cache buffers grandes. |
Elimina o aumento da RAM inativa, mantendo a reutilização virtual rápida. |
| Troca / ZRAM | Zere a memória em free() em vez de na alocação. |
Melhora as taxas de compactação da ZRAM para que as páginas fixadas custem menos. |
Verificar se os SDKs aceitam 16 KB
Muitos SDKs são compatíveis com tamanhos de página de 16 KB, principalmente se você os criar ou usar pré-compilados recentes. No entanto, como alguns pré-requisitos ou versões do SDK não são compatíveis com 16 KB, verifique o site de cada provedor de SDK para determinar qual versão usar com 16 KB.
Testar seu app em um ambiente de 16 KB
Depois de criar o app com suporte para dispositivos de 16 KB, teste-o em um ambiente de 16 KB para verificar se ele apresenta regressões. Para isso, siga estas etapas:
Configure o SDK do Android 15 ou uma versão mais recente.
Configure um dos seguintes ambientes de teste:
- Configurar o Android Emulator com uma imagem do sistema Android 15 de 16 KB
- Usar o Cuttlefish com tamanho de página de 16 KB no ARM64
- Simular o Cuttlefish com tamanho de página de 16 KB em x86-64
- Ativar o modo de 16 KB em um dispositivo usando as opções do desenvolvedor
- Use o Samsung Remote Test Lab em 16 KB dispositivos compatíveis
Inicie o dispositivo de teste e execute o seguinte comando para verificar se ele está usando um ambiente de 16 KB:
adb shell getconf PAGE_SIZEO comando vai retornar um valor de
16384.Execute o comando
zipaligna seguir para verificar se o app está alinhado a 16 KB, em que APK_NAME é o nome do arquivo APK do app:zipalign -c -P 16 -v 4 APK_NAME.apkTeste o app completamente, concentrando-se em áreas que possam ser afetadas por mudanças em instâncias de código que referenciam tamanhos de página específicos.
Configurar o Android Emulator com uma imagem do sistema de 16 KB
Para configurar um ambiente de 16 kB usando o Android Emulator, siga estas etapas:
- No Android Studio, clique em Tools > SDK Manager.
Na guia SDK Platforms, selecione Show Package Details e expanda a seção Android VanillaIceCream ou mais recente. Selecione uma ou ambas as imagens do sistema do emulador a seguir, dependendo dos dispositivos virtuais que você quer criar:
- Google APIs Experimental 16 KB Page Size ARM 64 v8a System Image
- Imagem do sistema Intel x86_64 Atom de tamanho de página de 16 KB experimental das APIs do Google
Clique em Aplicar > OK para baixar as imagens do sistema selecionadas.
Siga as etapas para configurar um dispositivo virtual para o Android 15 e, quando for solicitado a selecionar uma imagem do sistema, escolha a imagem de 16 KB que você baixou. Se ela não for recomendada automaticamente, você poderá encontrar a imagem do sistema de 16 KB na guia Outras imagens.
Iniciar o emulador
Depois de configurar o Android Emulator e os dispositivos virtuais, inicie o Android Emulator no menu do dispositivo de destino ou na linha de comando.
Ativar o modo 16 KB em um dispositivo usando as opções do desenvolvedor
Ative a opção de desenvolvedor Inicializar com tamanho de página de 16 KB para inicializar um dispositivo no modo de 16 KB.
Nas versões QPR do Android 15, é possível usar a opção do desenvolvedor disponível em alguns dispositivos para inicializar o dispositivo no modo de 16 KB e realizar testes no dispositivo. Antes de usar a opção do desenvolvedor, acesse Configurações > Sistema > Atualizações de software e aplique as atualizações disponíveis.
Essa opção para desenvolvedores está disponível nos seguintes dispositivos:
Pixel 8 e 8 Pro (com Android 15 QPR1 ou versões mais recentes)
Pixel 8a (com Android 15 QPR1 ou versões mais recentes)
Pixel 9, 9 Pro e 9 Pro XL (com Android 15 QPR2 ou versões mais recentes)
Pixel 9a (com Android 16 ou versões mais recentes)
Modo de compatibilidade com versões anteriores de 16 KB
Aviso no modo de compatibilidade de tamanho de página
A opção de compatibilidade com versões anteriores de 16 KB está disponível quando um dispositivo está executando um kernel de 16 KB. O gerenciador de pacotes executa um app no modo de compatibilidade com versões anteriores de 16 KB quando as seguintes condições são atendidas:
- Se o app tiver arquivos ELF (com extensão
.so) com um alinhamento de segmento LOAD de 4 KB. - Se o APK compactado tiver arquivos ELF não compactados alinhados a ZIP de 4 KB.
Se o gerenciador de pacotes tiver ativado o modo de compatibilidade com versões anteriores de 16 KB para um app, ele vai mostrar um aviso na primeira vez que for iniciado informando que está sendo executado nesse modo.
O modo de compatibilidade com versões anteriores de 16 KB permite que alguns apps funcionem, mas, para melhor confiabilidade e estabilidade, eles ainda precisam estar alinhados a 16 KB.
Na página de informações do app, em Avançado, ative ou desative a configuração Executar app com o modo de compatibilidade de tamanho de página para ativar ou desativar o modo de compatibilidade com versões anteriores de 16 KB para um app específico. Essa configuração só fica visível quando o dispositivo está sendo executado com tamanho de página de 16 KB.
Configuração do modo de compatibilidade de tamanho da página
Para forçar a compatibilidade com versões anteriores de 16 KB em todos os apps do dispositivo:
adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false
Para desativar a compatibilidade com versões anteriores de 16 KB em todos os apps no dispositivo:
adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true
No Android 17, também é possível desativar a compatibilidade com versões anteriores de 16 KB para todos os apps e fazer com que qualquer binário incompatível seja interrompido imediatamente:
adb shell setprop bionic.linker.16kb.app_compat.enabled fatal
adb shell setprop pm.16kb.app_compat.disabled true
Defina a propriedade android:pageSizeCompat como ativada ou desativada para ativar ou
desativar o modo de compatibilidade com versões anteriores de um app específico no AndroidManifest.xml dele. Quando essa
propriedade é definida, o app não mostra avisos do modo de compatibilidade com versões anteriores ao
ser iniciado.