如何在Android设备本地运行Python脚本控制应用?求替代ADB的Termux适配Python库
好问题!把Python脚本从PC端迁移到Android本地运行,确实能摆脱ADB的依赖,让设备自主完成操作。在Termux环境下,有两种主流方案可以替代ADB的核心功能,我给你详细拆解一下:
一、核心工具选择
你主要需要解决两个核心需求:捕获屏幕内容和模拟触摸输入,下面是对应的工具库和实现方式:
1. 屏幕内容获取
方案A:Termux API + 图像处理库
Termux官方提供了termux-api工具集,其中termux-screencap命令可以直接在本地截取屏幕并保存为图片文件。之后你可以用Python的PIL或OpenCV读取并分析像素。
需要注意:运行前要通过termux-setup-storage命令获取存储访问权限,这样截图可以保存到SD卡目录方便读取。
方案B:uiautomator2库
这是一个专门用于Android自动化的Python库,本地运行时无需ADB,直接通过设备内部的Agent服务通信。它可以直接返回PIL.Image格式的截图,省去了文件读写的步骤,非常适合后续的像素分析。
2. 模拟点击/滑动操作
方案A:Termux API的termux-touch命令
termux-touch支持模拟单点点击和滑动操作,通过命令行参数指定坐标即可。比如点击(x=500, y=500)只需执行termux-touch -x 500 -y 500。
方案B:uiautomator2的封装方法
uiautomator2直接提供了click()、swipe()等方法,参数直观,还支持设置滑动时长,比调用系统命令更简洁。
二、环境配置步骤
无论选哪种方案,都需要先搭建Termux的Python环境:
- 安装Termux后,先更新包列表:
pkg update && pkg upgrade - 安装必要工具:
pkg install python termux-api git - 获取存储权限:
termux-setup-storage(按提示允许权限) - 如果选择uiautomator2:
- 安装库:
pip install uiautomator2 pillow - 初始化Agent服务:
python -m uiautomator2 init(按提示开启无障碍权限)
- 安装库:
三、示例代码
示例1:用uiautomator2实现完整流程
import uiautomator2 as u2 import numpy as np import cv2 # 连接本地设备(无需ADB,自动识别) d = u2.connect() # 1. 获取屏幕截图并转成OpenCV格式(方便像素分析) screen_pil = d.screenshot() screen_cv = cv2.cvtColor(np.array(screen_pil), cv2.COLOR_RGB2BGR) # 2. 这里添加你的像素分析逻辑,比如检测某个坐标的颜色 target_color = screen_cv[200, 300] # 获取(300,200)坐标的BGR颜色 print(f"目标像素颜色: {target_color}") # 3. 根据分析结果执行操作 if target_color[0] < 50: # 假设蓝色分量小于50时点击 d.click(300, 200) # 或者执行滑动:从(100,500)滑到(900,500),持续0.5秒 d.swipe(100, 500, 900, 500, duration=0.5)
示例2:用Termux API实现完整流程
import subprocess from PIL import Image import numpy as np import cv2 # 1. 截取屏幕到SD卡 subprocess.run(["termux-screencap", "-p", "/sdcard/screen.png"], check=True) # 2. 读取截图并转成OpenCV格式 screen_pil = Image.open("/sdcard/screen.png") screen_cv = cv2.cvtColor(np.array(screen_pil), cv2.COLOR_RGB2BGR) # 3. 像素分析逻辑(和上面示例一致) target_color = screen_cv[200, 300] print(f"目标像素颜色: {target_color}") # 4. 执行点击操作 if target_color[0] < 50: subprocess.run(["termux-touch", "-x", "300", "-y", "200"], check=True) # 执行滑动操作 subprocess.run(["termux-touch", "-s", "100,500", "900,500"], check=True)
四、方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| uiautomator2 | API友好,无需文件读写,支持控件定位 | 需要安装Agent服务,依赖稍多 |
| Termux API | 轻量,无额外Python库依赖,命令直观 | 需要手动处理文件,代码稍繁琐 |
注意事项
- 两种方案都需要在系统设置中给Termux开启无障碍权限,否则无法模拟触摸操作。
- 如果安装
opencv-python时遇到编译问题,可以改用Termux官方包:pkg install opencv-python。
内容的提问来源于stack exchange,提问作者willer2k




