Capacidade do dispositivo para bilhões

Alcançar novos usuários significa oferecer compatibilidade com 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 app para configurações comuns de RAM, tamanhos de tela e resoluções.

Compatibilidade com vários tamanhos de tela

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

Usar pixels de densidade independente

  • Definir dimensões de layout com pixels não é uma boa opção, porque telas diferentes têm densidades distintas de pixels. Assim, o mesmo número de pixels pode corresponder a diferentes tamanhos físicos em dispositivos diferentes.
  • Para resolver esse problema, o Android é compatível com o pixel de densidade independente (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. Acesse o guia do Android sobre Compatibilidade com 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 funcionam bem em telas de baixa e média densidade (ldpi e mdpi). Isso é necessário porque essas são densidades mais usadas, especialmente em dispositivos mais baratos. Cuidado com textos que podem não ficar 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 app seja adequado nesses dispositivos, recomendamos reduzir ou eliminar carregamentos de processamento de gráficos pesados, como animações e transições.
  • Para saber mais sobre como oferecer compatibilidade com diferentes densidades, acesse o treinamento do Android sobre Compatibilidade com densidades de pixel diferentes.

Testar layouts em tamanhos de tela pequenos e médios

  • Valide a redução dos seus layouts testando-os em telas menores. Com a diminuição da tela, escolha bem os elementos da IU visíveis, porque o espaço para eles é limitado.
  • As diretrizes do Material Design descrevem as métricas e linhas-chave (link em inglês) necessárias para garantir que seu layout possa ser dimensionado em telas de diferentes densidades.
  • Para saber mais sobre como oferecer compatibilidade com diferentes tamanhos de tela, acesse o treinamento do Android sobre Compatibilidade com tamanhos de tela diferentes.

Oferecer compatibilidade com versões anteriores

Nem todos os 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 app para o maior número de pessoas possível.

Definir targetSdkVersion e minSdkVersion de forma adequada

  • Os apps precisam ser criados e direcionados para a versão recente do Android de modo a 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 o app aos níveis de API adequados:
    • targetSdkVersion precisa ser a versão mais recente do Android. Direcionar seu app 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 o app nas últimas versões do Android ao atualizar a targetSdkVersion, já que isso pode afetar o comportamento do app.
    • minSdkVersion Define a versão mínima do Android com suporte. Definir a 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 Console do seu app e pesquisas de setor dos mercados-alvo para avaliar para quais versões do Android o app será direcionado, com base nos usuários-alvo.

Usar as Bibliotecas de Suporte do Android

  • Seu app precisa usar a Biblioteca de Suporte do Android para proporcionar uma experiência consistente em todas as versões do SO. Essa biblioteca fornece versões compatíveis com APIs de framework do Android anteriores, bem como recursos que estão disponíveis somente pelas APIs da biblioteca, como AppCompatActivity e a Biblioteca de Suporte do Material Design.
  • Alguns dos destaques incluem o seguinte:
  • Para saber mais sobre as bibliotecas de suporte disponíveis, consulte a seção Recursos da Biblioteca de Suporte do site Android Developer.

Usar o Google Play Services

  • A plataforma Google Play Services oferece o melhor das APIs do Google, independentemente da versão da Plataforma Android utilizada. Recomendamos usar os recursos do Google Play Services para oferecer a experiência mais otimizada para o Google em dispositivos Android.
  • O Google Play Services também inclui APIs úteis, como a GcmNetworkManager, que oferece grande parte da API JobScheduler do Android 5.0 para versões mais antigas.
  • As atualizações do Google Play Services 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 da experiência do usuário, mas poucos sabem disso. Um bom gerenciamento de memória pode deixar seu app mais estável e gerar um melhor desempenho. Em alguns casos, o uso eficaz dela pode ser o único fator que torna seu app utilizável. Conheça algumas maneiras de ajudar seu app a usar a memória com sabedoria.

Reduzir o consumo de memória em dispositivos de baixo custo

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

Evitar 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 app será ativado para um determinado evento, processará os dados e será desativado. Use o Firebase Cloud Messaging (FCM) e a classe 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 momento da execução. Comparar o consumo de memória do seu app permite que você monitore o uso dela em várias versões do app. Isso pode ajudar a captar o aumento não intencional do consumo. Use a ferramenta Memory Profiler para fazer o seguinte:

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

Para saber mais sobre a comparação do uso de memória, consulte Ver alocações de heap com o Memory Profiler.

Otimizar o app para dispositivos que executam o Android (versão Go)

O Android (versão Go) é uma experiência otimizada para dispositivos de nível básico com no máximo 1 GB de RAM, começando com o Android Oreo (versão Go). Para garantir que o app funcione bem em dispositivos Android (versão Go), considere as seguintes orientações:

  • A targetSdkVersion precisa ser a versão mais recente do Android. Os dispositivos Android (versão Go) só executam o Android Oreo (API 27 ou mais recente).
  • O app precisa funcionar sem problemas em dispositivos com até 1 GB de RAM. Lembre-se das otimizações de memória listadas acima em Usar a memória de maneira eficiente 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 estar desativado nos dispositivos. Antes que seu app use o PIP, confira se ele está disponível chamando hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE).
  • O tamanho do app no dispositivo precisa ser menor que 40 MB.
  • O tamanho do conjunto proporcional (PSS, na sigla em inglês) do uso de RAM do app não pode exceder 90 MB. Para jogos, o PSS do uso de memória RAM não pode exceder 150 MB. Para saber mais sobre o PSS, consulte o guia Inspecionar o uso de RAM.
  • O tempo de inicialização do app precisa ser mínimo, inferior a cinco segundos.
  • A SYSTEM_ALERT_WINDOW (que permite aos apps desenhar uma janela sobre outros) pode ser desativada em dispositivos Android Go com pouca RAM. Antes de sobrepor outros apps, verifique se o app tem essa autorização chamando Settings.canDrawOverlays(). Se o app não receber a permissão, faça uma degradação suave para que o usuário possa continuar usando o app, possivelmente desativando o recurso que exige a permissão SYSTEM_ALERT_WINDOW.

Recomendamos que a maioria dos desenvolvedores otimize o app já existente, que será disponibilizado em todos os dispositivos Android (versão Go), porque deixar o app mais rápido e leve beneficiará todos os usuários. Você pode usar o recurso de vários APKs no Play Console para distribuir um APK específico para dispositivos Android (versão Go). No entanto, só faça isso de modo que não comprometa a experiência (por exemplo, evite remover recursos). O APK para direcionar o app a dispositivos Android (versão Go) precisa declarar <uses-feature android:name="android.hardware.ram.low" android:required="true">, direcionar pelo menos à API de nível 26 e ter um código de versão mais recente do que o APK do Android que não é Go.

Outros recursos

Para saber mais sobre como oferecer compatibilidade com vários dispositivos, consulte este recurso:

Postagens do blog