You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Android设备本地运行Python脚本控制应用?求替代ADB的Termux适配Python库

好问题!把Python脚本从PC端迁移到Android本地运行,确实能摆脱ADB的依赖,让设备自主完成操作。在Termux环境下,有两种主流方案可以替代ADB的核心功能,我给你详细拆解一下:

一、核心工具选择

你主要需要解决两个核心需求:捕获屏幕内容模拟触摸输入,下面是对应的工具库和实现方式:

1. 屏幕内容获取

方案A:Termux API + 图像处理库

Termux官方提供了termux-api工具集,其中termux-screencap命令可以直接在本地截取屏幕并保存为图片文件。之后你可以用Python的PILOpenCV读取并分析像素。

需要注意:运行前要通过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环境:

  1. 安装Termux后,先更新包列表:pkg update && pkg upgrade
  2. 安装必要工具:pkg install python termux-api git
  3. 获取存储权限:termux-setup-storage(按提示允许权限)
  4. 如果选择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)
四、方案对比
方案优点缺点
uiautomator2API友好,无需文件读写,支持控件定位需要安装Agent服务,依赖稍多
Termux API轻量,无额外Python库依赖,命令直观需要手动处理文件,代码稍繁琐
注意事项
  • 两种方案都需要在系统设置中给Termux开启无障碍权限,否则无法模拟触摸操作。
  • 如果安装opencv-python时遇到编译问题,可以改用Termux官方包:pkg install opencv-python

内容的提问来源于stack exchange,提问作者willer2k

火山引擎 最新活动