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

相关推荐
HLC++15 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼18 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼19 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon20 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户693717500138421 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记21 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
吐了啊取名字太难21 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
阿pin1 天前
Android随笔-Retrofit
android·retrofit
想取一个与众不同的名字好难1 天前
安卓自定义颜色选择器
android
我命由我123451 天前
Android 开发问题:java.lang.NoSuchMethodError:No virtual method readAllBytes()
android·java·java-ee·kotlin·android studio·android-studio·android runtime