Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Capacidade do dispositivo para bilhões

Alcançar novos usuários significa oferecer suporte a uma quantidade cada vez maior de versões da plataforma Android e de especificações de dispositivos. Para melhorar a experiência do usuário, otimize seu aplicativo para configurações comuns de RAM, tamanhos de tela e resoluções.

Compatibilidade com vários tamanhos de tela

Seu aplicativo pode oferecer uma experiência do usuário aprimorada para bilhões de usuários se ele for compatível com telas de vários tamanhos e resoluções. Esta seção descreve algumas maneiras de fazer isso.

Use pixels independentes de densidade (dp)

  • Definir dimensões de layout com pixels não é uma boa opção, já que telas diferentes têm densidades distintas de pixels. Assim, o mesmo número de pixels pode corresponder a diferentes tamanhos físicos em dispositivos diversos.
  • Para resolver esse problema, o Android é compatível com um pixel independente de densidade (dp), que corresponde ao tamanho físico de um pixel em 160 pontos por polegada (densidade mdpi).
  • A definição de layouts com dp garante que o tamanho físico da interface do usuário seja consistente em qualquer dispositivo. Visite o guia do Android sobre como Oferecer suporte a várias telas para saber as práticas recomendadas sobre o uso de pixels independentes de densidade.

Testar texto e gráficos nas densidades de tela ldpi e mdpi

  • Faça o teste para garantir que o texto e os gráficos funcionem bem nas telas de baixa e média densidade (ldpi e mdpi). Isso porque essas densidades comuns, especialmente em dispositivos mais baratos. Fique atento a textos que podem não ser claros em telas de densidade mais baixa, onde os detalhes não ficam visíveis.
  • Dispositivos com telas de densidades mais baixas tendem a ter especificações de hardware menores. Para garantir que o desempenho do seu aplicativo seja adequado nesses dispositivos, considere reduzir ou eliminar carregamentos de processamento de gráficos pesados, como animações e transições.
  • Para saber mais sobre como oferecer suporte a diferentes densidades, acesse o treinamento do Android sobre como Oferecer suporte a diferentes densidades.

Testar layouts em tamanhos de tela pequenos e médios

  • Valide a redução dos seus layouts testando-os em telas menores. Conforme a tela é reduzida, seja seletivo sobre os elementos de interface visíveis, pois há um espaço limitado para eles.
  • As diretrizes do Material Design descrevem as métricas e linhas-chave necessárias para garantir que seu layout possa ser dimensionado em telas de diferentes densidades.
  • Para saber mais sobre como oferecer suporte a diferentes tamanhos de tela, acesse o treinamento do Android sobre como Oferecer suporte a diferentes tamanhos de tela.

Oferecer compatibilidade com versões anteriores

Nem todos seus usuários podem usar dispositivos equipados com a melhor e mais recente versão da plataforma Android. Veja algumas maneiras de melhorar a compatibilidade com versões anteriores, ajudando a disponibilizar seu aplicativo para o maior número de pessoas possível.

Defina targetSdkVersion e minSdkVersion da forma adequada

  • Aplicativos devem ser compilados e direcionados a uma versão recente do Android para garantir a oferta do comportamento mais recente em diversos dispositivos. Isso ainda inclui a compatibilidade com versões mais antigas. Veja a seguir as práticas recomendadas para direcionar os níveis de API corretamente:
    • targetSdkVersion deve ser a versão mais recente do Android. Direcionar seu aplicativo para a versão mais recente garante que ele herde comportamentos de tempo de execução mais recentes ao executar as últimas versões do Android. Teste seu aplicativo nas últimas versões do Android ao atualizar o targetSdkVersion, já que isso pode afetar o comportamento do aplicativo.
    • minSdkVersion define a versão Android mínima com suporte. Use o Android 4.0 (nível de API 14: Ice Cream Sandwich) ou o Android 4.1 (nível de API 16: Jelly Bean) — essas versões oferecem a cobertura máxima para dispositivos modernos. Definir o elemento minSdkVersion também faz com que as ferramentas de compilação do Android reportem o uso incorreto de novas APIs que podem não estar disponíveis em versões mais antigas da plataforma. Dessa forma, você pode evitar a interrupção acidental da compatibilidade com versões anteriores.
  • Consulte os painéis do Android, o Google Play Developer Console para seu aplicativo e pesquisas de setor dos seus mercados de destino para avaliar a quais versões do Android direcionar seu aplicativo com base nos usuários finais.

Usar as bibliotecas de suporte do Android

  • Verifique se seu aplicativo fornece uma experiência consistente em todas as versões do SO usando a Android Support Library. Esta biblioteca fornece versões compatíveis com versões anteriores das APIs de estrutura do Android, bem como recursos que estão disponíveis somente por meio das APIs da biblioteca, como a AppCompatActivity e a Material Design Support Library.
  • Alguns dos destaques incluem:
  • Para saber mais sobre as bibliotecas de suporte disponíveis, consulte a seção Recursos de bibliotecas de suporte do site do Android Developer.

