O Android já é o sistema operacional mais presente em dispositivos no mundo como smartphones, tablets, smartwatches, televisões, etc. Mas desde o início o seu foco principal foi os dispositivos embarcados móveis, o que sempre gerou uma grande preocupação com o tempo de duração da bateria. Tendo isso em foco, o projeto AOSP traz diversas ferramentas, funcionalidades, além de várias modificações em sua versão de Kernel Linux para que o usuário tenha um melhor aproveitamento da energia que utiliza em seu dispositivo.
Este artigo tem como objetivo apresentar a ferramenta Battery Stats, disponível pelo Android Open Source Project e que qualquer dispositivo que utilize Android possivelmente deve ser compatível.
Pré-requisitos
Destaco alguns pontos para pré-requisito para esse artigo:
- As ferramentas apresentadas são implementadas para uso no Android Open Source Projects (AOSP), logo, a não ser que tenham sido modificadas ou removidas pelo fabricante, qualquer dispositivo que contenha Android 5+ e que tenha disponível as opções de desenvolvedor podem utilizar as seguintes informações.
- É interessante ter noções de uso de linha comando (Windows ou Linux) para usar as ferramentas ADB e Docker.
- Android Debug Bridge (ADB) instalado para acesso às informações internas do dispositivo.
- Algum editor de texto que facilite pesquisa em arquivos longos como VIM, Notepad++, VS Code.
- Conhecimentos básicos de Wake locks do Android.
Ativando o ADB
O Android Debug Bridge ou ADB é uma ferramenta de linha de comando que possibilita a comunicação com o dispositivo Android apenas por conexão USB, abrindo várias possibilidades ao usuário como instalar, remover e depurar aplicativos e até acessar a linha de comando do dispositivo sem qualquer necessidade de uma conexão UART.
Para ativar o ADB, é necessário entrar na seção “Opções do Desenvolvedor”, como um Easter Egg no Android e fica escondida nas Configurações. Você deve seguir os passos abaixo, os quais são também demonstrados na Figura 1:
- Abrir as Configurações do Dispositivo e ir na opção “Sobre o Dispositivo”;
- Procure onde está o “Número de Compilação”, aperte algumas vezes nessa opção até que apareça um pop-up informando que o modo desenvolvedor foi ativado;
- Procure a seção “Opções do Desenvolvedor”, normalmente fica como última opção na tela de Configurações;
- Dentro dessa sessão para desenvolvedores existem várias opções de teste que podem ser úteis para testes tanto em aplicativos, quanto verificação de funcionamento de hardware, mas nesse artigo é necessário a ativação somente da opção “Depuração USB”
- Alguns pop-ups de segurança serão lançados e após aceitá-los o ADB estará ativado.
Após conectar o dispositivo na porta USB do seu computador é possível confirmar se o ADB está funcionando corretamente, para isso execute o comando adb devices e uma resposta como a da imagem abaixo deve aparecer para indicar que tudo está certo.
Wake Locks
Quando a tela de um dispositivo Android é desligada, ele se prepara para entrar em modo de repouso, o que faz com que processos em plano de fundo sejam encerrados e alguns módulos de hardware sejam desligados, tais como GPS e Bluetooth. A partir de então, apenas funcionalidades que mantém o dispositivo ligado ficam ativas, como, por exemplo o chip de gerenciamento de energia. Tendo isso em vista, algumas aplicações podem necessitar executar alguma tarefa enquanto o dispositivo está em modo de repouso e para isso existem as wake locks.
As aplicações são adicionadas a uma lista de wake locks que diz quais processos estão mantendo o dispositivo acordado no momento, como por exemplo um aplicativo de música que continua funcionando mesmo após a tela ser desligada.
Para quem possui um emulador de Android ou um dispositivo que tenha privilégios de root, o comando $ adb shell cat /sys/kernel/debug/wakeup_sources mostra uma lista com todas as wake locks que estão sendo executadas no momento e informações importantes sobre elas.
Battery Stats
Battery Stats é uma ferramenta que coleta todo tipo de informação relacionada a bateria do dispositivo, as organiza em forma de logs e as divide em seções, sendo as principais delas:
- Battery History
- Per-PID Stats
- Statistics Since Last Charge
Cada uma das seções ditas serão detalhadas em subseções mais a frente no artigo.
Para acessar o Battery Stats, o dispositivo deve estar conectado ao computador em modo depuração, como já explicado na seção 2, e em seguida deve ser o comando adb shell dumpsys batterystats, o resultado é mostrado na Figura 3.
O comando citado mostra em tela todas as informações capturadas pelo Battery Stats. Para ajudar na análise, alguns comandos adicionais podem ser usados para filtrar as seções e até resetar as informações que são capturadas. Essas opções podem ser vistas em adb shell dumpsys batterystats -h, como mostra a figura 4.
Como são muitas as informações disponibilizadas, recomenda-se salvá-las em um arquivo de texto de forma integral ou divida em seções e utilizar uma ferramenta que tenha algum facilitador para buscas em texto, como demonstrado na Figura 5.
As informações guardadas no Battery Stats são redefinidas todas as vezes que o dispositivo é desconectado a um carregador e esse está bem próximo do carregamento completo.
Battery History
Logo que abrirmos o Battery Stats, a primeira seção que vemos é a Battery History e de imediato já se pode tirar inúmeras informações interessantes, como apresentado na figura abaixo, ela também pode ser encontrada com o comando adb shell dumpsys batterystats –history.
Esta seção mostra uma linha do tempo de tudo que aconteceu com o seu dispositivo desde o último momento que o Battery Stats foi redefinido até o momento que o comando foi executado.
As duas primeiras linhas do Battery History sempre mostram as seguintes informações:
Após as duas primeiras linhas, o Battery History mostra o que de fato veio acontecendo com o celular em tempo de execução e quais processos estão consumindo mais bateria.
Este formato é organizado por tags que podem indicar situações como: momentos em que a tela foi ligada, processos que ativaram wake locks, temperatura da bateria, entre outros. Essas tags sempre iniciam com um sinal de mais ou menos (+/-) para indicar se a tag foi iniciada ou finalizada. Segue abaixo uma tabela com algumas das tags que aparecem no Battery History:
| TAG | Descrição |
| running | CPU está executando algo |
| wake_lock | Wake lock que mantém a CPU ocupada |
| gps | GPS executando |
| screen | Momento que a tela ligou |
| audio | Audio executando |
| wifi_radio | Wifi sendo usada |
| mobile_radio | Rede móvel sendo usada |
Esses são alguns exemplos de uma extensa lista de tags que podem ser encontradas no código fonte do Battery Stats.
PER-PID STATS
Esta seção organiza as wake locks que apareceram na seção anterior por PID e o tempo que elas permaneceram segurando a CPU acordada. Abaixo podemos ver um exemplo:
Neste caso o PID 1866 é um serviço relacionado ao pacote de serviço IMS (IP Multimedia System)
STATISTICS SINCE LAST CHARGE
Esta seção gera um relatório estatístico com toda informação bruta de bateria coletada pelo dispositivo e também pode ser encontrada com o comando adb shell dumpsys batterystats –charged.
Logo de início são mostradas informações básicas do dispositivo como: capacidade de bateria em mAh, estimativa de quanto de bateria o dispositivo ainda possui em mAh, o tempo de duração total que o dispositivo ficou ligado e ligado com a tela desligada, predominância da força do brilho da tela entre outras informações interessantes, como mostra a Figura 10.
Em seguida, para organizar os dados existem algumas seções para os seguintes tópicos:
- Seção para consumo relacionado a conectividade;
- Estimativa de consumo por processo;
- Wake locks de parciais e de kernel;
- Todos os motivos para o dispositivo acordar; e
- Lista de processos.
Conectividade
Dentro do relatório Statistics since last charge, há a seção CONNECTIVITY POWER SUMMARY START, a qual é focada em estatísticas de dados relacionados à conectividade. Esta seção é apresentada mais detalhadamente na Figura 11.
Pode-se encontrar informações tanto para módulos de rede móvel, quanto para Wifi e Bluetooth. Alguns exemplos são o tempo que o módulo esteve escaneando a rede, o tempo que ele esteve recebendo ou enviando dados na rede e a qualidade do sinal de recebimento de dados categorizados como: very poor, poor, moderate, good, great, variando a potência de acordo com o módulo que está sendo usado.
Estimativa de consumo por processo
Na seção Estimated power use do relatório Statistics since last charge podem ser encontrados todos os processos executados pelo dispositivo e a quantidade de bateria que esse gastou, em ordem do maior ao menor consumidor.
Como exemplo de cálculo de uso de bateria por processo podemos pegar o processo Uid u0a540 representado. Vemos na Figura 12 que ele está consumindo um total de 401 mAh e ao lado são mostrados quais módulos de hardware estão sendo usados pelo processo e quanto de bateria cada um está gastando. Sabendo que a bateria total do dispositivo é 4300 mAh, com uma simples regra de 3 conseguiremos tirar a porcentagem de bateria que o processo Uid u0a540 consumiu, que foi em torno de 9,32%.
Wake locks parciais e de kernel
As seções All partial wake locks e All kernel wake locks do relatório Statistics since Last Charge mostram todas as wake locks que mantiveram o dispositivo acordado, quantas vezes elas se mantiveram ativas e o tempo total que ficaram ativas, como apresentado nas figuras abaixo.
Motivos do dispositivo acordar
Após o dispositivo entrar em repouso algo deve fazê-lo acordar para que tudo volte a funcionar normalmente, seja apertar o botão de power, seja um email importante em forma de notificação ou um alarme configurado para lhe acordar às 6 da manhã. Esses motivos são listados na seção All wakeup reasons do relatório Statistics since Last Charge, o qual guarda a label do motivo, o tempo que ela ficou ativa e quantas vezes ela foi executada.
Lista de Processos
Após todas essas informações estatísticas dadas nas seções anteriores do relatório Statistics since Last Charge, é apresentada uma lista indicando todos os processos e relacionando dados como o nome do pacote, módulos de hardware que utilizou e quais os momentos exatos que estes foram utilizados.
Na Figura 16 e 17 podemos ver como são organizados os dados para cada processo, usando de exemplo o mesmo processo Uid u0a540 que foi mostrado na seção 4.4.2.
Considerações Finais
O sistema operacional Android possui inúmeras ferramentas que facilitam o manuseio pelos desenvolvedores e pelos usuários finais, mas que são pouco divulgadas e documentadas.
Uma destas ferramentas é o Battery Stats, que pode ser utilizada de várias maneiras, tanto para desenvolvedores de aplicativos que procuram melhorar o desempenho do seu software quanto para desenvolvedores de software embarcado que podem gerenciar o consumo de seus módulos de hardware e se esses estão funcionando de acordo com o esperado.
Este artigo mostrou como analisar o consumo de bateria através da ferramenta Battery Stats. Para isso, vimos como ativar o adb para ter acesso à ferramenta, explicamos o que são wake locks, sendo este um conhecimento essencial para utilizar o Battery Stats. Também explicamos as principais seções desta ferramenta, como Battery History, a qual mostra em uma linha de tempo todos os processos executados e quanto cada um consumiu de bateria; Per-PID Stats, responsável por organizar as wake locks por processo; e Statistics Since Last Charge, que é um relatório estatístico com toda informação bruta de bateria coletada pelo dispositivo.
Saiba mais
Android Embarcado e zRAM: uso e considerações








Muito bom! Parabéns Alison pelo excelente artigo!
Obrigado, Thales! Espero ter contribuído.