Shizuku 服务未启动 - Runner 执行命令时报通道连接失败
典型表现
Runner 打开后,主界面顶部的状态条不是绿色的"SHIZUKU 已运行 已授权",而是灰色的"SHIZUKU 未运行"。执行命令时弹出错误弹窗,类似:
- "Shizuku 服务连接失败"
- "Cannot connect to Shizuku API"
- "Binder connection closed"
根本原因
Runner 的命令执行能力完全依赖 Shizuku 主应用维护的 Binder 服务进程。服务进程没起来,Runner 就是个空壳——命令发给谁?
常见触发场景
场景一:手机刚重启
无线调试配对方式启动的 Shizuku,手机重启后不会自动启动服务。需要:
- 手动打开无线调试(部分系统会自动关)
- 打开 Shizuku 主应用
- 点击「启动」按钮
这是 Shizuku 生态最大的痛点——无线调试服务不会开机自启。解决办法见 02-setup-basics/03-service-startup-methods.md 的自动启动方案。
场景二:Shizuku 服务被系统杀掉
部分定制系统的后台限制过于激进,会自动杀掉 Shizuku 的后台服务进程:
- MIUI:把 Shizuku 主应用和 Runner 都加入「自启动名单」和「后台弹出界面白名单」
- ColorOS:应用设置 → 电池 → 不限制后台
- 鸿蒙:应用信息 → 耗电保护 → 允许后台活动
场景三:无线调试被自动关闭
Android 系统为了省电,会在以下情况自动关闭无线调试:
- 息屏超过一段时间
- 切换 Wi-Fi 网络
- 手机进入飞行模式
保持常亮是最简单的短期解决办法。长期方案是用 Tasker 监听无线调试状态,自动重新打开。
场景四:Shizuku 主应用被禁用/冻结
如果你把 Shizuku 主应用自己给冻了……那就先解冻:
pm enable moe.shizuku.privileged.api
快速恢复流程
- 打开 Shizuku 主应用——看它自己显示什么状态
- 如果 Shizuku 也显示"未启动" → 点启动按钮(无线调试方式)或检查 Magisk 模块(root 方式)
- 如果 Shizuku 显示"已启动"但 Runner 说"未运行" → 关闭 Runner 重开,或重启手机(Binder 连接有时需要重建)
- 如果 Shizuku 也启动失败 → 看 Shizuku 的错误码,按 08-troubleshooting/03-pairing-failure.md 排查
如何让它长期稳定在运行状态
方案一:Magisk 自动启动(需要 root)
如果你手机已 root 且装了 Magisk,Shizuku 主应用提供 Magisk 模块:
- 在 Shizuku 主应用里找 Magisk 模块入口
- 下载并刷入 Magisk 模块
- 重启手机——Shizuku 服务随开机自动启动,不需要手动开任何东西
这是目前最稳定的方案,没有之一。
方案二:Tasker 自动拉起(无线调试方式)
Trigger: Boot Completed + 延迟 15 秒
Action:
Activity → Shizuku 主应用的启动 Activity
(具体 Activity 名因版本不同而异,通常在 Shizuku 设置里能找到)
再加一个定时检查:
Trigger: 每 5 分钟
Action:
Activity → Shizuku 主应用
(让 Shizuku 前台跑一下,防止被后台杀掉)
方案三:忽略它(如果不太用)
如果你只是偶尔用 Runner,手机重启后手动去 Shizuku 主应用点一下启动——这个成本是可以接受的。
验证服务真的起来了
Shizuku 主应用和 Runner 两边都要看:
- Shizuku 主应用:绿色的"已启动"状态,显示当前权限等级(shell/root)
- Runner:执行任意一条简单命令(比如
echo test),成功返回且显示正确的 uid/gid - (可选)电脑上 adb 连一下,执行:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
如果脚本报"服务已启动"说明没问题;如果报"地址已被占用"也说明已启动。