杰瑞科技汇

Android自动化,Python怎么实现?

核心工具:uiautomator2

对于 Python 自动化 Android uiautomator2 (简称 u2) 是目前最主流、功能最强大的库,它的工作原理如下:

  1. 在手机端安装一个“Agent”:这个 Agent 是一个 Android App,它运行在你的手机上,负责执行具体的操作(如点击、输入、获取界面元素等)。
  2. PC 端的 Python 脚本:你的 Python 脚本通过 HTTP 协议向手机上的 Agent 发送指令。
  3. 交互流程:Python 脚本 -> 发送指令 -> 手机 Agent 接收并执行 -> 返回结果 -> Python 脚本接收结果。

第一步:环境搭建

你需要准备两样东西:一台 Android 手机/模拟器 和一台电脑。

手机端设置(以 Android 手机为例)

a. 开启开发者选项和 USB 调试

  1. 进入手机的 “设置” -> “关于手机”
  2. 连续点击 “版本号”“内部版本号” 7次左右,直到提示“您已处于开发者模式”。
  3. 返回 “设置”,找到 “开发者选项”
  4. 在开发者选项中,开启 “USB 调试”

b. 安装 uiautomator2 的 Agent App 最简单的方法是使用 uiautomator2 库自带的命令行工具。

在你的电脑上(确保已安装 Python 和 pip),执行以下命令:

pip install --pre uiautomator2

通过 USB 线将手机连接到电脑,在电脑上执行:

python -m uiautomator2 init

这个命令会自动完成以下操作:

  • 检查 ADB 是否可用。
  • 在你的手机上安装一个名为 ATX 的 App(也就是 Agent)。
  • 启动一个 HTTP 服务器,监听来自电脑的连接。

手机上会弹出授权请求,允许 USB 调试和安装应用,请点击“允许”。

电脑端设置

确保你的电脑上安装了:

  • Python 3.x
  • Android Platform Tools (包含 adb 命令),这是 uiautomator2 依赖的工具,用于与设备通信。

在 Windows 上,你可以直接下载 SDK Platform Tools for Windows,在 macOS 或 Linux 上,可以通过包管理器安装,例如在 Ubuntu 上:sudo apt-get install android-tools-adb


第二步:编写你的第一个自动化脚本

手机和电脑已经连接好了,我们来写一个简单的脚本,实现“打开微信 -> 点击搜索框 -> 输入 'Python'”的功能。

安装 Python 库

pip install uiautomator2

编写 Python 代码 (test_wechat.py)

import uiautomator2 as u2
import time
# 1. 连接设备
# 如果是通过 USB 连接,u2 会自动识别
# 如果是通过 Wi-Fi 连接,需要指定 IP, d = u2.connect("192.168.1.100:5555")
d = u2.connect()
print("设备已连接:", d.info)
# 2. 启动微信
print("正在启动微信...")
d.app_start("com.tencent.mm")
time.sleep(5)  # 等待微信启动
# 3. 点击搜索框
# 使用 resourceId 定位元素,这是最稳定的方式之一
# 你可以使用 uiautomator2 的 dump 命令来获取元素属性
print("正在点击搜索框...")
d(resourceId="com.tencent.mm:id/h9").click()
# 4. 在搜索框中输入文字
print("正在输入 'Python'...")
d(resourceId="com.tencent.mm:id/f0").set_text("Python")
# 5. 等待几秒,观察效果
time.sleep(5)
# 6. (可选)关闭微信
# d.app_stop("com.tencent.mm")
print("脚本执行完毕!")

如何获取元素的 resourceId

这是一个非常关键的问题。uiautomator2 提供了一个强大的命令来帮你获取当前界面的所有 UI 元素信息。

  1. 在电脑上,连接你的设备。
  2. 打开你想要操作的 App 界面(比如微信的聊天列表)。
  3. 在电脑命令行中执行:
    python -m uiautomator2 dump
  4. 这会在当前目录生成一个 hierarchy.xml 文件,用浏览器打开这个文件,你就能看到当前界面上所有元素的树形结构,包括它们的 resourceId, text, className 等信息,方便你编写定位代码。

第三步:uiautomator2 的核心 API

uiautomator2 提供了非常丰富的 API 来操作设备。

设备控制

  • d.screen_on: 检查屏幕是否亮着。
  • d.wake_up: 唤醒屏幕。
  • d.press("home"): 按下 Home 键。
  • d.press("back"): 按下返回键。
  • d.press("recent"): 按下多任务键。
  • d.swipe(start_x, start_y, end_x, end_y, duration=0.5): 滑动屏幕。
  • d.orientation: 获取或设置屏幕方向 ("natural", "left", "right", "upsidedown")。

