客户端开发

小米真机屏幕镜像点击断连:从错误日志到系统设置的排查记录

Android Studio 开启小米设备屏幕镜像后点击画面即断连(ScreenSharingAgent exit code 134),记录在多台机型及 HyperOS 3/4 上通用的省电策略解决方法。

约 5 分钟读完
目录
  1. 1. 从 idea.log 确认异常退出的进程
  2. 2. 被调试应用的「省电策略」影响
  3. 3. 顺带记录的几处系统行为差异

使用 Android Studio 连接小米真机调试 Flutter 应用时,遇到过一个屏幕镜像断连问题:在 IDE 右侧打开内置的 Running Devices 实时画面后,仅查看画面时传输一直正常;一旦用鼠标在电脑端的镜像窗口里点击应用内的按钮或任意交互区域,镜像画面就会立刻中断消失,而手机上的 Flutter 应用本身并没有闪退,依然停留在当前页面。

这个问题并非某一台旧机型或单一 Android 版本的孤例,在手头的其他小米手机以及升级到较新的 HyperOS 3、HyperOS 4 系统版本后,默认设置下依然存在同样的现象。

1. 从 idea.log 确认异常退出的进程

既然手机上的被调试应用没有退出,说明问题不在业务 Dart 代码中。打开 Android Studio 的日志目录查看 idea.log(Help → Show Log in Explorer),每次点击镜像画面导致断连的同一秒,都会成对出现下面两条警告(已隐去具体设备型号):

WARN - ScreenSharingAgent Xiaomi <model> API 34 - Aborted
WARN - ScreenSharingAgent Xiaomi <model> API 34 - terminated with code 134

这两行日志可以把故障对象确定下来:

  1. 异常退出的是投屏代理而非被调试应用:ScreenSharingAgent 是 Android Studio 开启真机镜像时通过 ADB 推送到设备端临时运行的原生守护程序,负责抓取屏幕帧并把电脑端的鼠标点击、滑动转换成设备输入事件注入系统。
  2. 退出码 134 对应 SIGABRT(128 + 6):仅查看画面时保持正常、点击后立即触发 Aborted,说明中止发生在代理进程尝试向目标窗口注入输入事件或维持交互通道的阶段。

最初只看到 IDE 自带的代理进程触发 SIGABRT,曾误以为是 Android Studio 的 ScreenSharingAgent 与系统底层接口不兼容,当时只能临时在电脑端查看画面、在手机屏幕上手工点击操作。

2. 被调试应用的「省电策略」影响

后续排查系统设置后确认,这个问题不需要等待 IDE 更新,项目代码也不用改动,原因出在系统默认对被调试应用施加的省电管控上。

具体调整路径与操作对象如下:

  1. 打开手机 设置 → 应用设置(或应用管理),搜索并点进当前正在调试的那个 Flutter 应用(注意调整对象是目标调试 App,不需要去找系统组件);
  2. 点进 省电策略(电量消耗 / 后台策略),将默认的「智能限制」改为 「无限制」;
  3. 重新在 Android Studio 的 Running Devices 中连接镜像并点击页面按钮、滚动列表测试。

改为「无限制」之后,ScreenSharingAgent 退出码 134 的警告不再出现,电脑端点击、滑动镜像窗口保持稳定,点击断连现象不再出现;切回默认省电限制后问题又会重现。在多台小米机型以及 HyperOS 3、HyperOS 4 上按同样方式修改后均能恢复正常。

3. 顺带记录的几处系统行为差异

日常在小米 / HyperOS 真机上调试 Android 原生或 Flutter 项目时,除了每次装新包记得看一眼应用详情里的「省电策略」外,还实际碰到过另外几处与原生 Android 表现不一致的地方,一并留作真机验收备忘:

  • 预见式返回(Predictive Back)与系统媒体选择器动画:在应用已按规范开启相关配置的前提下,预见式返回手势预览仍未生效,调用系统 Photo Picker 时的底部上滑过渡动画也会缺失,且这两项即便去开发者选项里关闭「启用系统优化」也依然无法恢复;
  • 自适应/透明启动图标底色:默认状态下透明背景图标会被系统自动套上一层白底,这一项在关闭「系统优化」后会恢复原生透明显示(不过关闭系统优化本身会重置手机上不少应用的权限状态,日常并不建议常关)。

做跨端或原生界面开发时,手头备一台接近原生行为的设备或模拟器用来确认基准效果,再把定制较深的国产 ROM 当作专门的兼容性回归环境逐项核对,排查这类非代码层面的问题会省心很多。