Python小工具——adb功耗测试

内容介绍

使用adb工具获取并存储设备的用电信息,然后根据adb返回的结果,使用python分析指定app的功耗情况(功耗=消耗的电能/时间)。

准备工作

通过adb工具查看当前运行程序的包名。
adb shell dumpsys window | grep mCurrentFocus

详细步骤

  1. 用usb连接手机,开启adb调试,输入adb devices查看设备是否连接正常。
  2. 关闭所有应用程序和后台。
  3. 执行命令adb shell dumpsys batterystats --reset,清除手机原有的电量统计信息。
  4. 断开usb,打开待测app,进行测试。

    注意:一定要断开usb进行测试,否则将无法从文件中获得想要的数据。

  5. 测试完成后,重新连接usb,执行命令adb shell dumpsys batterystats > 电量信息.txt,保存电量信息到txt文件。
  6. 运行python代码,查看被测app的功耗。
    (1)可以使用命令python get_mW.py "文件路径" "包名"来运行程序。
    (2)也可以直接修改main函数中的file_path和pkg_name,然后运行。
    import re
    import sys
    
    def get_mW(file_path, pkg_name):
        power_flag = 0
        power = 0.0 # 消耗的电能
        id = None
        time_flag = 0
        time = 0 # 运行的时间
        with open(file_path, 'r') as f:
            for line in f.readlines():
                if power_flag == 1 and id is not None:
                    if re.search(r'Uid\s{id}:\s(\S)*'.format(id=id), line):
                        power = float(re.search(r'Uid\s{id}:\s(\S)*'.format(id=id), line).group(1))
                if time_flag == 1:
                    if re.search(r'Total running: ([0-9]*)s ([0-9]*)ms', line):
                        time1 = re.search(r'Total running: ([0-9]*)s ([0-9]*)ms', line).group(1)
                        time2 = re.search(r'Total running: ([0-9]*)s ([0-9]*)ms', line).group(2)
                        time = int(time1)+int(time2)*0.001
                if time_flag == 0 and re.search(r'{id}\:$'.format(id=id), line):
                    time_flag = 1
                if 'Estimated power use' in line and power_flag == 0:
                    power_flag = 1
                if re.search(r'\+top\=([0-9a-z]*)\:\"{}\"'.format(pkg_name), line):
                    id = re.search(r'\+top\=([0-9a-z]*)\:\"{}\"'.format(pkg_name), line).group(1)
        print('pkg name:', pkg_name)
        print('Uid:', id)
        print('power(mAh):', power)
        print('running time(s):', time)
        print('power dissipation(mW):', power*3600/time)
    
    if __name__ == '__main__':
        args = sys.argv
        if len(args) > 1:
            file_path = args[1]
            pkg_name = args[2]
        else:
            file_path = '文件路径' # 电量信息文件所在路径
            pkg_name = '包名' # 待测app的包名
        get_mW(file_path, pkg_name)
    

参考资料

Android手机app的adb命令测试电量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容