博客
关于我
ADB
阅读量:644 次
发布时间:2019-03-15

本文共 7062 字,大约阅读时间需要 23 分钟。

import osimport sysfrom time import sleepfrom random import randintclass Event(object):    """模拟常用按键和事件处理类"""    def __init__(self):        self.KEYCODE_HOME = 3  # home键        self.KEYCODE_MENU = 82  # 结束        self.KEYCODE_BACK = 4  # 返回键        self.KEYCODE_POWER = 26  # 电源键        self.KEYCODE_DPAD_UP = 19  # 向上        self.KEYCODE_DPAD_DOWN = 20  # 向下        self.KEYCODE_DPAD_LEFT = 21  # 向左        self.KEYCODE_DPAD_RIGHT = 22  # 向右        self.package = "com"  # 项目包名    def show_menu(self):        """显示功能菜单"""        print municipium        print        print        print        print        print        print    def run(self):        self.show_menu()        num = int(input("输入选择的数字:"))        if num == 1:            print            print            print            n_click = int(input("输入选择的数字:"))            if n_click ==1:                self.back()            elif n_click ==2:                self.home()            elif n_click ==3:                self.menu()            elif n_click ==4:                self.down()            elif n_click ==5:                self.up()            elif n_click ==6:                self.left()            elif n_click ==7:                self.right()            elif n_click ==8:                self.power()            elif n_click ==9:                while True:                    try:                        exit_flag = input("确定要退出吗?请回答Yes或No")                        if exit_flag == "Yes":                            print                            break                        elif exit_flag=="No":                            print                            #继续运行                        else:                            return_home = int(input("输入错误,请返回主菜单输入1"))                            if return_home ==1:                                self.run()                            else:                                break                    except:                        pass        elif num ==2:            self.fill_rom()            os.system("pause")            self.run()        elif num ==3:            self.start_app()            os.system("pause")            self.run()        elif num ==4:            self.package_version()            os.system("pause")            self.run()        elif num ==5:            self.package_meminfo()            os.system("pause")            self.run()        elif num ==6:            self.package_name()            os.system("pause")            self.run()        elif num ==7:            self.package_activity_name()            os.system("pause")            self.run()        elif num ==8:            try:                self.start_speed()                os.system("pause")                self.run()            except:                print("函数暂不支持,建议检查包名或Activity名称")                self.run()    def package_version(self):        """查看包名版本号"""        global name        name = "com"        ver_info = os.popen(f"adb shell dumpsys package {self.package_name()} | grep version").read()        print(f"当前版本:{ver_info}")    def package_meminfo(self):        """查看包内内存使用情况"""        global name        name = "com"        package_name = self.package_name()        mem_info = os.popen(f"adb shell dumpsys meminfo {package_name}")        with open('mem_info.txt', 'w') as f:            f.write(mem_info.read())    def fill_rom(self):        """模拟生成空闲内存文件"""        try:            file_name, size = input("输入文件名和大小(单位:G):用逗号隔开").split(',')            size = int(size) * 1024            cmd = f"adb shell dd if=/dev/zero of=/sdcard/{file_name} bs=1024000 count={size}"            print(f"正在为/{file_name}创建空闲文件...")            os.system(cmd)            print(f"文件创建完成,文件大小:{size}MB")        except:            print("文件创建失败,可能是权限问题或文件名冲突。")    def start_speed(self):        """测试热冷启动速度"""        global total_time, total_times, app_name        hot_cold_choice = int(input("热启动输入1,冷启动输入2:"))        app_name = input("请输入包名:")        run_count = int(input("输入执行次数:"))        if hot_cold_choice ==1:            for i in range(run_count):                start_time = os.popen(f"adb shell am start -W -n {app_name}`).read()                time tak                total_times.append(start_time)                sleep(3)                home_key = Event().KEYCODE_HOME                os.system(f"adb shell input keyevent {home_key}")                sleep(5)        else:            for i in range(run_count):                start_time = os.popen(f"adb shell am start -W -n {app_name}`).read()                time tak                total_times.append(start_time)                sleep(2)                os.system(f"adb shell am force-stop {app_name}")                sleep(2)        total_time = sum(total_times)/run_count        print(f"平均启动时间:{total_time}秒")    def package_activity_name(self):        """获取当前活动 Surely name"""        focus_component = os.popen("adb shell dumpsys window | findstr mCurrentFocus").read()        package = "com"        activity = None        for line in focus_component.splitlines():            if "com" in line:                activity = line.split('/')[-2]                break        return activity    def package_name(self):        """获取包名"""        focus_component = os.popen("adb shell dumpsys window | findstr mCurrentFocus").read()        package = None        for line in focus_component.splitlines():            if "com" in line:                package = line.split('/')[-2]                break        if package is not None:            return package        else:            print("未能获取当前输入的活动)    def start_app(self):        """启动指定应用"""        name = "com"        package_name = None        for line in self.package_name().splitlines():            if "com" in line:                package_name = line.split('/')[-2]                break        if package_name:            os.system(f"adb shell am start -n {package_name}")        else:            print("无法启动应用,请检查包名是否正确")    def back(self):        """模拟返回键按键"""        key_event = f"adb shell input keyevent {self.KEYCODE_BACK}"        os.system(key_event)    def home(self):        """模拟主键按键"""        key_event = f"adb shell input keyevent {self.KEYCODE_HOME}"        os.system(key_event)    def menu(self):        """模拟菜单键按键"""        key_event = f"adb shell input keyevent {self.KEYCODE_MENU}"        os.system(key_event)    def power(self):        """模拟电源键按键"""        key_event = f"adb shell input keyevent {self.KEYCODE_POWER}"        os.system(key_event)    def up(self):        """模拟向上滑动"""        key_event = f"adb shell input keyevent {self.KEYCODE_DPAD_UP}"        os.system(key_event)    def down(self):        """模拟向下滑动"""        key_event = f"adb shell input keyevent {self.KEYCODE_DPAD_DOWN}"        os.system(key_event)    def left(self):        """模拟向左滑动"""        key_event = f"adb shell input keyevent {self.KEYCODE_DPAD_LEFT}"        os.system(key_event)    def right(self):        """模拟向右滑动"""        key_event = f"adb shell input keyevent {self.KEYCODE_DPAD_RIGHT}"        os.system(key_event)if __name__ == "__main__":    event = Event()    event.run()

转载地址:http://aefmz.baihongyu.com/

你可能感兴趣的文章
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
查看>>
概念唱片Plastic Beach封面高清壁纸
查看>>
旅游后期效果Ography Lightroom预设
查看>>
圆角几何艺术动态壁纸
查看>>
SpamSieve for mac(邮件过滤器)
查看>>
炫酷的圣诞球徽标AE模板
查看>>
uFocus for Mac(mac文本编辑器)
查看>>
2017CS231n笔记5.CNN
查看>>
Linux系统安装Nodejs
查看>>
vue项目报错集合
查看>>
图片链接
查看>>
LINUX-WIFI无线接入的一些东西
查看>>
word文档手写字母总会大写问题
查看>>
Redis中的key
查看>>
Andriod进阶之路 - DataBinding的简单使用
查看>>
juc-09-控制并发流程工具类
查看>>
第一节 docker安装
查看>>
Linux系统时间与硬件时间及时间同步
查看>>
Django静态文件的加载以及STATIC_URL、 STATIC_ROOT 、STATICFILES_DIRS的区别
查看>>
Spring 和 DI 依赖注入
查看>>