2875 字
14 分钟
荣耀 Magic3 拔线后 Shizuku 掉线?切换 ADB TCP 模式的解决实录

我的荣耀 Magic3 遇到了一个问题:通过电脑启动 Shizuku 后,连接 USB 时显示运行正常,一拔线,首页就变成“未运行”。最后在这台手机上有效的办法是:先把 ADB 切到 TCP 5555 模式,再重新启动 Shizuku。 拔线后服务继续运行,接回电脑检查,Shizuku 和 ADB 服务的进程编号也都没有变化。

这篇记录的是一次具体设备上的实测。它解决了本次拔线掉线问题;手机重启后的恢复、长时间锁屏,以及其他荣耀机型是否有效,需要分别验证。操作会开启手机的网络 ADB 调试端口,使用前请看后面的安全说明。

一、实测设备与问题表现#

项目本次环境
手机荣耀 Magic3,ELZ-AN00,骁龙 888
系统MagicOS 8.0,Android 14
系统版本8.0.0.221(CHNC00E211R4P7)
Shizuku13.6.0.r1086.2650830c,官方版本
权限状态未 root,通过 ADB 启动,服务运行于 shell 权限
电脑工具Windows PowerShell、Google Android SDK Platform-Tools
实测日期2026 年 10 月 10 日

原来的现象可以稳定复现:连接电脑启动成功,拔掉 USB,Shizuku 变成未运行;重新接线后,电脑上也查不到原来的 shizuku_server 进程。

这次没有通过 root、冻结系统服务或者循环重启脚本来解决。手机上另有 Dhizuku,但本次有效步骤使用的是 ADB,未调用 Dhizuku 的所有者权限。

二、先检查常规设置#

如果只是偶尔停止,建议先排查后台限制、USB 调试是否被关掉,以及 USB 模式切换。Shizuku 官方手册也列出了允许后台运行、保留开发者选项和 USB 调试、使用仅充电模式等建议。华为 EMUI 的建议还包括允许仅充电模式下的 ADB 调试;荣耀是否有同名选项,以实际系统界面为准。Shizuku 官方手册

我这台手机已经加入了电池优化白名单,USB 调试和开发者选项也处于开启状态。尝试通过 svc usb 命令切换 USB 模式时,命令没有报错,但实际 USB 配置没有改变,因此不能把这一步记作“成功改成仅充电”。

如果你的手机通过上述设置就能解决问题,可以继续使用原来的启动方式。

三、为什么没有只给启动命令加 nohup#

为了区分“首页显示异常”和“服务真的退出”,排查时另外运行了一个有限时长的记录脚本。它使用 setsid 和 nohup 脱离终端,每秒记录一次 Shizuku 进程与 ADB 状态。

原模式下拔线后,Shizuku 进程消失,这个已经脱离终端的记录脚本也同时终止。重新接线后,ADB 服务的进程编号发生了变化。

这些现象让我怀疑问题与 USB 断开时的 ADB 服务处理有关,而不只是 Shizuku 管理界面被后台清理。这属于根据现象作出的推断,没有定位到荣耀系统内部具体哪一段代码。

另外,Shizuku 13.6 的启动器本身已经使用了 fork()、setsid(),并把标准输入输出转向 /dev/null。所以,单纯再包一层 nohup,不能保证它绕过系统对相关进程的清理。Shizuku 13.6 启动器源码

四、有效操作:切换 TCP 模式,再启动 Shizuku#

下面以 Windows PowerShell 为例。请使用 Google 官方 Platform-Tools,在解压后的 platform-tools 文件夹里打开 PowerShell。

1. 确认 USB 连接和授权#

手机打开 USB 调试,接上电脑,接受自己电脑的调试授权,然后执行:

Terminal window
.\adb.exe devices -l

列表中应出现目标手机,并显示 device。如果是 unauthorized,先处理手机上的授权提示;如果是 offline,先恢复正常连接。

为了避免多台设备时操作错手机,把列表第一列的设备序列号填到下面变量里。这里只填自己的设备编号,不需要把编号公开发帖:

