Python实现对adb命令封装

这篇文章主要介绍了Python实现对adb命令封装,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧!

#!/usr/bin/evn python # -*- coding:utf-8 -*- # FileName adbtools.py # Author: heyNiu # Created Time: 2016/9/19 """ adb 工具类 """ import os import platform import re import time import utils.timetools class AdbTools(object): def __init__(self, device_id=''): self.__system = platform.system() self.__find = '' self.__command = '' self.__device_id = device_id self.__get_find() self.__check_adb() self.__connection_devices() def __get_find(self): """ 判断系统类型,windows使用findstr,linux使用grep :return: """ if self.__system is "Windows": self.__find = "findstr" else: self.__find = "grep" def __check_adb(self): """ 检查adb 判断是否设置环境变量ANDROID_HOME :return: """ if "ANDROID_HOME" in os.environ: if self.__system == "Windows": path = os.path.join(os.environ["ANDROID_HOME"], "platform-tools", "adb.exe") if os.path.exists(path): self.__command = path else: raise EnvironmentError( "Adb not found in $ANDROID_HOME path: %s." % os.environ["ANDROID_HOME"]) else: path = os.path.join(os.environ["ANDROID_HOME"], "platform-tools", "adb") if os.path.exists(path): self.__command = path else: raise EnvironmentError( "Adb not found in $ANDROID_HOME path: %s." % os.environ["ANDROID_HOME"]) else: raise EnvironmentError( "Adb not found in $ANDROID_HOME path: %s." % os.environ["ANDROID_HOME"]) def __connection_devices(self): """ 连接指定设备,单个设备可不传device_id :return: """ if self.__device_id == "": return self.__device_id = "-s %s" % self.__device_id def adb(self, args): """ 执行adb命令 :param args:参数 :return: """ cmd = "%s %s %s" % (self.__command, self.__device_id, str(args)) # print(cmd) return os.popen(cmd) def shell(self, args): """ 执行adb shell命令 :param args:参数 :return: """ cmd = "%s %s shell %s" % (self.__command, self.__device_id, str(args)) # print(cmd) return os.popen(cmd) def mkdir(self, path): """ 创建目录 :param path: 路径 :return: """ return self.shell('mkdir %s' % path) def get_devices(self): """ 获取设备列表 :return: """ l = self.adb('devices').readlines() return (i.split()[0] for i in l if 'devices' not in i and len(i) > 5) def get_current_application(self): """ 获取当前运行的应用信息 :return: """ return self.shell('dumpsys window w | %s / | %s name=' % (self.__find, self.__find)).read() def get_current_package(self): """ 获取当前运行app包名 :return: """ reg = re.compile(r'name=(.+?)/') return re.findall(reg, self.get_current_application())[0] def get_current_activity(self): """ 获取当前运行activity :return: package/activity """ reg = re.compile(r'name=(.+?))') return re.findall(reg, self.get_current_application())[0] def __get_process(self, package_name): """ 获取进程信息 :param package_name: :return: """ if self.__system is "Windows": pid_command = self.shell("ps | %s %s$" % (self.__find, package_name)).read() else: pid_command = self.shell("ps | %s -w %s" % (self.__find, package_name)).read() return pid_command def process_exists(self, package_name): """ 返回进程是否存在 :param package_name: :return: """ process = self.__get_process(package_name) return package_name in process def get_pid(self, package_name): """ 获取pid :return: """ pid_command = self.__get_process(package_name) if pid_command == '': print("The process doesn't exist.") return pid_command req = re.compile(r"d+") result = str(pid_command).split() result.remove(result[0]) return req.findall(" ".join(result))[0] def get_uid(self, pid): """ 获取uid :param pid: :return: """ result = self.shell("cat /proc/%s/status" % pid).readlines() for i in result: if 'uid' in i.lower(): return i.split()[1] def get_flow_data_tcp(self, uid): """ 获取应用tcp流量 :return:(接收, 发送) """ tcp_rcv = self.shell("cat proc/uid_stat/%s/tcp_rcv" % uid).read().split()[0] tcp_snd = self.shell("cat proc/uid_stat/%s/tcp_snd" % uid).read().split()[0] return tcp_rcv, tcp_snd def get_flow_data_all(self, uid): """ 获取应用流量全部数据 包含该应用多个进程的所有数据 tcp udp等 (rx_bytes, tx_bytes) >> (接收, 发送) :param uid: :return:list(dict) """ all_data = [] d = {} data = self.shell("cat /proc/net/xt_qtaguid/stats | %s %s" % (self.__find, uid)).readlines() for i in data: if not i.startswith('n'): item = i.strip().split() d['idx'] = item[0] d['iface'] = item[1] d['acct_tag_hex'] = item[2] d['uid_tag_int'] = item[3] d['cnt_set'] = item[4] d['rx_bytes'] = item[5] d['rx_packets'] = item[6] d['tx_bytes'] = item[7] d['tx_packets'] = item[8] d['rx_tcp_bytes'] = item[9] d['rx_tcp_packets'] = item[10] d['rx_udp_bytes'] = item[11] d['rx_udp_packets'] = item[12] d['rx_other_bytes'] = item[13] d['rx_other_packets'] = item[14] d['tx_tcp_bytes'] = item[15] d['tx_tcp_packets'] = item[16] d['tx_udp_bytes'] = item[17] d['tx_udp_packets'] = item[18] d['tx_other_bytes'] = item[19] d['tx_other_packets'] = item[20] all_data.append(d) d = {} return all_data @staticmethod def dump_apk(path): """ dump apk文件 :param path: apk路径 :return: """ # 检查build-tools是否添加到环境变量中 # 需要用到里面的aapt命令 l = os.environ['PATH'].split(';') build_tools = False for i in l: if 'build-tools' in i: build_tools = True if not build_tools: raise EnvironmentError("ANDROID_上一篇:python如何求数组连续最大和的示例代码下一篇:Python脚本利用adb进行手机控制的方法 热门搜索

