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

相关推荐
消失的旧时光-19434 分钟前
Android / IoT 面试复盘总结:从 MQTT、TLS 到 JWT 权限体系(标准答案 + 工程理解 + 延伸知识链)
android·物联网·面试
林多1 小时前
【Android】 GPU过度绘制实现原理
android·gpu·性能·实现原理·过度绘制·overdraw
薄荷椰果抹茶1 小时前
手机端Obsidian安装与同步全攻略
android
醇氧1 小时前
CentOS 7安装 mysql-8.0.27-1.el7.x86_64.rpm 安装包
android·mysql·centos
号码认证服务1 小时前
给用户打电话,怎么在对方手机显示为“XX证券”?号码认证办理步骤
android·运维·服务器·ios·智能手机·iphone·webview
Kapaseker2 小时前
我为什么让 Toast 多弹了一次
android·kotlin
老码观察2 小时前
K8s集群断电后MySQL恢复实录:从InnoDB崩溃到数据完整迁移
mysql·adb·kubernetes
L_Xian2 小时前
StarrySky重新维护了,摆烂了一段时间,想想还是搞搞吧。
android·github·音视频开发
赏金术士2 小时前
Kotlin Flow 完全指南
android·开发语言·kotlin
eric*16882 小时前
彻底解决 INSTALL_FAILED_TEST_ONLY 安装失败的问题
android·android studio·install_failed_·error code·ailed_test_only·test_only·install_failed