Terminal window
$phoneSerial = '这里替换成自己的设备序列号'
.\adb.exe -s $phoneSerial shell getprop ro.product.model
.\adb.exe -s $phoneSerial shell getprop ro.adb.secure

确认型号正确,并且 ro.adb.secure 返回 1。如果不是 1,不要继续照这个方法开启网络调试。本次实测设备返回的是 1。

2. 记录原来的 TCP 设置#

Terminal window
.\adb.exe -s $phoneSerial shell getprop service.adb.tcp.port
.\adb.exe -s $phoneSerial shell getprop persist.adb.tcp.port

本次操作前,这两项均为空。如果你的手机原本已有网络调试配置,请先记录自己的原值,后面的“恢复 USB 模式”不等于恢复任意自定义配置。

3. 切换到 TCP 5555 模式#

保持 USB 连接,执行:

Terminal window
.\adb.exe -s $phoneSerial tcpip 5555

正常情况下会显示:

restarting in TCP mode port: 5555

等待几秒,再检查:

Terminal window
Start-Sleep -Seconds 3
.\adb.exe devices -l
.\adb.exe -s $phoneSerial shell getprop service.adb.tcp.port

最后一条应返回 5555。切换时 ADB 服务会重启,原有 Shizuku 可能随之退出,所以要在切换完成后重新启动它。本次手机的 USB ADB 连接随后恢复正常,后续仍然通过 USB 执行启动命令。

如果连接没有回来,先重新插线并检查授权;不要在设备还处于 offline 时继续粘贴后面的命令。如果你的机型在 TCP 模式下不能恢复 USB 连接,也不能照本次操作直接往下做,需要另行排查。

adb tcpip 5555 是传统的 ADB TCP 模式,不等同于 Android 11 及以上开发者选项中的无线调试配对功能。本次没有执行 adb pair,也没有通过 Wi-Fi 连接手机启动服务。Android 官方 ADB 文档

4. 重新启动 Shizuku#

优先使用 Shizuku 当前版本界面提供的电脑启动命令,选择“通过连接电脑启动”后查看或复制。使用多设备参数时,在命令里的 adb 后加上 -s 和目标序列号;在这里的 PowerShell 窗口中,把 adb 写成 .\adb.exe。

注意版本差异:13.6 的发布说明明确提到更新了启动命令。我这次使用的是安装目录里的 libshizuku.so 启动器,不能假定旧教程中的 start.sh 在每个版本都存在。Shizuku 13.6 发布说明

如果你同样使用官方 Shizuku 13.6、ARM64 手机,可以用下面这段 PowerShell 根据当前安装路径找到启动器。本次 Magic3 使用的就是这一类启动路径;应用更新后目录可能改变,所以不要永久保存某次安装目录的随机字符串。

Terminal window
$apkOutput = @(.\adb.exe -s $phoneSerial shell pm path moe.shizuku.privileged.api)
if ($LASTEXITCODE -ne 0) { throw '无法查询 Shizuku 安装路径' }
$baseApks = @($apkOutput | Where-Object {
$_ -match '^package:/data/app/[A-Za-z0-9/._~+=-]+/base\.apk$'
})
if ($baseApks.Count -ne 1) { throw '未找到唯一的 Shizuku base.apk,请使用应用提供的命令' }
$apkPath = $baseApks[0].Substring('package:'.Length)
$starterPath = $apkPath.Substring(0, $apkPath.Length - '/base.apk'.Length) + '/lib/arm64/libshizuku.so'
.\adb.exe -s $phoneSerial shell ls -l $starterPath
if ($LASTEXITCODE -ne 0) { throw '未找到 ARM64 启动器,请使用应用提供的命令' }
.\adb.exe -s $phoneSerial shell $starterPath
if ($LASTEXITCODE -ne 0) { throw 'Shizuku 启动失败,请检查输出' }

打开 Shizuku,确认首页显示正在运行。如果目录不存在、系统拒绝执行或者启动失败,先按当前版本官方说明排查,不要为了运行这段代码修改系统目录权限。

五、怎么验证它真的没有掉#

拔线之前,记录服务进程编号:

Terminal window
.\adb.exe -s $phoneSerial shell pidof shizuku_server
.\adb.exe -s $phoneSerial shell pidof adbd