adb命令 

ADB常用命令 

实用命令 

对齐命令 

命令对象 

相关文章

Python实现对adb命令封装

2021-09-10阅读(3450)评论(0)推荐()

这篇文章主要介绍了Python实现对adb命令封装,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

appium+python adb常用命令分享

2021-09-20阅读(8777)评论(0)推荐()

这篇文章主要介绍了appium+python adb常用命令分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一些比较实用的 Android adb 命令分享

2021-10-07阅读(2367)评论(0)推荐()

这篇文章主要介绍了一些比较实用的 Android adb 命令分享,本文讲解了查看设备、安装应用、卸载一个应用、启动一个页面、进入设备的shell界面等内容,需...

Python如何通过subprocess调用adb命令详解

2021-10-08阅读(7912)评论(0)推荐()

python可以说是写一些小脚本的利器语法简单,做为最著名的就“胶水语言”用它来写一些命令脚本非常的方便。下面这篇文章主要给大家介绍了关于Python如何通过s...

使用Python脚本和ADB命令实现卸载App

2021-10-13阅读(5918)评论(0)推荐()

这篇文章主要介绍了使用Python脚本和ADB命令实现卸载App的实现方法,文中给出了完整的示例代码,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看...

Python调用adb命令实现对多台设备同时进行reboot的方法

2021-11-03阅读(6687)评论(0)推荐()

今天小编就为大家分享一篇Python调用adb命令实现对多台设备同时进行reboot的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Android中ADB命令用法大结局

2021-10-07阅读(7778)评论(0)推荐()

adb全名android debug bridge 安卓调试桥,下面这篇文章主要给大家介绍了关于Android中ADB命令用法的相关资料,文中通过示例代码介绍的...

取消

有人回复邮件通知

提交评论

© 2021 编程之家 

工信部备案号:琼ICP备2022000316号

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...