计算机系统应用教程网站

网站首页 > 技术文章 正文

Python ADB工具:快速执行ADB操作 python和adb shell交互

btikc 2024-09-29 10:13:03 技术文章 15 ℃ 0 评论

简介

本文使用Python 内置库subprocess中的run调用系统cmd执行adb命令实现如下功能

1.截图、

2.保存logcat

3.录制视频的工具。

通过这个工具,用户可以方便地获取Android设备的屏幕截图、查看设备日志以及录制设备视频。非常方便提高效率

使用前准备

1.需要配置好ADB环境

2.安卓手机需要提前连接好电脑

完整代码如下:

import time
import os
from subprocess import run




def time_stamp():
    """
    生产年月日,时分秒
    """
    now = int(round(time.time() * 1000))
    return time.strftime('%Y-%m-%d_%H%M%S', time.localtime(now / 1000))




class ADBCmd:
    def __init__(self, ip, port, save_path=None,file_name=None, res = None, dst = None):
        self.ip = ip
        self.port = port
        self.save_path = save_path
        self.file_name = file_name
        self.res = res
        self.dst = dst


        res = os.popen("adb devices")
        if not "{}:{}".format(self.ip, self.port) in res.read():
            run("adb connect {}:{}".format(self.ip, self.port), shell=True)


    def screen_shot(self):
        """
        名称是时间戳命名格式
        需要传一个保存图片路径,路径目录不存在的话,会自动创建
        """
        t = time_stamp()
        shot = r"adb -s{}:{} shell screencap -p /sdcard/{}.png".format(self.ip, self.port, t)
        run(shot, shell=True)


        if not os.path.exists(self.save_path):
            os.makedirs(self.save_path)
        pull_png = r"adb -s{}:{} pull /sdcard/{}.png {}".format(self.ip, self.port, t, self.save_path)
        run(pull_png, shell=True)




    def screen_record(self):
        """ 
        时间戳命名
        关掉cmd命令窗口,即可保存视频
        需要传一个保存视频路径
        """
        t = time_stamp()
        record = r"adb -s{}:{} shell screenrecord /sdcard/{}.mp4".format(self.ip, self.port, t)
        os.system(record)


        if not os.path.exists(self.save_path):
            os.makedirs(self.save_path)
        pull_png = r"adb -s{}:{} pull /sdcard/{}.mp4 {}".format(self.ip, self.port, t, self.save_path)
        run(pull_png, shell=True)




    def log_cat(self):
        """
        关掉cmd命令窗口,即可保存日志
        需要传一个保存日志路径及其名称 例:D:\log\crash.log
        """
        log = r"adb -s{}:{} logcat > {}".format(self.ip, self.port, self.file_name)
        os.system(log)




    def pull_file(self):
        """
        从设备拉数据下来
        """
        pull = r"adb -s{}:{} pull {} {}".format(self.ip, self.port, self.res, self.dst)
        os.system(push)


        
    def push_file(self):
    """
        上传数据到设备
        """
        push = r"adb -s{}:{} push {} {}".format(self.ip, self.port, self.res, self.dst)
        os.system(push)


if __name__ == '__main__':
    ip = "10.9.66.194"  # 安卓设备ip地址
    port = "8888"  # 端口
    save_img = r"D:\code\安卓截图\G00113_2" # 截图保存到电脑路径
    
    file_name = r"D:\code\安卓截图\error.log"  # 保存log的名称
    
    t = ADBCmd(ip, port,file_name) #


    t.log_cat()



Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表