保持 Shizuku 页面打开,拔掉 USB,等待约 20 秒,看首页是否仍显示正在运行。然后重新接回电脑,不要手动停止或启动 Shizuku,再执行上面两条命令。

本次结果:

检查项目拔线前接回后
Shizuku 首页正在运行拔线期间仍显示正在运行
shizuku_server PID2174621746
adbd PID2171321713
service.adb.tcp.port55555555

另一个有限时长记录脚本也在拔线期间持续记录,约 96 秒的记录窗口内,Shizuku 的 PID 一直是 21746。相比只看首页文字,这些结果进一步支持服务没有中断,也没有在接线后偷偷重新启动。

本次验证覆盖了拔线与接回过程,未进行数小时锁屏、长期待机或重启后的存活测试。 也没有验证换网络、关闭 Wi-Fi 等其他场景。遇到这些情况,请分别测试,不能直接从本次结果推导。

六、手机重启后怎么办#

本次没有设置开机脚本,也没有修改持久化 TCP 属性。按照这个方案使用时,手机重启后应重新连接电脑,检查设备和授权状态,执行 tcpip 5555,再启动 Shizuku。

Shizuku 13.6 另有 Android 13 及以上、连接受信任 WLAN 时免 root 自动启动的功能,但本次没有配置或验证,不能把它算作这套方案的效果。Shizuku 13.6 发布说明

这里获得的是 ADB 的 shell 权限,没有给手机 root,也没有让 Shizuku 获得跨重启永久运行能力。

七、网络调试端口与撤销方法#

这个方法的代价是开启 TCP 5555 上的网络 ADB。Android 14 的 ADB 实现会根据 TCP 端口配置建立网络监听;因此不要把它理解成“只有手机本机能连接”的模式。AOSP Android 14 ADB 实现

本次设备的 ro.adb.secure=1,保留了 ADB 认证。对于自己信任、已获授权的电脑,仍应妥善管理调试授权;认证存在也不代表开启调试端口就完全没有风险。

  • 尽量在可信网络上使用,不要把 5555 端口映射到公网。
  • 不要授权陌生电脑;只有自己的可信电脑才考虑勾选长期授权。
  • 不需要网络调试时,可以恢复 USB 模式。

本次原来没有自定义 TCP 设置。要撤销这次模式切换,接回 USB,确认连接正常后执行:

Terminal window
.\adb.exe -s $phoneSerial usb
Start-Sleep -Seconds 3
.\adb.exe devices -l
.\adb.exe -s $phoneSerial shell getprop service.adb.tcp.port

正常会显示正在重启到 USB 模式。随后 TCP 端口属性应不再是 5555,常见值为 0。如果仍是 5555,撤销没有按预期完成,需要继续检查。

恢复 USB 模式会重启 ADB 服务,Shizuku 也可能退出。需要继续使用时,可以按原来的电脑方式重新启动,但本机原先“拔线就掉”的现象可能再次出现。

本次实际测试的是切换到 TCP 模式并验证拔线存活;上述恢复命令是 ADB 提供的标准撤销方式,尚未在本次成功配置上执行撤销测试。

八、遇到失败时先看这几项#

现象检查方向
找不到 adb在 Platform-Tools 目录操作,PowerShell 使用 .\adb.exe
提示多台设备使用 -s 指定目标设备,确认序列号填对
显示 unauthorized解锁手机,处理自己电脑的 USB 调试授权
切换后设备消失或 offline等待几秒、重新插线、检查授权,不要跳过连接检查
找不到 start.sh 或 libshizuku.so使用当前版本应用提供的命令,重新查询安装路径
TCP 属性已是 5555,拔线仍停止该方法未解决你的设备问题,恢复原模式再排查后台或系统限制
服务进程还在,但首页显示未运行需要进一步排查管理界面与服务通信,不能直接当作同一个掉线问题
荣耀 Magic3 拔线后 Shizuku 掉线?切换 ADB TCP 模式的解决实录
https://blog.heyunxi.top/posts/荣耀magic3拔线后shizuku掉线的解决实录/
作者
Yunxi
发布于
2026-10-10
许可协议
CC BY-NC-SA 4.0