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

相关推荐
BoomHe2 小时前
Android Framework 文件应用移植到 AndroidStudio
android
传奇开心果编程4 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
>Andre<4 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
事圆则缓5 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
mmsx5 小时前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
Godikov6 小时前
Android 工业终端保活实战:前台服务 + 开机自启 + 更新自启的三重保障
android
字节暗面6 小时前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
终端安全笔记8 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
文人sec8 小时前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
字节暗面8 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固