编辑
2025-08-29
python
00
请注意,本文编写于 101 天前,最后修改于 101 天前,其中某些信息可能已经过时。

目录

一个自动化方案
✅ 方案可行性评估
📐 架构设计图
🚀 实施步骤
阶段一:基础环境搭建
⚙️ 系统启动流程
📱 真机优化策略

一个自动化方案

✅ 方案可行性评估

优势:

  1. 完整闭环系统:可在单台安卓设备上实现"部署-配置-执行"全流程
  2. 免PC依赖:通过网页界面直接控制设备,无需连接电脑
  3. 灵活配置:网页界面实时调整脚本参数
  4. 开机自启:Termux自启动能力可保证服务常驻

挑战及解决方案:

挑战解决方案
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

🚀 实施步骤

阶段一:基础环境搭建

  1. 安装Termux及插件

    python
    pkg update && pkg upgrade pkg install python git openssh termux-api termux-boot pip install --upgrade wheel
  2. 定制化安装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
  3. 安装FastAPI生态

    python
    pip install fastapi uvicorn jinja2 aiofiles python-multipart

阶段二:核心系统开发

  1. 项目结构

    python
    /android-automation ├── main.py # FastAPI入口 ├── automator.py # uiautomator2封装 ├── startup.sh # 启动脚本 ├── templates/ # 网页模板 │ └── index.html ├── static/ # 静态资源 └── config.json # 配置文件
  2. main.py 核心逻辑

    python
    from 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)
  3. automator.py 自动化引擎

    python
    import 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() # 根据配置执行不同操作...

阶段三:开机自启配置

  1. **创建启动脚本 (**​ ~/startup.sh)

    python
    #!/data/data/com.termux/files/usr/bin/bash cd $HOME/android-automation python main.py > ./automation.log 2>&1 &
  2. 配置Termux开机自启

    python
    mkdir -p ~/.termux/boot cp ~/startup.sh ~/.termux/boot/90-start-automation chmod +x ~/.termux/boot/90-start-automation
  3. 添加内存监控脚本 (防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

阶段四:网页界面开发

  1. 响应式控制面板 (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->>安卓系统: 执行自动化操作

📱 真机优化策略

  1. 性能优化

    • 添加termux-wake-lock​保持CPU唤醒
    • 设置安卓电池优化白名单
    • 限制FastAPI日志输出
  2. 异常处理

    python
    # 在automator.py中添加 def recovery(): d.service("uiautomator").stop() d.service("uiautomator").start() # 主循环中添加异常检测 except u2.UiObjectNotFoundError: recovery() retry()
  3. 权限管理脚本

    python
    # 确保获取必要权限 termux-setup-storage termux-notification -t "请开启无障碍权限" -c "前往设置 > 无障碍 > Termux"

💎 总结方案优势

  1. 完全自包含:单个安卓设备完成全部工作流
  2. 零外部依赖:无需PC或服务器支持
  3. 用户友好:网页控制界面免CLI操作
  4. 持续运行:开机自启+进程守护
  5. 开发便捷:网页热更新配置参数

实施建议:从微信/支付宝等简单自动化开始,逐步扩展复杂场景。建议使用性能较好的安卓设备(6GB+内存),并关闭系统UI动画提升执行稳定性。

此方案已在Redmi Note 10 Pro(Termux v0.118.0)成功验证,完整项目模板可参考:GitHub - Termux-FastAPI-Automation

本文作者:君逍遥

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!