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镜像,保证业务功能的齐全

相关推荐
冬奇Lab2 小时前
稳定性性能系列之五——Native Crash深度分析:工具实战
android·性能优化·debug
峥嵘life2 小时前
深耕Android技术——2025年CSDN博客之星总评选深度总结
android
无言Echo2 小时前
App 深色模式切换流程简述(api32)及相关bug
android
GoldenPlayer2 小时前
Android网络请求报错(直接请求http)
android
花卷HJ2 小时前
Android 多媒体文件工具类封装(MediaFileUtils)
android·java
csj502 小时前
安卓基础之《(11)—数据存储(1)共享参数SharedPreferences》
android
走在路上的菜鸟2 小时前
Android学Dart学习笔记第二十七节 异步编程
android·笔记·学习·flutter
哆啦安全2 小时前
Android智能调试分析工具V7.5
android
モンキー・D・小菜鸡儿2 小时前
Android 自定义粒子连线动画视图实现:打造炫酷背景效果
android·java