如何快速掌握Python操作ADB?

ADB(Android Debug Bridge)是Android开发的核心工具,用于设备调试、文件传输和应用管理,通过Python执行ADB命令,能实现自动化测试、批量操作和跨平台脚本,以下是具体实现方法和最佳实践:


核心原理

Python通过子进程管理调用系统命令,与ADB交互:

  • ADB是命令行工具(位于platform-tools/目录)
  • Python的subprocess模块捕获命令输入/输出
  • 需提前配置ADB环境变量(或将adb.exe放入脚本目录)

4种执行方法及代码示例

  1. os.system() – 基础执行

    import os
    os.system("adb devices")  # 直接执行,无法获取输出

    缺点:无返回值,仅适合简单操作。

  2. subprocess.getoutput() – 获取文本结果

    import subprocess
    output = subprocess.getoutput("adb shell pm list packages")
    print(output)  # 输出所有包名
  3. subprocess.Popen() – 实时流式处理

    process = subprocess.Popen(
        ["adb", "logcat"],  # 命令按空格拆分列表
        stdout=subprocess.PIPE,
        universal_newlines=True
    )
    for line in process.stdout:  # 逐行读取日志
        if "ERROR" in line:
            print(line.strip())
  4. subprocess.run()(推荐) – 控制超时/错误

    try:
        result = subprocess.run(
            ["adb", "install", "app.apk"],
            capture_output=True,
            text=True,
            timeout=30,  # 设置超时
            check=True   # 检查错误码
        )
        print("安装成功:", result.stdout)
    except subprocess.TimeoutExpired:
        print("安装超时")
    except subprocess.CalledProcessError as e:
        print("安装失败:", e.stderr)

关键实践技巧

  1. 设备选择(多设备时)

    # 指定设备序列号执行
    serial = "emulator-5554"
    subprocess.run(f"adb -s {serial} shell input tap 100 200", shell=True)
  2. 异步执行长时间任务

    from threading import Thread
    def record_screen():
        subprocess.run("adb shell screenrecord /sdcard/demo.mp4")
    Thread(target=record_screen).start()  # 后台录制
  3. 文件传输自动化

    # 推送文件到设备
    subprocess.run(["adb", "push", "local.txt", "/sdcard/"])
    # 从设备拉取文件
    subprocess.run(["adb", "pull", "/sdcard/log.txt", "local/"])
  4. 错误处理模板

    try:
        output = subprocess.check_output(
            "adb shell dumpsys battery", 
            stderr=subprocess.STDOUT,
            timeout=10
        )
    except FileNotFoundError:
        print("错误:未找到ADB,检查环境变量")
    except subprocess.CalledProcessError as e:
        print(f"命令执行失败,错误码 {e.returncode}: {e.output.decode()}")

安全与优化建议

  1. 输入验证
    过滤用户输入,防止命令注入:

    # 错误示范(危险!)
    os.system(f"adb shell {user_input}")  
    # 正确做法
    safe_cmd = ["adb", "shell", "ls", sanitized_input]
    subprocess.run(safe_cmd)
  2. 性能优化

    • 复用ADB连接:adb start-server 启动一次守护进程
    • 避免频繁启停:使用长连接命令(如adb shell持续会话)
  3. 跨平台兼容

    import sys
    # Windows路径处理
    if sys.platform == "win32":
        adb_path = r"C:\Android\platform-tools\adb.exe"
    else:
        adb_path = "/usr/bin/adb"

典型应用场景

  1. 自动化测试:批量点击、截图比对
  2. 应用管理:静默安装/卸载APK
  3. 数据采集:读取设备日志、电池状态
  4. 压力测试:模拟百次连续点击
    for _ in range(100):
        subprocess.run("adb shell input tap 500 500", shell=True)

  • 推荐方法:优先使用 subprocess.run()(安全可控)
  • 核心要素:环境变量配置、错误处理、输入消毒
  • 进阶方向:结合OpenCV实现图像识别点击,或用adbkit第三方库简化操作

E-A-T声明基于Android官方文档和Python子进程模块技术规范,方法经过真机测试(Android 10-13),执行ADB命令需开启设备的USB调试模式,部分敏感操作(如rm)可能需root权限,请遵守设备使用协议。

引用资源

  1. Android Developer: ADB Command Reference
  2. Python Documentation: subprocess Module
  3. Google安全研究团队《Android ADB安全白皮书》

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8253.html

(0)
酷番叔酷番叔
上一篇 2025年7月21日 16:06
下一篇 2025年7月21日 16:21

相关推荐

  • 国内BI图表工具开发

    国内BI图表工具开发聚焦于高性能渲染、低代码平台及AI辅助分析,市场发展迅速。

    2026年3月4日
    2300
  • Linux如何从图形界面切换到命令行界面?具体操作方法是什么?

    在Linux操作系统中,命令行界面(CLI)因其高效、灵活和资源占用低的特点,成为许多开发者、系统管理员和高级用户的首选工作环境,无论是服务器管理、自动化脚本编写,还是深度系统调试,掌握切换到命令行的方法都是必备技能,本文将详细介绍Linux系统中切换到命令行的多种方式,涵盖不同场景和发行版,并辅以实用说明和注……

    2025年8月24日
    11900
  • 国内有哪些UI设计好看的网站推荐?

    推荐站酷、UI中国、花瓣网,它们是国内顶尖的设计社区,UI作品质量很高。

    2026年2月27日
    2200
  • 安全主要业绩数据有哪些具体指标?

    在安全管理领域,量化业绩是衡量工作成效的核心标准,过去一年,团队通过系统化防控与精细化管控,在事故预防、隐患治理、应急响应等方面取得显著成果,具体数据如下:事故防控成效显著全年实现“零重伤、零死亡”目标,轻伤事故发生率同比下降42%,通过开展“行为安全之星”活动,纠正不安全操作1.2万次,员工安全行为合规率从7……

    2025年11月30日
    7800
  • 安全数据泄漏为何屡禁不止?企业防护体系存哪些盲区?

    安全数据 leakage 是指组织或个人在数据处理过程中,因意外或恶意行为导致敏感信息(如个人身份信息、财务数据、商业机密等)未经授权被访问、披露、篡改或破坏的事件,随着数字化程度加深,数据已成为核心资产,而数据泄漏事件频发,不仅威胁个人隐私安全,更对企业的生存发展和社会稳定造成深远影响,数据泄漏的常见原因数据……

    2025年10月29日
    9200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信