“Service Protocol”错误导致Flutter应用无法在真机测试问题问询
问题产生原因
- 旧版Android系统端口转发残留:API 23及更低版本的Android系统,ADB端口转发规则在Flutter调试进程异常退出时无法被自动清理,新旧转发规则冲突会导致服务协议连接失败。
- 三星定制ROM调试服务缺陷:三星S5官方Android 6.0系统对Flutter依赖的Dart VM调试服务长连接支持存在适配问题,应用退出后调试服务不会完全销毁,会占用固定端口导致新启动的应用无法绑定调试端口。
- 环境版本兼容问题:Android Studio 2020.3.1配套的ADB版本与MacOS Monterey的USB设备权限管理机制存在适配缺陷,USB连接复用场景下不会自动重置转发规则。
解决方案
临时快速修复(无需重启手机,10秒内完成)
- 首先停止Android Studio中所有运行中的Flutter进程,手动结束设备上的目标应用后台进程
- 执行端口转发清理命令:
adb forward --remove-all - 执行ADB服务重置命令:
adb kill-server && adb start-server - 重新拔插USB线,等待设备被Android Studio识别后再次运行应用即可。
次优修复(上述步骤无效时使用)
- 进入设备的设置-开发者选项,点击「撤销USB调试授权」,再关闭并重新开启USB调试开关
- 重新连接USB,在设备弹出的授权窗口中勾选「始终允许该计算机」,确认授权后再运行应用。
永久规避方案
- 将Android Studio升级到2022.1及以上版本,配套的ADB版本已修复与MacOS Monterey的USB权限适配问题
- 在Flutter运行配置的Additional arguments栏添加参数
--host-vmservice-port 5678,指定固定的调试端口避免随机端口冲突 - 不需要调试功能时,可添加
--release参数运行release包,不会触发调试服务连接逻辑,从根源避免该报错。
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

