Android SDK comes with a large number of amazing tools. However, a lot of developers don’t know some of these. Thus, who knows that Android SDK offers a tool to monitor and analyze battery usage data ? This great tool is low level and can be called from an adb shell command.

The dumpsys batterystats command generates some intereseting statistical data about battery usage on a device. These data are organized by unique used ID (UID) and include the following :

– History of battery-related events

– Global statistical for the device

– Approximate power use per UID and system component

– Per-app mobile milliseconds per packet

– System UID aggregated statistics

– App UID aggregated statistics

The command must be used via adb shell in a terminal like that :

adb shell dumpsys batterystats --charged

You can also add a package-name to get battery usage statistics for a given app package since the device was last charged :

adb shell dumpsys batterystats --charged com.ssaurel.myapp

To get battery usage data in a human-readable format, you must the –checkin option like that :

adb shell dumpsys batterystats --charged --checkin

Output produced should be like this :

9,0,i,vers,11,116,K,L 9,0,i,uid,1000,android 9,0,i,uid,1000,com.android.providers.settings 9,0,i,uid,1000,com.android.inputdevices 9,0,i,uid,1000,com.android.server.telecom 9,0,i,uid,1000,com.android.keychain 9,0,i,uid,1000,com.android.settings 9,0,i,uid,1000,com.android.location.fused 9,0,i,uid,1001,com.android.providers.telephony 9,0,i,uid,1001,com.android.mms.service 9,0,i,uid,1001,com.android.stk 9,0,i,uid,1001,com.android.phone 9,0,i,uid,1027,com.android.nfc 9,0,i,uid,2000,com.android.shell 9,0,i,uid,10002,com.android.providers.calendar 9,0,i,uid,10003,com.android.cellbroadcastreceiver 9,0,i,uid,10004,com.android.providers.userdictionary 9,0,i,uid,10004,com.android.providers.contacts 9,0,i,uid,10005,com.google.android.apps.enterprise.dmagent 9,0,i,uid,10006,com.android.defcontainer 9,0,i,uid,10007,com.android.providers.media 9,0,i,uid,10007,com.android.providers.downloads 9,0,i,uid,10007,com.android.providers.downloads.ui 9,0,i,uid,10008,com.android.externalstorage 9,0,i,uid,10009,com.google.android.syncadapters.contacts 9,0,i,uid,10009,com.google.android.gms 9,0,i,uid,10009,com.google.android.gsf 9,0,i,uid,10009,com.google.android.gsf.login 9,0,i,uid,10009,com.google.android.backuptransport 9,0,i,uid,10011,com.google.android.dialer 9,0,i,uid,10013,com.google.android.onetimeinitializer 9,0,i,uid,10014,com.google.android.partnersetup 9,0,i,uid,10015,com.android.launcher 9,0,i,uid,10016,com.android.managedprovisioning 9,0,i,uid,10017,com.android.mms 9,0,i,uid,10018,com.android.musicfx 9,0,i,uid,10019,com.android.vending 9,0,i,uid,10022,com.android.sharedstoragebackup 9,0,i,uid,10023,com.android.systemui 9,0,i,uid,10025,com.google.android.googlequicksearchbox 9,0,i,uid,10027,com.google.android.apps.walletnfcrel 9,0,i,uid,10029,com.google.android.marvin.talkback 9,0,i,uid,10031,com.google.android.apps.books 9,0,i,uid,10034,com.google.android.calendar 9,0,i,uid,10037,com.android.chrome 9,0,i,uid,10039,com.google.android.configupdater 9,0,i,uid,10040,com.google.android.deskclock 9,0,i,uid,10041,com.android.documentsui 9,0,i,uid,10042,com.google.android.apps.docs 9,0,i,uid,10047,com.google.android.ears 9,0,i,uid,10054,com.google.android.talk 9,0,i,uid,10057,com.google.android.inputmethod.latin 9,0,i,uid,10061,com.google.android.music 9,0,i,uid,10064,com.android.packageinstaller 9,0,i,uid,10068,com.google.android.apps.plus 9,0,i,uid,10069,com.google.android.gm 9,0,i,uid,10070,com.google.android.keep 9,0,i,uid,10071,com.google.android.apps.genie.geniewidget 9,0,i,uid,10072,com.android.printspooler 9,0,i,uid,10076,com.google.android.videos 9,0,i,uid,10079,com.google.android.youtube 9,0,i,uid,10084,com.google.android.apps.magazines 9,0,i,dsd,1820451,97,s-,p- 9,0,i,dsd,3517481,98,s-,p- 9,0,l,bt,0,8548446,1000983,8566645,1019182,1418672206045,8541652,994188 9,0,l,gn,0,0,666932,495312,0,0,2104,1444 9,0,l,m,6794,0,8548446,8548446,0,0,0,666932,495312,0,697728,0,0,0,5797,0,0 9,0,l,br,9,0,6785,0,0 9,0,l,sgt,8548446,0,0,0,0 9,0,l,sst,9000 9,0,l,sgc,0,0,0,0,0 9,0,l,dct,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9,0,l,dcc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9,0,l,wst,0,0,0,0,0,0,0,0 9,0,l,wsc,0,0,0,0,0,0,0,0 9,0,l,wsst,0,0,0,0,0,0,0,52,0,0,8548394,0,0 9,0,l,wssc,0,0,0,0,0,0,0,2,0,0,2,0,0 9,0,l,wsgt,0,0,0,3016,8545430 9,0,l,wsgc,0,0,0,2,1 9,0,l,bst,0,0,0,0 9,0,l,bsc,0,0,0,0 9,0,l,dc,2,3,0,3 9,0,l,kwl,msm_ipc_read00000001:00000001,0,0 9,0,l,kwl,rpm_regulator_tcxo,0,0 9,0,l,kwl,wlan,25423,32 9,0,l,kwl,event4-648,0,0 9,0,l,kwl,qcril,187,2 9,0,l,kwl,ssr(dsps),0,0 9,0,l,kwl,bq51051b_wireless_chip,0,0 9,0,l,kwl,qmi0,0,0 9,0,l,kwl,event5-648,7755,1231 9,0,l,kwl,PowerManagerService.WakeLocks,680435,3908 9,0,l,kwl,msm_hsic_host,66258,35 9,0,l,kwl,qcom_sap_wakelock,0,0 9,0,l,kwl,sns_async_ev_wakelock,91954,1244 9,0,l,kwl,qmuxd_port_wl_12,0,0 9,0,l,kwl,pil-wcnss,0,0 9,0,l,kwl,event0-648,11364,1212 9,0,l,kwl,dofstrim,0,0 9,0,l,kwl,ssr(lpass),0,0 9,0,l,kwl,qmuxd_port_wl_11,0,0 9,0,l,kwl,event2-648,0,0 9,0,l,kwl,pil-vidc,0,0 9,0,l,kwl,mmc0,0,0 9,0,l,kwl,tabla_gpio_irq_resend,0,0 9,0,l,kwl,pil-q6,0,0 9,0,l,kwl,radio-interface,0,0 9,0,l,kwl,msm_ipc_read00000001:00000002,0,0 9,0,l,kwl,event3-648,8143,1231 9,0,l,kwl,ssr(wcnss),0,0 9,0,l,kwl,ssr(gss),0,0 9,0,l,kwl,KeyEvents,98,1263 9,0,l,kwl,unknown_wakeups,0,0 9,0,l,kwl,qmuxd_port_wl_10,0,0 9,0,l,kwl,pil-gss,0,0 9,0,l,kwl,qcom_rx_wakelock,161828,3205 9,0,l,kwl,ssr(external_modem),0,0 9,0,l,kwl,power-supply,228,23 9,0,l,kwl,pil-dsps,0,0 9,0,l,kwl,wcnss,0,0 9,0,l,kwl,msm_otg,0,0 9,0,l,kwl,pm8921_eoc,0,0 9,0,l,kwl,slimport_wake_lock,0,0 9,0,l,kwl,smsm_snapshot,0,0 9,0,l,kwl,suspend_backoff,239760,24 9,0,l,kwl,event1-648,9331,1212 9,0,l,kwl,main,429,0 9,0,l,kwl,alarm,2892,270 9,0,l,kwl,PowerManagerService.Display,432,1 9,0,l,kwl,qmi1,0,0 9,0,l,kwl,kickstart,211,1 9,0,l,kwl,qmuxd_port_wl_9,9,102 9,0,l,kwl,ear_hook,0,0 9,0,l,kwl,mmc0_detect,52,1232 9,0,l,kwl,deleted_wake_locks,0,0 9,0,l,kwl,PowerManagerService.Broadcasts,7331,0 9,0,l,kwl,qmi2,0,0 9,0,l,kwl,smd_sns_dsps,456,1340 9,0,l,kwl,alarm_rtc,36084,122 9,0,l,pws,2100,64.4,42.0,63.0 9,10009,l,pwi,uid,20.6 9,0,l,pwi,cell,18.5 9,0,l,pwi,idle,8.73 9,0,l,pwi,uid,5.46 9,1000,l,pwi,uid,5.11 9,0,l,pwi,wifi,3.28 9,10019,l,pwi,uid,0.847 9,10069,l,pwi,uid,0.408 9,0,l,pwi,scrn,0.385 9,10034,l,pwi,uid,0.322 9,10025,l,pwi,uid,0.185 9,10002,l,pwi,uid,0.180 9,10023,l,pwi,uid,0.168 9,1001,l,pwi,uid,0.0297 9,10068,l,pwi,uid,0.0296 9,10057,l,pwi,uid,0.0234 9,1027,l,pwi,uid,0.0157 9,10079,l,pwi,uid,0.00905 9,10054,l,pwi,uid,0.00527 9,10005,l,pwi,uid,0.00341 9,10004,l,pwi,uid,0.00204 9,2000,l,pwi,uid,0.00192 9,10070,l,pwi,uid,0.00144 9,10061,l,pwi,uid,0.000860 9,10014,l,pwi,uid,0.000495 9,10040,l,pwi,uid,0.000286 9,1014,l,pwi,uid,0.00000157 9,0,l,pwi,over,1.36 9,0,l,nt,0,0,127699,11159,0,0,975,163,0,0 9,0,l,pr,file-storage,0,140,0,0,0,0 9,0,l,pr,TX_Thread,0,440,0,0,0,0 9,0,l,pr,flush-179:0,0,850,0,0,0,0 9,0,l,pr,sync_supers,10,0,0,0,0,0 9,0,l,pr,dhcpcd,0,30,0,0,0,0 9,0,l,pr,kauditd,50,10,0,0,0,0 9,0,l,pr,sdcard,20,110,0,0,0,0 9,0,l,pr,flush-0:18,40,100,0,0,0,0 9,0,l,pr,zygote,250,90,0,0,0,0 9,0,l,pr,bdi-default,0,610,0,0,0,0 9,0,l,pr,ueventd,940,2630,0,0,0,0 9,0,l,pr,kswapd0,0,180,0,0,0,0 9,0,l,pr,debuggerd,180,610,0,0,0,0 9,0,l,pr,jbd2/mmcblk0p20,0,50,0,0,0,0 9,0,l,pr,jbd2/mmcblk0p21,0,250,0,0,0,0 9,0,l,pr,jbd2/mmcblk0p22,0,90,0,0,0,0 9,0,l,pr,jbd2/mmcblk0p23,0,1150,0,0,0,0 9,0,l,pr,MC_Thread,0,1270,0,0,0,0 9,0,l,pr,adbd,10,40,0,0,0,0 9,0,l,pr,lmkd,360,990,0,0,0,0 9,0,l,pr,logd,1550,1670,0,0,0,0 9,0,l,pr,netd,80,330,0,0,0,0 9,0,l,pr,rild,160,0,0,0,0,0 9,0,l,pr,vold,50,100,0,0,0,0 9,0,l,pr,/init,0,70,0,0,0,0 9,0,l,pr,mpdecision,1400,7820,0,0,0,0 9,0,l,pr,khubd,0,10,0,0,0,0 9,0,l,pr,kthreadd,0,600,0,0,0,0 9,0,l,pr,kworker/0:0,0,3520,0,0,0,0 9,0,l,pr,sensors.qcom,380,720,0,0,0,0 9,0,l,pr,healthd,20,190,0,0,0,0 9,0,l,pr,thermald,60,360,0,0,0,0 9,0,l,pr,mmcqd/0,0,8700,0,0,0,0 9,0,l,pr,qseecomd,0,90,0,0,0,0 9,0,l,pr,ksoftirqd/0,0,420,0,0,0,0 9,0,l,pr,wpa_supplicant,170,160,0,0,0,0 9,0,l,pr,migration/0,0,1630,0,0,0,0 9,0,l,pr,migration/1,20,0,0,0,0,0 9,0,l,pr,RX_Thread,0,790,0,0,0,0 9,0,l,pr,netmgrd,40,20,0,0,0,0 9,1000,l,nt,0,0,11054,11216,0,0,26,29,0,0 9,1000,l,ua,2,0,0 9,1000,l,sr,5,6813,1 9,1000,l,wl,*alarm*,0,f,0,23856,p,151,0,w,0 9,1000,l,st,8548446,8548446,8548446 9,1000,l,pr,system,83310,35060,0,0,0,0 9,1000,l,pr,surfaceflinger,6620,9330,0,0,0,0 9,1000,l,pr,ks,0,60,0,0,0,0 9,1000,l,pr,qcks,0,90,0,0,0,0 9,1000,l,pr,efsks,0,50,0,0,0,0 9,1000,l,pr,com.android.server.telecom,110,100,0,0,0,0 9,1000,l,pr,servicemanager,40,110,0,0,0,0 9,1001,l,st,8548446,8548446,8548446 9,1001,l,pr,qmuxd,0,30,0,0,0,0 9,1001,l,pr,com.android.phone,450,300,0,0,0,0 9,1014,l,nt,0,0,3410,3370,0,0,10,10,0,0 9,1027,l,st,8548446,8548446,8548446 9,1027,l,pr,com.android.nfc,250,160,0,0,0,0 9,10002,l,apk,15,com.android.providers.calendar,com.android.providers.calendar.CalendarProviderIntentService,2383,15,15 9,10005,l,nt,0,0,1241,2488,0,0,6,10,0,0 9,10009,l,nt,0,0,232255,258511,0,0,472,600,0,0 9,10009,l,wfl,7689000,9814000,0 9,10009,l,jb,com.google.android.gms/.gcm.nts.TaskExecutionService,81,3 9,10009,l,sr,0,43643,46 9,10025,l,nt,0,0,152461,42850,0,0,267,243,0,0 9,10025,l,wfl,1593000,629000,0 9,10034,l,nt,0,0,77657,40093,0,0,172,170,0,0 9,10068,l,nt,0,0,11929,8383,0,0,50,47,0,0 9,10069,l,nt,0,0,41553,22886,0,0,85,91,0,0

Now, what to do with this output ? You understood that the result is in CSV format. Each line output contains statistics related to battery usage. To interpret the result, you must know that the first four values in each line correspond to the following :

– Dummy Integer

– UID

– Aggregation mode

– “l” for –charged, means usage since last charge

– “u” for –unplugged, which means usage since last unplugged

– “i” for information that is not tied to charged / uncharged status

– Section identifier, which determines how to interpret the fifth value and the following ones in the line

Currently, Android has 41 sections and the interpretation for each section is shown in the following table :