App 控制

  • d.app_start("com.example.app"): 启动 App。
  • d.app_stop("com.example.app"): 停止 App(不保留后台)。
  • d.app_clear("com.example.app"): 清除 App 数据。
  • d.current_app(): 获取当前正在运行的 App 信息。

元素定位与操作

这是最常用的部分,u2 提供了多种定位方式,推荐优先使用 resourceId

  • 单个元素

    • d(resourceId="com.tencent.mm:id/h9"): 通过 resourceId 定位。
    • d(text="微信"): 通过 text 定位。
    • d(description="搜索"): 通过 contentDescription 定位。
    • d(className="android.widget.Button"): 通过 className 定位。
    • d(index=0): 通过索引定位(第几个元素)。
  • 元素操作

    • .click(): 点击。
    • .long_click(): 长按。
    • .set_text("hello"): 输入文本(通常用于输入框)。
    • .get_text(): 获取元素的文本。
    • .exists(): 判断元素是否存在。
    • .info: 获取元素的详细信息(坐标、大小、属性等)。
  • 多个元素

    • d(textContains="搜索"): 定位 text 包含 "搜索" 的所有元素。
    • d(classNameMatches="android.widget.*Button"): 定位 className 匹配正则表达式的所有元素。
    • 遍历: for el in d(text="联系人"): el.click()

第四步:其他自动化方案

虽然 uiautomator2 是首选,但在某些特定场景下,你可能需要其他工具。

Airtest

  • 简介:网易出品的一个跨平台(Android & iOS)的自动化测试框架,它底层也使用了 uiautomator2,但提供了更友好的图形化界面和脚本录制功能。
  • 特点
    • 图形化界面:可以像玩游戏一样,在界面上点击、滑动来生成脚本,对新手非常友好。
    • 断言:内置了丰富的断言方法,方便进行 UI 测试。
    • 报告生成:可以一键生成包含截图、步骤和日志的 HTML 测试报告。
  • 适用场景:UI 自动化测试、快速原型验证。

ADB (Android Debug Bridge) 命令

  • 简介:这是 Android 官方提供的命令行工具,是所有自动化工具的底层基础。
  • 特点
    • 无需安装 App:直接与系统交互。
    • 功能强大:可以执行很多 uiautomator2 无法做到的操作,如安装/卸载 App、获取日志、屏幕录制等。
    • 无法操作 UI:ADB 本身不能直接点击或输入文本,它主要是用于系统级操作。
  • 适用场景:结合 uiautomator2 使用,用 uiautomator2 操作 UI,用 ADB 命令来安装测试包或获取系统日志。

Frida

  • 简介:一个动态代码注入工具,它可以在 App 运行时修改其代码,实现hook函数、调用方法等操作。
  • 特点
    • 深入应用内部:可以绕过一些基于 UI 的限制(如加密、签名验证)。
    • 性能影响小:比 Instrumentation 等方式更轻量。
    • 学习曲线陡峭:需要一定的 Java/Kotlin 和逆向工程知识。
  • 适用场景:应用安全分析、协议分析、深度自动化(处理非 UI 层的逻辑)。

总结与选择

工具 核心原理 优点 缺点 适用场景
uiautomator2 手机 Agent + HTTP 功能强大、API丰富、稳定、社区活跃 需要安装 Agent App UI自动化测试、数据爬取、通用自动化任务(首选)
Airtest 基于 uiautomator2 图形化界面、易上手、报告生成友好 灵活性不如直接写代码 UI自动化测试、快速脚本录制与生成
ADB 官方命令行 无需安装、系统级操作强大 无法操作 UI 元素 辅助工具(安装/卸载、日志、屏幕录制)
Frida 动态代码注入 功能最强大、可深入应用内部 学习成本高、技术门槛高 安全研究、逆向分析、破解自动化

给你的建议:

  • 如果你是初学者,或者想完成大多数自动化任务uiautomator2 开始,它是目前最平衡、最实用的选择。
  • 如果你是专业的 QA 工程师,需要编写大量 UI 测试用例:可以尝试 Airtest,它的图形化界面和报告功能能极大提升效率。
  • 如果你需要获取 App 内部数据或绕过某些限制:在掌握 uiautomator2 的基础上,可以学习 Frida 来实现更高级的目标。

希望这份详细的指南能帮助你顺利开启 Android Python 自动化的旅程!

分享:
扫描分享到社交APP
上一篇
下一篇