【原创】让你部署在手机上的astrbot可以控制你的手机
zqyIMP
编辑于 2026年04月25日 17:26
AI自动化

一般部署在手机上的astrbot都是通过proot容器来模拟Linux,因此无法操作你的手机,本教程就是提供一种方案让你的聊天机器人也能操作手机,并且不需要你重新部署,用你已经部署了的加上我的方案便可,非常之方便。

-----------------开始教学----------------------

1. 核心架构

​本方案的核心在于打破 PRoot 容器与 Android 系统之间的壁垒:

  • Astrbot (LLM):负责理解用户意图,生成操作指令。

  • Bridge (Python):运行在 Termux 宿主环境,通过 HTTP 接口接收 AI 指令。这是本篇文章的核心,让处于proot容器环境中的ai能够操控手机。

  • ​Shizuku (rish):赋予 Bridge 调用系统级指令的权限,绕过 ADB 的数据线限制。

​2. 环境准备

​1.配置Shizuku:

  • 成功激活(root,有线,无线三种方式均可)

  • 激活后点击在终端中使用shizuku,选择导出文件,先随便导出到你能找到的位置,例如/storage/emulated/0/Download/

  • 修改导出的rish文件,定位到24行,将其中的PKG修改为com.termux,并授予执行权限

  • 随后打开termux,移动刚刚导出的两个文件

代码块
PlainText
自动换行
复制代码
 mv /storage/emulated/0/Download/rish ~/ 
复制成功
代码块
PlainText
自动换行
复制代码
mv /storage/emulated/0/Download/rish_shizuku.dex ~/
复制成功

2.Astrbot 部署:(已经在手机上部署的不需要重新部署)

  • astrbot社区已经有了安装包,自动化部署,可以去看看

代码块
PlainText
自动换行
复制代码
https://github.com/zz6zz666/AstrBot-Android-App
复制成功

3.* 核心*指令桥梁实现 (bridge.py)

这是连接 AI 与系统的关键。它负责接收 Astrbot 发出的请求,并原封不动地交给 rish 执行。

1.创建一个.py文件,例如bridge.py,复制粘贴以下内容

代码块
Python
自动换行
复制代码
import subprocess
import urllib.parse
from http.server import BaseHTTPRequestHandler, HTTPServer

# ================= 配置区 =================
RISH_PATH = "/data/data/com.termux/files/home/rish"
PORT = 8080
# ==========================================

class PureDataBridge(BaseHTTPRequestHandler):
    def log_message(self, format, *args): pass # 保持后台静默

    def do_GET(self):
        query_path = urllib.parse.urlparse(self.path)
        params = urllib.parse.parse_qs(query_path.query)
        
        if 'cmd' in params:
            command = params['cmd'][0]
            print(f"📡 指令中转: {command}")
            
            try:
                # 执行原生指令
                process = subprocess.run(
                    [RISH_PATH, "-c", command],
                    capture_output=True, text=True, encoding='utf-8', timeout=30
                )
                
                # 拼接标准输出和错误输出,不做任何多余处理
                response = process.stdout + process.stderr
                
                if not response:
                    response = "Done"

                self.send_response(200)
                self.send_header('Content-type', 'text/plain; charset=utf-8')
                self.end_headers()
                self.wfile.write(response.encode('utf-8'))
                
            except Exception as e:
                self.send_response(500)
                self.end_headers()
                self.wfile.write(str(e).encode('utf-8'))
        else:
            self.send_response(400)
            self.end_headers()

if __name__ == '__main__':
    server = HTTPServer(('127.0.0.1', PORT), PureDataBridge)
    print(f"🚀 【极简纯净桥梁】已就绪!监听 {PORT} 端口喵!")
    server.serve_forever()
复制成功

2.在termux运行转发程序

代码块
PlainText
自动换行
复制代码
python bridge.py
复制成功

3.测试是否成功

  • 新建一个会话,登录你的proot,例如:

