Android模拟器ADB异常断开一个容易忽视原因的记录

烦恼于Android模拟器ADB频繁断开问题

在Android Studio调试代码时,有一天突然出现模拟器无法正常使用的情况。

无论是运行还是调试过程,ADB都会频繁重启,查看端口链接似乎也会有多个ADB的建立,后期考虑是ADB多次重启,端口连接建立冲突导致。

具体表现就是模拟器刚连接上,就会马上断开。

bash 复制代码
Connected to the target VM, address: 'localhost:52749', transport: 'socket'
Disconnected from the target VM, address: 'localhost:52749', transport: 'socket'

可是我也没有任何的三方Android模拟器,应该是ADB自身的冲突吧?很奇怪的问题。

一些错误状态我都快会背了,只要一点按钮就会报错。

  • ADB处于正在启动/停止的状态
  • Pixel XX已经处于活动状态中,具体PID是5XXXX
  • Waiting for all devices to come online
  • ............

明明已经启动在我眼前了,你为什么要这样?确实像是ADB自己在和自己作对的状态。

期间尝试了很多方法,防火墙开关、切换ADB端口、使用三方模拟器、清理platform-tools、清理ADB的生成数据等。

在网络诸多搜索也没找到解决方案。经AI提醒,突然想起以往碰见过相同情况,意识到后切换,最终成功。

Android模拟器不同类别镜像使用场景区别

贴上目前正常的图,执行端口链接的扫描结果。之前有问题时,会有大量TIME_WAIT状态的链接,现在链接总数量也变少了。

具体出错原因就是,Android模拟器Play镜像使用时会有连接稳定性差的现象,并不适合开发流程时使用。

bash 复制代码
 netstat -ano | findstr :5037

  TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       10972
  TCP    127.0.0.1:5037         127.0.0.1:51919        ESTABLISHED     10972
  TCP    127.0.0.1:5037         127.0.0.1:51920        ESTABLISHED     10972
  TCP    127.0.0.1:5037         127.0.0.1:52629        ESTABLISHED     10972
  TCP    127.0.0.1:5037         127.0.0.1:52630        ESTABLISHED     10972
  TCP    127.0.0.1:5037         127.0.0.1:52738        ESTABLISHED     10972
  TCP    127.0.0.1:5037         127.0.0.1:52751        ESTABLISHED     10972
  TCP    127.0.0.1:51919        127.0.0.1:5037         ESTABLISHED     30696
  TCP    127.0.0.1:51920        127.0.0.1:5037         ESTABLISHED     30696
  TCP    127.0.0.1:52629        127.0.0.1:5037         ESTABLISHED     30696
  TCP    127.0.0.1:52630        127.0.0.1:5037         ESTABLISHED     30696
  TCP    127.0.0.1:52738        127.0.0.1:5037         ESTABLISHED     30696
  TCP    127.0.0.1:52751        127.0.0.1:5037         ESTABLISHED     30696

Google Play镜像和Google API镜像的差异导致的冲突

Google Play镜像,功能齐全,内部具有了除了Google地图和基础等登录API外,也有消费者功能,就是Google Play商店应用。此镜像可以最大程度模拟真机使用。但不可以获取ROOT。

Google API则只包含基础API和Google 地图。可以ROOT,功能少,主打稳定性。

这是官方对两种镜像的介绍,以前我基本是混用两者,或者主要使用Play镜像。

除了上述尝试方案外,甚至还重装了一遍Android Studio,结果IDE安装后默认启用的AVD仍然是Play镜像。

现在才意识到两者在开发场景不同有不同的用法。

不出问题的话,混用倒无所谓,出问题了就很难发现原因。

结论

于是,面对基础的开发调试 时,尽量选择Google API镜像,保证开发调试时的稳定性

必须使用Google Play功能 时,才选择Google Play镜像,保证业务功能的齐全

相关推荐
龙之叶几秒前
【Android Monkey源码解析四】- 异常捕获/页面控制
android·windows·adb·monkey
_F_y2 小时前
MySQL表的操作
android·数据库·mysql
yngsqq2 小时前
AndroidStudio汉化步骤
android
HyEISN3 小时前
Android 9 开启远程adb
android·adb
2501_944526423 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 抽牌游戏实现
android·开发语言·python·flutter·游戏
大大祥4 小时前
穿山甲广告sdk接入
android·kotlin·音视频·视频播放器·广告sdk
2501_944526424 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 笑话生成器实现
android·javascript·python·flutter·游戏
2501_944526425 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 21点游戏实现
android·javascript·flutter·游戏·harmonyos
Alex老夫子5 小时前
android room数据库增加字段注意事项
android·数据库
2501_915918415 小时前
iOS App 测试方法,Xcode、TestFlight与克魔(KeyMob)等工具组合使用
android·macos·ios·小程序·uni-app·iphone·xcode