Usar os serviços do Google Play

  • Os serviços do Google Play oferecem o melhor das Google APIs, independentemente da versão da plataforma Android utilizada. Considere usar os recursos dos serviços do Google Play para oferecer a experiência mais otimizada para o Google em dispositivos Android.
  • Os serviços do Google Play também incluem APIs úteis, como a GcmNetworkManager, que oferece grande parte da API JobScheduler do Android 5.0 para versões mais antigas do sistema.
  • Atualizações para os serviços do Google Play são distribuídas automaticamente pela Google Play Store e novas versões da biblioteca de cliente são entregues pelo Android SDK Manager.

Usar a memória de maneira eficiente

A memória é um fator importante e desconhecido da experiência do usuário. Um bom gerenciamento de memória pode tornar seu aplicativo mais estável e gerar um melhor desempenho. Em alguns casos, o uso eficaz da memória pode ser o único fator que torna possível usar seu aplicativo. Conheça algumas maneiras de ajudar seu aplicativo a usar a memória com sabedoria.

Reduza o consumo de memória em dispositivos mais acessíveis

  • Ajuste o seu consumo de memória dinamicamente para garantir a compatibilidade com diferentes dispositivos de diversas configurações de RAM.
  • Métodos como o isLowRamDevice() e getMemoryClass() ajudam a determinar as restrições de memória no tempo de execução. Com base nessas informações, você pode reduzir o uso da memória. Por exemplo, você pode usar imagens de resolução mais baixa em dispositivos com pouca memória.
  • Para saber mais sobre como gerenciar a memória do seu aplicativo, acesse o treinamento do Android sobre como Gerenciar a memória do seu aplicativo.

Evite processos de longa duração

  • Processos de longa duração ficam na memória e podem reduzir a velocidade do dispositivo. Na maioria das situações, seu aplicativo deve ser ativado para um determinado evento, processar os dados e ser desativado. Use o Firebase Cloud Messaging (FCM) e GcmNetworkManager para evitar serviços em segundo plano de longa duração e reduzir a pressão sobre a memória no dispositivo do usuário.

Comparar o uso da memória

O Android Studio fornece ferramentas de criação de perfis e comparação de memória, que permitem que você avalie o uso da memória no tempo de execução. Comparar o consumo de memória do seu aplicativo permite que você monitore o uso da memória em várias versões dele. Isso pode ajudar a detectar aumentos não intencionais no consumo da memória. Use a ferramenta Memory Profiler para fazer o seguinte:

  • Descubra se padrões de evento de coleta de lixo (GC) não desejáveis podem estar causando problemas de desempenho.
  • Identifique os tipos de objeto que são ou ficam alocados de forma inesperada ou desnecessária.
  • Identifique em que parte do seu código o problema pode estar.

Para saber mais sobre o uso da memória de comparação, consulte Visualizar pilhas e alocações com o Memory Profiler.

Otimizar o aplicativo para dispositivos que executam o Android (edição Go)

O Android (edição Go) é uma experiência otimizada para dispositivos de nível básico com ≤1 GB de RAM, começando com o Android Oreo (edição Go). Para garantir que seu aplicativo funcione bem em dispositivos Android (edição Go), você deve levar em consideração as seguintes diretrizes:

  • targetSdkVersion deve ser a versão mais recente do Android. Os dispositivos Android (edição Go) só executam o Android Oreo (API 26 ou superior).
  • O aplicativo deve funcionar sem problemas em dispositivos com ≤1 GB de RAM. Lembre-se das otimizações de memória listadas em Usar a memória de maneira eficiente acima e use o Android vitals para identificar e corrigir comportamentos ruins, como renderização lenta e frames congelados.
  • O recurso picture-in-picture (PIP) pode ser desativado em dispositivos com pouca memória RAM. Antes de usar o PIP no seu aplicativo, verifique se ele está disponível chamando hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE).
  • O tamanho do aplicativo no dispositivo deve ser menor que 40 MB.
  • O tamanho do conjunto proporcional (PSS) do uso de memória RAM do aplicativo não deve exceder 50 MB. Para jogos, o PSS do uso de memória RAM não deve exceder 150 MB. Para obter mais informações sobre o PSS, consulte o guia Investigar o uso de RAM.
  • O tempo de inicialização do aplicativo deve ser mínimo e inferior a 5 segundos.

Recomendamos que a maioria dos desenvolvedores otimize o aplicativo existente, que estará disponível em todos os dispositivos Android (edição Go). Isso porque tornar seu aplicativo mais rápido e leve beneficiará todos os usuários. Você pode usar o recurso de diversos APKs no Play Console para distribuir um APK específico para dispositivos Android (edição Go). No entanto, é preciso fazer isso sem comprometer a experiência (por exemplo, evite remover recursos). O APK que direciona dispositivos Android (edição Go) precisa declarar <uses-feature android:name="android.hardware.ram.low" android:required="true">, direcionar pelo menos o nível 26 da API e ter um código de versão superior ao APK da edição diferente do Go.