代码块
PlainText
自动换行
复制代码
proot-distro login ubuntu
复制成功
  • 接下来可以执行几个命令来看看是否成功打通proot与termux

代码块
PlainText
自动换行
复制代码
curl -s "http://127.0.0.1:8080/?cmd=whoami" #若有root,adb之类的返回值则成功
复制成功
代码块
PlainText
自动换行
复制代码
curl -s "http://127.0.0.1:8080/?cmd=am%20start%20-n%20tv.danmaku.bili/.MainActivityV2" #若成功打开B站则成功
复制成功

4.给 AI 的操作指南

为了让 AI 明白如何调用这个接口,我们需要在 Astrbot 的角色设定中加入以下规范,或者直接发给ai:

代码块
PlainText
自动换行
复制代码
【AI 宿主操控协议 (Android Engine)】
​你现在直接通过 http://127.0.0.1:8080 接口控制一台 Android 设备。你发送的指令将通过 rish (Shizuku) 以 Root 或高权限 Shell 身份执行。
​1. 交互规范:
​请求格式: curl -s "http://127.0.0.1:8080/?cmd=[指令]"
​参数编码: 指令中的所有空格必须替换为 +,特殊字符需进行 URL 编码。
​2. 核心指令集:
​应用唤起 (Intent):
​启动 Bilibili 搜索:am start -a android.intent.action.VIEW -d "bilibili://search?keyword=[关键词]"
​强制启动应用:monkey -p [包名] -c android.intent.category.LAUNCHER 1
​输入与模拟:
​输入文本:input text [内容]
​模拟按键:input keyevent [键码] (4:返回, 3:Home, 26:电源, 66:回车)
​坐标点击:input tap [x] [y]
​信息查询:
​查看当前包名/活动:dumpsys window | grep mCurrentFocus
​列出已安装包:pm list packages
​3. 执行逻辑 (非常重要):
​等待机制: Android 系统在切换界面(如 am start)后,UI 渲染需要时间。必须在切换指令和点击指令之间加入等待。
​推荐做法: 使用 && sleep 1.5 && 组合指令。
​示例: am start -n tv.danmaku.bili/.MainActivityV2 && sleep 2 && input tap 500 150
​容错处理: 如果收到 "Error" 或空返回,请检查包名是否正确或设备是否亮
复制成功

5.成功让astrbot控制手机

接下来直接告诉ai读取人格设定学习一下怎么操作手机,或者直接把操作指南发给它,他就能操控你的手机了。比如你可以让他读取一下当前设备的电量,打开某个应用,在某个目录下创建指定文件并写入指定内容......

4.结语

  • rish可以让你在终端中获取shizuku授予的shell权限来控制设备,相关内容可阅读这里https://github.com/RikkaApps/Shizuku-API/tree/master/rish?night=1,但在手机上部署astrbot是通过proot来模拟linux环境,这是一个封闭的环境,因此无法直接控制设备,本方案就是打通这两个环境。

  • 原理是虽然在 PRoot 容器里,但网络是通的。

  • 方法就是在termux中运行一个路由转发程序,然后在proot环境中向这个程序发送网络请求,其中就包含了可以控制设备的rish命令,转发程序代替执行命令并返回结果,从而控制设备。

  • 此方法是无意间和ai探讨出来的,应该也算原创吧 ̄ω ̄=,主要给大家提供一种思路。

  • 理论上ai可以通过命令获取屏幕信息并模拟点击,但它会不会去主动获取以及会不会用都不好说,因此此方法也就图一乐

博客教程链接:

代码块
PlainText
自动换行
复制代码
https://zqyimp.dpdns.org/post/%E5%8E%9F%E5%88%9B%E8%AE%A9ai%E7%9C%9F%E6%AD%A3%E6%8E%A5%E7%AE%A1%E6%89%8B%E6%9C%BA%E5%9F%BA%E4%BA%8E-termuxastrbot-shizuku-%E7%9A%84-android-%E7%89%A9%E7%90%86%E6%93%8D%E6%8E%A7
复制成功