Para fornecer uma base sólida para um app de qualidade, siga as diretrizes principais de qualidade de apps.
As diretrizes definem a qualidade mínima que todos os apps precisam atender.
Qualidade adaptável do app
Os apps Android são executados em uma grande variedade de dispositivos, desde smartphones compactos até tablets, dobráveis, computadores, telas conectadas, sistemas de infoentretenimento para carros, TVs e XR. Os modos de janela, como tela dividida e modo janela para computador, permitem que os apps sejam executados em partes redimensionáveis de uma tela.
Siga as diretrizes de qualidade de apps adaptáveis, em conjunto com as diretrizes principais de qualidade de apps, para:
- Criar apps otimizados para todos os formatos e tamanhos de tela
- Melhorar a classificação dos seus apps nas páginas de detalhes e na pesquisa do Google Play
- Conquistar mais usuários e aumentar a retenção de usuários
Diretrizes
As diretrizes principais a seguir ajudam você a criar um app básico de alta qualidade.
Experiência do usuário
Os padrões de design visual e interação do Android oferecem uma experiência do usuário consistente e intuitiva.
Use os componentes do Material Design para criar a interface do usuário do app em vez dos componentes da plataforma Android, sempre que possível. O Material Design oferece uma aparência moderna ao Android, além de consistência de interface em todas as versões do sistema.
Usabilidade
| ID | Testes | Descrição |
|---|---|---|
| Consistent_UX | T-Consistent_UX, T-SD_Card |
O app oferece uma experiência do usuário consistente para todos os casos de uso em todos os formatos. |
| App_Switcher | T-App_Switcher, T-SD_Card |
O app vai para o segundo plano quando o foco muda para outro app e retorna ao primeiro plano quando é reativado no seletor de apps Recentes. |
| Sleep_Resume | T-Sleep_Resume, T-SD_Card |
Quando o app está em primeiro plano, ele é pausado quando o dispositivo entra no modo de suspensão e é retomado quando o dispositivo é ativado. |
| Lock_Resume | T-Lock_Resume, T-SD_Card |
Quando o app está em primeiro plano, ele é pausado quando o dispositivo é bloqueado e retomado quando o dispositivo é desbloqueado. |
Interface do usuário
| ID | Testes | Descrição |
|---|---|---|
| Display_State_Parity | T-Orientation_Transitions |
As orientações de tela e os estados de dobra expõem basicamente os mesmos recursos e ações e preservam a paridade funcional. |
| Fullscreen_Display | T-Orientation_Transitions |
O app preenche a janela nas duas orientações e não tem efeito letterbox devido a mudanças de configuração, incluindo dobrar e desdobrar o dispositivo. Um leve efeito letterbox para compensar pequenas variações na geometria da tela é aceitável. |
| Orientation_Transitions | T-Orientation_Transitions | O app processa transições rápidas entre as orientações da tela e o dobrar/desdobrar do dispositivo sem problemas de renderização e sem perder o estado. |
Qualidade visual
| ID | Testes | Descrição |
|---|---|---|
| Graphic_Quality | T-Graphic_Quality |
O app exibe gráficos, texto, imagens e outros elementos da interface sem distorção, desfoque ou pixelização perceptíveis.
|
| Line_Length | T-Line_Length | O app garante a legibilidade do texto e dos blocos de texto limitando o comprimento da linha a 45-75 caracteres (incluindo espaços) para cada um dos idiomas compatíveis. |
| Theme_Support | T-Theme_Support | O conteúdo do app e todo o conteúdo da Web acessado por ele têm suporte aos temas claro e escuro. |
Navegação
| ID | Testes | Descrição |
|---|---|---|
| Back_Button_Nav | T-Back_Nav | O app é compatível com a navegação padrão do botão "Voltar" e não usa solicitações personalizadas na tela. |
| Back_Gesture_Nav | T-Back_Nav | O app é compatível com a navegação por gestos para voltar e acessar a tela inicial. |
| State_Preservation | T-State_Preservation, T-Back_Nav |
O app preserva o estado do usuário ou do app ao sair do primeiro plano e impede a perda acidental de dados devido à navegação de retorno e outras mudanças de estado. Ao retornar ao primeiro plano, o app restaura o estado preservado e todas as transações com estado pendentes. Por exemplo, mudanças em campos editáveis, progresso do jogo, menus, vídeos e outras seções do app.
|
Notificações
| ID | Testes | Descrição |
|---|---|---|
| Notification_Quality | T-Notification_Quality |
As notificações fornecem informações relevantes relacionadas ao seu app.
|
| Conversation_Quality | T-Notification_Quality |
Para apps de mensagens, aplicativos sociais e conversas, siga estas recomendações:
|
Acessibilidade
| ID | Testes | Descrição |
|---|---|---|
| Touch_Target_Size | T-Touch_Target_Size | As áreas de toque têm no mínimo 48 dp. Consulte as diretrizes de tamanhos de destino do Material Design (em inglês). |
| Visual_Contrast | T-Visual_Contrast |
O texto e o conteúdo em primeiro plano do app mantêm as seguintes taxas de contraste com o plano de fundo:
Saiba mais sobre cor e contraste. |
| Content_Description | T-Content_Description | Descreva cada elemento da interface,
exceto TextView, usando contentDescription. |
Funcionalidade
Seu app precisa implementar o seguinte comportamento funcional.
Áudio
| ID | Testes | Descrição |
|---|---|---|
| Audio_Playback_Start | T-Audio_Playback_Start |
Quando o usuário inicia a reprodução de áudio, o app precisa executar uma das seguintes ações em até um segundo:
|
| Audio_Focus_Request | T-Audio_Focus_Request | O app precisa solicitar o foco de áudio quando o áudio começar a ser reproduzido e abandonar o foco quando a reprodução for interrompida. |
| Audio_Focus_Change | T-Audio_Focus_Change | O app precisa processar as solicitações de seleção de áudio de outros apps. Por exemplo, um app pode reduzir o volume da reprodução quando outro inicia uma fala. |
| Audio_Playback_Background | T-Audio_Playback_Background | O app precisa oferecer suporte à reprodução em segundo plano. O app precisa usar um serviço em primeiro plano para impedir que o sistema encerre o processo do app quando ele não estiver mais visível. O app também precisa mostrar uma notificação persistente e não dispensável na barra de status ou na tela de bloqueio para informar ao usuário que o app está em execução. Os usuários precisam conseguir controlar a reprodução usando os controles de notificação ou da tela de bloqueio ou os controles de um acessório conectado. |
| Audio_Notification_Style | T-Audio_Notification_Style | Quando o app reproduz áudio em segundo plano, ele precisa criar uma notificação estilizada com MediaStyle. |
| Audio_Playback_Resume | T-Audio_Playback_Resume | Se o app estiver em segundo plano e o áudio estiver pausado, o áudio será retomado quando o app voltar ao primeiro plano ou o app precisará indicar ao usuário que a reprodução está pausada. |
Vídeo
| ID | Testes | Descrição |
|---|---|---|
| Video_PiP | T-Video_PiP | Se o app reproduzir vídeos, ele precisa ser compatível com a reprodução picture-in-picture. |
| Video_Encoding | T-Video_Encoding | Se o app codificar vídeos, ele precisará usar o padrão de compactação de vídeo HEVC. |
| Video_Playback_Background | T-Video_Playback_Background | O app oferece suporte à reprodução de vídeo em segundo plano quando não é o app principal, inclusive quando a janela do app está:
|
Compartilhamento
| ID | Testes | Descrição |
|---|---|---|
| System_Sharesheet | T-System_Sharesheet | O app precisa usar o Android Sharesheet ao compartilhar conteúdo. O app pode sugerir destinos que estão indisponíveis para soluções personalizadas. |
Serviços em segundo plano
| ID | Testes | Descrição |
|---|---|---|
| Background_Service_Optimization | T-Background_Service_Optimization |
O app evita a execução de serviços desnecessariamente longos em segundo plano para garantir o bom funcionamento do dispositivo do usuário. Observação:o sistema aplica várias restrições aos serviços em segundo plano. Veja a seguir exemplos de uso inadequado de serviços em segundo plano:
Para mais informações, consulte Visão geral das tarefas em segundo plano. |
Desempenho e estabilidade
Seu app precisa oferecer desempenho, estabilidade, compatibilidade e capacidade de resposta ideais.
Desempenho
| ID | Testes | Descrição |
|---|---|---|
| App_Startup_Time | T-App_Startup_Time | O app carrega rapidamente ou fornece feedback na tela ao usuário (um indicador de progresso ou recurso semelhante) se o app demorar mais de dois segundos para carregar. |
| Rendering_Performance | T-Rendering_Performance | O app renderiza quadros a cada 16 milissegundos (ou menos) para mostrar pelo menos 60 quadros por segundo. Para receber ajuda com problemas de renderização, consulte Renderização lenta. |
| StrictMode_Compliance | T-StrictMode_Compliance | Com o StrictMode ativado (consulte a seção de testes do StrictMode), nenhum flash vermelho (avisos de desempenho do StrictMode) fica visível ao testar o app. |
Estabilidade
| ID | Testes | Descrição |
|---|---|---|
| Stability_ANR | T-Stability_ANR | O app não falha nem bloqueia a linha de execução de interface, o que causa erros do tipo O app não está respondendo (ANR). Use o relatório de pré-lançamento do Google Play para identificar possíveis problemas de estabilidade. Após a implantação, monitore a página Android vitals no Google Play Console. |
SDK
| ID | Testes | Descrição |
|---|---|---|
| Android_Platform_Compatibility | T-Android_Platform_Compatibility | O app é executado na versão pública mais recente da plataforma Android sem falhas e sem afetar drasticamente a funcionalidade principal. |
| Target_SDK_Version | T-Target_SDK_Version | O app é destinado ao SDK do Android mais recente necessário para se alinhar aos requisitos do Google Play definindo o valor de targetSdk no arquivo build.gradle do módulo do app. |
| Compile_SDK_Version | T-Target_SDK_Version | O app é criado com o SDK do Android mais recente definindo o valor de compileSdk no arquivo build.gradle do módulo do app. |
| SDK_Maintenance | T-SDK_Maintenance, T-Non_SDK_Interfaces |
Todos os SDKs do Google ou de terceiros usados estão atualizados. Qualquer melhoria nesses SDKs relacionada à estabilidade, compatibilidade ou segurança será disponibilizada aos usuários em tempo hábil. Para SDKs do Google, use SDKs com a tecnologia do Google Play Services sempre que ela estiver disponível. Esses SDKs são compatíveis com versões anteriores, recebem atualizações automáticas, reduzem o tamanho do pacote de apps e usam os recursos do dispositivo com eficiência. |
| Non_SDK_Interfaces | T-Non_SDK_Interfaces | O app não usa interfaces que não são SDK. |
| Production_Build_Quality | T-Production_Build_Quality | Nenhuma biblioteca de depuração está incluída no app de produtividade. As bibliotecas de depuração incluídas no app podem causar problemas de desempenho e de segurança. |
Bateria
| ID | Testes | Descrição |
|---|---|---|
| Power_Management | T-Power_Management |
O app é compatível com os recursos de gerenciamento de energia Soneca e App em espera. Os apps podem solicitar uma isenção de manutenção de energia. Consulte Suporte a outros casos de uso em Otimizar para os modos Soneca e App em espera. |
Privacidade e segurança
O app processa os dados do usuário e as informações pessoais com segurança e oferece níveis de permissão adequados.
Os aplicativos publicados na Google Play Store também precisam seguir as políticas de dados do usuário do Google Play para proteger a privacidade do usuário.
Permissões
| ID | Testes | Descrição |
|---|---|---|
| Minimize_Permissions | T-Minimize_Permissions | O app solicita apenas as permissões mínimas necessárias para o caso de uso atual. Para algumas permissões, como localização, o app usa uma especificação aproximada em vez de precisa, se possível. Consulte Minimizar as solicitações de permissão. |
| Sensitive_Permissions | T-Sensitive_Permissions |
O app solicita permissão para acessar dados sensíveis (como grupos de permissões de SMS ou registro de chamadas ou localização) ou serviços que geram custos (como Telefone ou SMS) somente quando ela está diretamente relacionada aos principais casos de uso do app. As implicações relacionadas a essas permissões precisam ser divulgadas em destaque para o usuário. Dependendo de como o app usa as permissões, pode haver uma forma alternativa de atender ao caso de uso do app, sem depender de acesso a informações sensíveis. Por exemplo, em vez de solicitar permissões relacionadas aos contatos de um usuário, use uma intent implícita para solicitar acesso. |
| Runtime_Permissions | T-Runtime_Permissions | O app solicita permissões de execução quando a funcionalidade é solicitada, não durante a inicialização do app. |
| Permission_Rationale | T-Permission_Rationale | O app explica claramente por que as permissões são necessárias. |
| Graceful_Degradation | T-Graceful_Degradation | O app faz uma degradação suave quando os usuários negam ou revogam uma permissão. O app não pode impedir totalmente o acesso do usuário. |
Dados e arquivos
| ID | Testes | Descrição |
|---|---|---|
| Sensitive_Data_Storage | T-Sensitive_Data_Storage, T-Sensitive_Data_Handling |
Todos os dados sensíveis são mantidos no armazenamento interno do app. |
| Sensitive_Data_Logging | T-Sensitive_Data_Logging | Nenhum dado pessoal ou sensível do usuário é registrado no registro do sistema ou em um registro específico do app. |
| Hardware_IDs | T-Hardware_IDs | O app não usa IDs de hardware que não podem ser redefinidos, como o IMEI, para fins de identificação. |
Backup e restauração de dados
| ID | Testes | Descrição |
|---|---|---|
| App_Data_Backup | T-App_Data_Backup |
O app preserva os dados, as configurações e o estado do app em backups na nuvem e transferências de dispositivo para dispositivo (D2D, na sigla em inglês). Implemente o Backup automático e configure o |
| App_Logins_Restoration | T-App_Logins_Restoration |
O app restaura automaticamente as contas de usuário e o estado de login quando um usuário configura um novo dispositivo. Implemente o Restaurador de Credenciais usando o Gerenciador de Credenciais para autenticar os usuários automaticamente sem forçar fluxos de login manual ou de recuperação de conta. |
Identidade
| ID | Testes | Descrição |
|---|---|---|
| Autofill_Hints | T-Autofill_Hints | O app oferece dicas para o preenchimento automático de credenciais da conta e outras informações sensíveis, como informações de cartão de crédito, endereço físico e número de telefone. |
| Credential_Manager | T-Credential_Manager | O app integra o Gerenciador de credenciais para Android para uma experiência de login integrada que unifica o suporte a chaves de acesso, identidade federada e senhas. |
| Biometric_Authentication | T-Biometric_Authentication | O app oferece suporte à autenticação biométrica para proteger transações financeiras ou informações sensíveis, como documentos importantes do usuário. |
Componentes do app
| ID | Testes | Descrição |
|---|---|---|
| Component_Export | T-Component_Export |
O app define o atributo Apenas componentes de aplicativo que compartilham dados com outros apps ou que deveriam ser invocados por outros apps são exportados. |
| Component_Permissions | T-Component_Permissions |
Todas as intents e transmissões seguem as práticas recomendadas:
|
| Component_Protection | T-Component_Protection |
Todos os componentes que compartilham conteúdo entre apps usam A maioria dos apps não pode acessar uma lista de pacotes instalados. |
Rede
| ID | Testes | Descrição |
|---|---|---|
| Network_Security_Traffic | T-Network_Security_Traffic | Todo o tráfego de rede é enviado por SSL. |
| Network_Security_Configuration | T-Network_Security_Configuration | O app declara uma configuração de segurança de rede. |
| Security_Provider_Initialization | T-Security_Provider_Initialization | Se o app usar o Google Play Services, o provedor de segurança será inicializado com ele. |
WebViews
| ID | Testes | Descrição |
|---|---|---|
| WebView_Asset_Loader | T-WebView_Asset_Loader, T-WebView_Navigation |
Não use setAllowUniversalAccessFromFileURLs() para acessar conteúdo local. Em vez disso, use WebViewAssetLoader. |
| WebView_JavaScript | T-WebView_JavaScript, T-WebView_Navigation |
As visualizações da Web não usam No Android 6.0 (nível 23 da API e versões mais recentes), use canais de mensagem HTML. |
Execução
| ID | Testes | Descrição |
|---|---|---|
| App_Bundles | T-App_Bundles |
O app não carrega código dinamicamente de fora do APK. Use os Android App Bundles, que incluem o Play Feature Delivery e o Play Asset Delivery. Desde agosto de 2021, o uso de Android App Bundles é obrigatório para todos os novos apps na Google Play Store. |
Criptografia
| ID | Testes | Descrição |
|---|---|---|
| Cryptographic_Algorithms | T-Cryptographic_Algorithms | O app usa algoritmos criptográficos e um gerador de números aleatórios fortes fornecidos pela plataforma. Além disso, ele não implementa algoritmos personalizados. |
Google Play
Ativar a publicação do app no Google Play.
Políticas
| ID | Testes | Descrição |
|---|---|---|
| Play_Content_Policies | T-Play_Content_Policies | O app segue estritamente os termos da Política de conteúdo para desenvolvedores do Google Play, não oferece conteúdo inadequado e não usa a propriedade intelectual ou a marca de terceiros. |
| Play_Content_Rating | T-Play_Content_Policies | O nível de maturidade do app é definido de forma adequada com base nas diretrizes de classificação do conteúdo. |
Página de detalhes do app
| ID | Testes | Descrição |
|---|---|---|
| Play_Feature_Graphic | T-Play_Feature_Graphic, T-Play_Graphic_Assets |
O recurso gráfico do app segue as diretrizes descritas neste artigo de suporte. Confirme se:
|
| Play_Device_References | T-Play_Graphic_Assets | As capturas de tela e os vídeos do app não mostram nem mencionam dispositivos que não são Android. |
| Play_Misleading_Content | T-Play_Graphic_Assets | As capturas de tela ou os vídeos do app não representam o conteúdo e a experiência dele de forma enganosa. |
Suporte do usuário
| ID | Testes | Descrição |
|---|---|---|
| Play_User_Reviews | T-Play_Content_Policies | Bugs frequentes relatados pelos usuários na guia Avaliações da página do Google Play são resolvidos se forem reproduzíveis e ocorrerem em muitos dispositivos diferentes. Se um bug ocorrer apenas em alguns dispositivos, tente resolvê-lo mesmo se esses dispositivos forem novos ou muito comuns. |
Ambiente de teste
Configure um ambiente de teste da seguinte maneira:
Teste de emulador:o Android Emulator é uma ótima maneira de testar seu app em diferentes versões do Android e resoluções de tela. Configure dispositivos emulados (AVDs) para representar os formatos e as combinações de hardware/software mais comuns para sua base de usuários de destino. Teste vários formatos usando os seguintes emuladores (no mínimo):
- Dispositivos dobráveis: 7,6" com tela externa (listados em smartphones no AVD Manager).
- Tablet: Pixel C 9,94" (2.560 px x 1.800 px)
- Teste de notificação de apps para dispositivos móveis: pareie um dispositivo móvel ou emulador com o emulador do Wear OS: Wear OS Round 1,84"
Dispositivos de hardware:seu ambiente de teste precisa incluir um pequeno número de dispositivos de hardware reais que representem os principais formatos e combinações de hardware/software disponíveis para os consumidores. Não é necessário testar em todos os dispositivos do mercado. Concentre-se em um pequeno número de dispositivos representativos, usando até mesmo um ou dois dispositivos por formato.
Laboratórios de teste de dispositivos:você também pode usar serviços de terceiros, como o Firebase Test Lab, para testar seu app em uma ampla variedade de dispositivos.
Teste com a versão mais recente do Android:além de testar versões representativas do Android para sua base de usuários-alvo, você precisa sempre testar com a versão mais recente do Android para garantir que as mudanças de comportamento mais recentes não afetem negativamente a experiência do usuário do app.
Para mais orientações sobre testes, incluindo testes de unidade, de integração e de interface, consulte Conceitos básicos para testar apps Android.
StrictMode
Para testes de desempenho, ative o StrictMode no app. Use o StrictMode para detectar operações que podem afetar o desempenho, os acessos à rede e as leituras e gravações de arquivos. Procure operações potencialmente problemáticas na linha de execução principal e em outras.
Configure uma política de monitoramento por linha de execução usando StrictMode.ThreadPolicy.Builder e ative todo o monitoramento compatível no
ThreadPolicy usando detectAll().
Ative a notificação visual de violações da política para o ThreadPolicy usando
penaltyFlashScreen().
Testes
Os testes de qualidade básica de apps ajudam a avaliar a qualidade fundamental do seu app. É possível combinar os testes ou integrar grupos de testes no seu plano de teste.
Experiência do usuário
Teste para garantir uma experiência do usuário consistente e intuitiva.
Usabilidade
| ID | Recurso | Descrição |
|---|---|---|
| T-Consistent_UX | Consistent_UX |
Navegue por todas as partes do app: todas as telas, caixas de diálogo, configurações e todos os fluxos do usuário. Faça o seguinte:
|
| T-App_Switcher | App_Switcher | Em cada tela do app, mude para outro app em execução e volte para o app em teste usando o seletor de apps Recentes. |
| T-Sleep_Resume | Sleep_Resume | Pressione o botão liga/desliga para colocar o dispositivo em suspensão e pressione-o novamente para ligar a tela. |
| T-Lock_Resume | Lock_Resume | Configure um bloqueio de tela no dispositivo. Pressione o botão liga/desliga para colocar o dispositivo em suspensão, o que o bloqueará. Em seguida, pressione o botão novamente para ligar a tela e desbloquear o dispositivo. |
Cartão SD
| ID | Recurso | Descrição |
|---|---|---|
| T-SD_Card | Consistent_UX |
Realize testes de funcionalidade principal com o app instalado no cartão SD de um dispositivo (se o app for compatível com esse método de instalação). Para mover o app para um cartão SD, acesse as Configurações dele. |
Interface do usuário
| ID | Recurso | Descrição |
|---|---|---|
| T-Orientation_Transitions | Display_State_Parity, Fullscreen_Display, Orientation_Transitions |
Em cada tela do app, gire o dispositivo entre as orientações de paisagem e retrato e os estados dobrado e desdobrado pelo menos três vezes. Verifique se o app faz o seguinte:
|
Qualidade visual
| ID | Recurso | Descrição |
|---|---|---|
| T-Graphic_Quality | Graphic_Quality | Use todos os recursos do app. Verifique se todos os elementos visuais, incluindo gráficos, textos, imagens e outros elementos da interface, estão livres de distorção, desfoque ou pixelização. |
| T-Line_Length | Line_Length |
Revise todos os blocos de texto no app. Verifique se o comprimento da linha do texto e do bloco de texto está limitado a 45-75 caracteres (incluindo espaços) para facilitar a leitura. Verifique o seguinte:
|
| T-Theme_Support | Theme_Support | Verifique se todo o texto está legível nos temas claro e escuro. Verifique se todos os recursos visuais são claramente discerníveis e estéticos em temas claros e escuros. |
Navegação
| ID | Recurso | Descrição |
|---|---|---|
| T-Back_Nav | Back_Button_Nav, Back_Gesture_Nav |
Navegue por todas as partes do app: todas as telas, caixas de diálogo, configurações e todos os fluxos do usuário. Em cada tela do app, pressione o botão Voltar ou use o gesto de deslizar para voltar. O app precisa navegar para a tela anterior ou inicial. |
| T-State_Preservation | State_Preservation | Em cada tela do app, pressione a tecla Início do dispositivo ou deslize para cima na navegação por gestos e reinicie o app na tela Todos os apps. |
Notificações
| ID | Recurso | Descrição |
|---|---|---|
| T-Notification_Quality | Notification_Quality, Conversation_Quality |
Acione todos os tipos de notificação que o app pode exibir e observe-as na gaveta de notificações. Expanda as notificações quando aplicável (Android 4.1 e mais recentes) e toque em todas as ações disponíveis. |
Acessibilidade
| ID | Recurso | Descrição |
|---|---|---|
| T-Touch_Target_Size | Touch_Target_Size | Verifique se as áreas de toque mantêm um tamanho e uma posição acessíveis e consistentes para todos os tamanhos de tela e configurações. Para saber mais sobre acessibilidade, consulte o Scanner de acessibilidade. |
| T-Visual_Contrast | Visual_Contrast | Verifique o contraste de todos os elementos visuais. |
| T-Content_Description | Content_Description | Verifique se todos os elementos da interface, exceto TextView, têm descrições de conteúdo. |
Funcionalidade
Verifique se o app implementa o seguinte comportamento funcional.
Áudio
| ID | Recurso | Descrição |
|---|---|---|
| T-Audio_Playback_Start | Audio_Playback_Start | Inicie a reprodução de áudio. Verifique se, em um segundo, o app começa a reproduzir o áudio ou mostra um indicador visual de que os dados de áudio estão sendo preparados para reprodução. |
| T-Audio_Focus_Request | Audio_Focus_Request | Inicie a reprodução de áudio. O app precisa solicitar a seleção de áudio. Quando a reprodução de áudio é interrompida, o app precisa abrir mão do foco de áudio (o que acontece automaticamente em apps destinados ao Android 12 [nível 31 da API] e versões mais recentes). |
| T-Audio_Focus_Change | Audio_Focus_Change | Inicie a reprodução de áudio. Inicie a reprodução de áudio em outro app. Seu app precisa responder à mudança no foco de áudio e interromper a reprodução de áudio ou reduzir o volume. |
| T-Audio_Playback_Background | Audio_Playback_Background | Inicie a reprodução de áudio. Interaja com outro app que não seja de áudio como o aplicativo em primeiro plano. O app precisa continuar tocando áudio em segundo plano e mostrar uma notificação na barra de status. Verifique se é possível gerenciar a reprodução usando os controles mostrados na notificação. Bloqueie a tela do dispositivo. O app precisa continuar tocando áudio em segundo plano e mostrar uma notificação na tela de bloqueio. Verifique se é possível gerenciar a reprodução usando os controles mostrados na notificação. |
| T-Audio_Notification_Style | Audio_Notification_Style | Inicie a reprodução de áudio. Interaja com outro app que não seja de áudio como o aplicativo em primeiro plano. Verifique se o seu app continua tocando áudio em segundo plano e se criou uma notificação com o estilo MediaStyle. Consulte Como usar os controles de mídia. |
| T-Audio_Playback_Resume | Audio_Playback_Resume | Inicie a reprodução de áudio. Interaja com outro app que não seja de áudio como o aplicativo em primeiro plano. Interaja com seu app para que ele seja o principal. O áudio precisa ser retomado ou o volume precisa ser restaurado. Caso contrário, o app precisa indicar ao usuário que a reprodução está pausada. |
Vídeo
| ID | Recurso | Descrição |
|---|---|---|
| T-Video_PiP | Video_PiP | Ative a reprodução de vídeo do app no modo picture-in-picture. |
| T-Video_Encoding | Video_Encoding | Verifique se o app codifica o vídeo usando o padrão de compactação de vídeo HEVC. |
| T-Video_Playback_Background | Video_Playback_Background | Inicie a reprodução do vídeo. Minimizar a janela do app, abrir outro app para mover a janela do app para o segundo plano. Em dispositivos compatíveis com computadores, mova a janela do app para fora da área de trabalho visível. Verifique se a reprodução do vídeo continua sem interrupções em todos os casos. |
Compartilhamento
| ID | Recurso | Descrição |
|---|---|---|
| T-System_Sharesheet | System_Sharesheet | Crie uma intent e inicie uma atividade chamando startActivity() com a intent como argumento. Consulte Usar o Android Sharesheet. O app vai mostrar o Android Sharesheet. |
Serviços em segundo plano
| ID | Recurso | Descrição |
|---|---|---|
| T-Background_Service_Optimization | Background_Service_Optimization | Use todos os principais recursos do app. Verifique se nenhum serviço em segundo plano de longa duração foi iniciado. Mude para outro app para enviar o seu para o segundo plano. Acesse Configurações e verifique se o app tem algum serviço em execução em segundo plano. No Android 4.0 e versões mais recentes, acesse a tela Apps e encontre o app na guia Em execução. |
Desempenho e estabilidade
Verifique o desempenho, a estabilidade e os recursos visuais perfeitos.
Desempenho
| ID | Recurso | Descrição |
|---|---|---|
| T-App_Startup_Time | App_Startup_Time | Inicie o app. Verifique se ele carrega rapidamente ou se mostra um indicador de progresso ou recurso semelhante caso demore mais de dois segundos para carregar. |
| T-Rendering_Performance | Rendering_Performance | Use todos os principais recursos do app. Verifique se ele renderiza pelo menos 60 quadros por segundo. Use a opção Classificar renderização HWUI para ajudar a testar o app. |
| T-StrictMode_Compliance | StrictMode_Compliance |
Ative o Preste muita atenção à coleta de lixo e ao impacto dela na experiência do usuário. |
Estabilidade
| ID | Recurso | Descrição |
|---|---|---|
| T-Stability_ANR | Stability_ANR | Use todos os principais recursos do app. Verifique se ele não falha ou bloqueia a linha de execução de interface, causando erros de ANR (Android Not Responding). Consulte o relatório de pré-lançamento do Google Play para identificar possíveis problemas de estabilidade. |
SDK
| ID | Recurso | Descrição |
|---|---|---|
| T-Android_Platform_Compatibility | Android_Platform_Compatibility | Execute o app na versão pública mais recente da plataforma Android. Use todos os recursos principais. Verifique se o app não falha e é executado sem perda de funcionalidade principal. |
| T-Target_SDK_Version | Target_SDK_Version, Compile_SDK_Version |
Revise o arquivo de manifesto do Android e a configuração do build para garantir que o aplicativo seja criado com o SDK mais recente disponível (targetSdk e compileSdk). |
| T-SDK_Maintenance | SDK_Maintenance | Revise o arquivo build.gradle do app para ver se há dependências desatualizadas. |
| T-Non_SDK_Interfaces | Non_SDK_Interfaces | Use a ferramenta lint do Android Studio para detectar o uso de interface que não é SDK. Consulte Restrições para interfaces não SDK para ver métodos de teste alternativos. |
| T-Production_Build_Quality | Production_Build_Quality | Revise o arquivo build.gradle do app para ver se há bibliotecas de depuração incluídas. |
Bateria
| ID | Recurso | Descrição |
|---|---|---|
| T-Power_Management | Power_Management |
Usar todos os principais recursos do app nos modos Soneca e App em espera. Verifique se os alarmes, timers, notificações e sincronizações funcionam corretamente na janela de manutenção do modo Soneca e quando o app sai do modo de espera. Teste o comportamento dos recursos Soneca e App em espera usando comandos do adb (consulte Testes com os recursos Soneca e App em espera para ver os requisitos e as diretrizes). Para diagnosticar o consumo inesperado de bateria, use o Power Profiler do Android Studio ou a ferramenta Battery Historian combinada com o trabalho em segundo plano planejado. |
Privacidade e segurança
Testar as proteções de privacidade e segurança esperadas pelos usuários.
Permissões
| ID | Recurso | Descrição |
|---|---|---|
| T-Minimize_Permissions | Minimize_Permissions | Revise todas as permissões que o app exige no arquivo de manifesto, no ambiente de execução e nas configurações do app no dispositivo (Configurações > Informações do app). |
| T-Sensitive_Permissions | Sensitive_Permissions | Use todos os recursos do app que solicitam permissões. Verifique se o app solicita permissão para acessar dados ou serviços sensíveis apenas para os principais casos de uso. Verifique se as implicações de conceder permissão a dados e serviços sensíveis são comunicadas claramente ao usuário. |
| T-Runtime_Permissions | Runtime_Permissions | Use todos os recursos do app que exigem permissões. Verifique se as permissões são solicitadas de forma preguiçosa, ou seja, apenas quando os recursos são acessados, e não durante a inicialização do app. |
| T-Permission_Rationale | Permission_Rationale | Use todos os recursos do app que exigem permissões. Verifique se o app explica ao usuário por que as permissões são necessárias. |
| T-Graceful_Degradation | Graceful_Degradation | Use todos os recursos do app que exigem permissões. Negar ou revogar as permissões. Verifique se o app oferece um caso de uso alternativo e continua funcionando. |
Dados e arquivos
| ID | Recurso | Descrição |
|---|---|---|
| T-Sensitive_Data_Storage | Sensitive_Data_Storage | Revise todos os dados mantidos no armazenamento interno. Verifique se os dados armazenados externamente não são sensíveis. |
| T-Sensitive_Data_Handling | Sensitive_Data_Storage | Analise como os dados carregados do armazenamento externo são tratados e processados. |
| T-Sensitive_Data_Logging | Sensitive_Data_Logging | Use todos os principais recursos do app enquanto monitora o registro do dispositivo. Verifique se nenhuma informação particular do usuário é registrada. |
| T-Hardware_IDs | Hardware_IDs | Use todos os principais recursos do app. Verifique se o app não usa IDs de hardware, como o IMEI, para fins de identificação. |
Backup e restauração de dados
| ID | Recurso | Descrição |
|---|---|---|
| T-App_Data_Backup | App_Data_Backup |
Configurar preferências locais, bancos de dados e configurações de apps em um dispositivo principal. Faça um backup na nuvem ou uma transferência entre dispositivos (D2D) para um novo aparelho. Inicie o app no dispositivo de destino após a transferência e verifique se as preferências locais, o estado do banco de dados e as configurações do usuário foram restaurados corretamente de acordo com as regras de Backup Automático. Para ver os procedimentos de teste detalhados, consulte Testar backup e restauração. |
| T-App_Logins_Restoration | App_Logins_Restoration |
Configure uma sessão conectada em um dispositivo principal usando chaves de acesso, senhas ou o Login do Google. Faça um backup na nuvem ou uma transferência entre dispositivos (D2D) para um novo aparelho. Inicie o app no dispositivo de destino após a transferência e verifique se a autenticação é restaurada automaticamente usando o Restaurador de Credenciais sem mostrar telas de login ou exigir a recuperação de conta. Para ver os procedimentos de teste detalhados, consulte Como testar as credenciais de restauração. |
Identidade
| ID | Recurso | Descrição |
|---|---|---|
| T-Autofill_Hints | Autofill_Hints | Use todos os recursos do app que exigem entrada do usuário. Verifique se o app oferece dicas para o preenchimento automático de campos de entrada de dados, como credenciais da conta e outras informações sensíveis. |
| T-Credential_Manager | Credential_Manager | Faça login no app. Verifique se ele integra o Gerenciador de credenciais para Android para uma experiência de login que unifica o suporte a chaves de acesso, identidade federada e senhas. |
| T-Biometric_Authentication | Biometric_Authentication | Usar todos os recursos do app que exigem autenticação. Verifique se o app protege transações financeiras ou informações sensíveis, como documentos importantes do usuário, com a autenticação biométrica. |
Componentes do app
| ID | Recurso | Descrição |
|---|---|---|
| T-Component_Export | Component_Export | Revise todos os componentes de aplicativo definidos no arquivo de manifesto do Android para o estado de exportação adequado. A propriedade exportada precisa ser definida explicitamente para todos os componentes. |
| T-Component_Permissions | Component_Permissions | Revise todas as permissões que o app exige no arquivo de manifesto, no ambiente de execução e nas configurações do app no dispositivo (Configurações > Informações do app). |
| T-Component_Protection | Component_Protection | Revise todos os provedores de conteúdo definidos no arquivo de manifesto do Android. Confira se cada provedor tem um protectionLevel apropriado. |
Rede
| ID | Recurso | Descrição |
|---|---|---|
| T-Network_Security_Traffic | Network_Security_Traffic | Declarar uma configuração de segurança de rede que desativa o tráfego de texto não criptografado e testar o app. |
| T-Network_Security_Configuration | Network_Security_Configuration | Revise a configuração de segurança de rede do app. Verifique se nenhuma verificação de lint na configuração falha. |
| T-Security_Provider_Initialization | Security_Provider_Initialization | Verifique se o provedor de segurança é inicializado na inicialização do aplicativo para o Google Play Services. |
WebViews
| ID | Recurso | Descrição |
|---|---|---|
| T-WebView_Asset_Loader | WebView_Asset_Loader | Revise a configuração de segurança de rede do app. Verifique se nenhuma verificação de lint na configuração falha. |
| T-WebView_JavaScript | WebView_JavaScript | Para cada WebView, acesse uma página que exija JavaScript. |
| T-WebView_Navigation | WebView_Asset_Loader, WebView_JavaScript |
Em cada WebView, tente navegar para sites e conteúdo que não são carregados diretamente pelo app. |
Execução
| ID | Recurso | Descrição |
|---|---|---|
| T-App_Bundles | App_Bundles | Verifique se o app usa Android App Bundles e não carrega código dinamicamente de fora do APK do app. |
Criptografia
| ID | Recurso | Descrição |
|---|---|---|
| T-Cryptographic_Algorithms | Cryptographic_Algorithms | Verifique se o app usa algoritmos criptográficos e um gerador de números aleatórios fortes fornecidos pela plataforma. Verifique também se o app não implementa algoritmos personalizados. |
Google Play
Verifique se o app está pronto para o Google Play.
Políticas
| ID | Recurso | Descrição |
|---|---|---|
| T-Play_Content_Policies | Play_Content_Policies, Play_Content_Rating, Play_User_Reviews |
Faça login no Google Play Console para revisar seu perfil de desenvolvedor, a descrição do app, as capturas de tela, o recurso gráfico, a classificação do conteúdo e o feedback dos usuários. |
Página de detalhes do app
| ID | Recurso | Descrição |
|---|---|---|
| T-Play_Feature_Graphic | Play_Feature_Graphic | Faça o download do recurso gráfico e das capturas de tela e reduza-os para que fiquem do tamanho da tela nos dispositivos e formatos pretendidos. |
| T-Play_Graphic_Assets | Play_Feature_Graphic, Play_Device_References, Play_Misleading_Content |
Revise todos os recursos gráficos, mídia, texto, bibliotecas de código e outros conteúdos empacotados no download do app ou do arquivo de expansão. |
Arquivar
Versões anteriores das diretrizes principais de qualidade de apps: