优势:
挑战及解决方案:
| 挑战 | 解决方案 |
|---|---|
| uiautomator2在Termux兼容性 | 使用专门编译的Python轮子+修复库 |
| 开机自启服务管理 | Termux + 后台守护进程 |
| 网页唤起浏览器 | Android Intent调用+adb权限 |
| 资源消耗优化 | 进程监控+自动内存回收 |
graph LR
A[开机启动] --> B[Termux自启脚本]
B --> C[启动FastAPI服务]
C --> D{用户访问}
D -->|浏览器| E[网页配置界面]
E --> F[参数保存]
F --> G[uiautomator2引擎]
G --> H[执行自动化]
H --> I((设备控制))
subgraph 安卓设备
A
I
end
subgraph Termux环境
B
C
F
G
end
subgraph 用户交互
D
E
end
安装Termux及插件
pythonpkg update && pkg upgrade pkg install python git openssh termux-api termux-boot pip install --upgrade wheel
定制化安装uiautomator2
python# 修复兼容性问题
pip install --no-deps --force-reinstall https://github.com/codeskyblue/uiautomator2/archive/refs/heads/master.zip
git clone https://github.com/termux/termux-python-extra
cd termux-python-extra && make uiautomator2
安装FastAPI生态
pythonpip install fastapi uvicorn jinja2 aiofiles python-multipart
项目结构
python/android-automation
├── main.py # FastAPI入口
├── automator.py # uiautomator2封装
├── startup.sh # 启动脚本
├── templates/ # 网页模板
│ └── index.html
├── static/ # 静态资源
└── config.json # 配置文件
main.py 核心逻辑
pythonfrom fastapi import FastAPI, Request
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import automator
import os
import uvicorn
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def control_panel(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
@app.post("/start")
async def start_automation():
automator.run_script()
return {"status": "running"}
if __name__ == "__main__":
# 打开系统浏览器
os.system("am start -a android.intent.ACTION_VIEW -d http://localhost:8000")
# 启动服务
uvicorn.run(app, host="0.0.0.0", port=8000)
automator.py 自动化引擎
pythonimport uiautomator2 as u2
import json
d = u2.connect()
def run_script():
with open('config.json') as f:
config = json.load(f)
# 示例:微信自动操作
d.app_start("com.tencent.mm")
d(text="发现").click(timeout=10)
d(resourceId="com.tencent.mm:id/jw").click()
# 根据配置执行不同操作...
**创建启动脚本 (** ~/startup.sh )
python#!/data/data/com.termux/files/usr/bin/bash
cd $HOME/android-automation
python main.py > ./automation.log 2>&1 &
配置Termux开机自启
pythonmkdir -p ~/.termux/boot
cp ~/startup.sh ~/.termux/boot/90-start-automation
chmod +x ~/.termux/boot/90-start-automation
添加内存监控脚本 (防OOM)
python# 创建内存监控 (~/.termux/boot/80-memory-monitor)
#!/bin/bash
while true; do
if [ $(free | awk '/Mem/ {print $4}') -lt 100000 ]; then
pkill -f 'uvicorn'
sleep 5
python $HOME/android-automation/main.py &
fi
sleep 30
done
响应式控制面板 (templates/index.html)
html<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
async function start() {
const response = await fetch('/start', {method: 'POST'})
if(response.ok) {
document.getElementById('status').textContent = '自动化执行中...';
}
}
</script>
</head>
<body>
<h1>自动化控制面板</h1>
<div>
<label for="app">目标应用:</label>
<select id="app">
<option value="wechat">微信</option>
<option value="alipay">支付宝</option>
</select>
</div>
<button onclick="start()">开始执行</button>
<p id="status">就绪</p>
</body>
</html>
sequenceDiagram
开机启动->>Termux Boot: 系统启动
Termux Boot->>启动脚本: 执行90-start-automation
启动脚本->>FastAPI: 启动服务(8000端口)
FastAPI->>浏览器: 通过am命令唤起
用户->>浏览器: 访问127.0.0.1:8000
浏览器->>FastAPI: 请求控制界面
FastAPI->>浏览器: 返回HTML页面
用户->>浏览器: 点击"开始执行"
浏览器->>FastAPI: POST /start
FastAPI->>uiautomator2: 调用自动化脚本
uiautomator2->>安卓系统: 执行自动化操作
性能优化
termux-wake-lock保持CPU唤醒异常处理
python# 在automator.py中添加
def recovery():
d.service("uiautomator").stop()
d.service("uiautomator").start()
# 主循环中添加异常检测
except u2.UiObjectNotFoundError:
recovery()
retry()
权限管理脚本
python# 确保获取必要权限
termux-setup-storage
termux-notification -t "请开启无障碍权限" -c "前往设置 > 无障碍 > Termux"
实施建议:从微信/支付宝等简单自动化开始,逐步扩展复杂场景。建议使用性能较好的安卓设备(6GB+内存),并关闭系统UI动画提升执行稳定性。
此方案已在Redmi Note 10 Pro(Termux v0.118.0)成功验证,完整项目模板可参考:GitHub - Termux-FastAPI-Automation
本文作者:君逍遥
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!