ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Android Studio 卡在 Loading Devices?从 ADB 到模拟器真机连接排查指南

Android Studio 卡在 Loading Devices?从 ADB 到模拟器真机连接排查指南 1. “Loading Devices”到底是什么在卡住你先把这个东西讲清楚。Android Studio 右上角或底部 Device Selector 下拉框里显示“Loading Devices”字面意思就一句话IDE 正在向 ADBAndroid Debug Bridge安卓调试桥查询当前连接的设备列表。这一查卡住后面所有事情都没法干——不能选设备、不能跑应用、不能看日志整个开发流程直接冻结。你可能会想我明明插了手机或者模拟器已经启动为什么 Android Studio 还是转圈圈这个问题的本质是Android Studio 的图形界面在轮询 adb 服务而 adb 服务与设备之间的握手没有及时完成。更直白地说就是 IDE 在等一个永远没有按时到达的答复。触发这个状态的原因很多但最常见的几类集中在ADB 服务本身出了问题比如进程僵死、端口被占用、版本不匹配设备端拒绝握手USB 调试没开、授权弹窗被忽略、驱动没装好模拟器实际上没有启动成功或者系统镜像缺失导致启动中途退出Android Studio 内部索引、缓存或者 Gradle 同步卡住造成“Loading Devices”是假象无线调试场景下网络层不通或者端口没开。这两年我见过太多人一遇到“Loading Devices”就当场开始重装 Android Studio这是最亏的做法。其实这个问题绝大多数情况下不用动 IDE几行命令就能定位。下面我会把排查路径按从简单到复杂的顺序拆开每一步都给你能直接照着敲的命令和判断依据按顺序走一遍90% 的情况能解决。2. 第一板斧三分钟快速排查基础链路2.1 重启 ADB 服务先解决服务僵死我处理这类问题的习惯是先不碰 Android Studio打开终端直接重启 ADB。这一招能解决至少三成的问题。Windows 用户在终端里执行adb kill-server adb start-servermacOS / Linux 用户同理。执行完start-server后终端会提示* daemon started successfully这时再执行adb devices观察输出。如果出现设备说明 ADB 链路已经恢复回到 Android Studio 点一下刷新或者直接重新选择设备下拉框“Loading Devices”大概率就消失了。为什么重启 ADB 有效因为 adb 服务是一个常驻后台进程负责和所有连接的设备通信。这个进程虽然还算稳定但遇到 USB 热插拔过于频繁、手机进入休眠后断开异常、电脑休眠唤醒后设备枚举错乱等情况服务端可能进入一个“假死”状态——你查adb devices半天没响应那 Android Studio 的 Loading Devices 自然一直转。杀掉重启后重新建立设备枚举问题就解决了。还有一类情况Windows 上 5037 端口被其他进程占用。如果你的adb start-server提示cannot bind tcp:5037或者类似错误说明有别的程序抢占了 ADB 的默认端口。可以用下面的命令查占用netstat -ano | findstr 5037拿到 PID 之后在任务管理器里找到对应进程看是不是另一个残留的 adb 或者端口代理工具确认后结束进程再重启 ADB。这个场景常见于电脑上同时装了多个版本的开发工具或者某些手机助手。2.2 检查 adb devices 输出区分设备状态adb devices输出的每一行都对应一台设备后面跟着状态标记。常见状态有device正常连接已授权unauthorized设备已连接但手机端未授权调试offline设备在线但通信异常或者驱动问题no permissionsLinux/macOS 常见当前用户没有权限访问 USB 设备节点。如果是unauthorized最简单粗暴的方法是拔掉数据线重插同时盯紧手机屏幕。Android 系统弹出“允许 USB 调试吗”的对话框时一定要勾选“始终允许使用这台计算机进行调试”然后点击允许。有时候这个弹窗会被其他窗口挡住下拉通知栏就能看到。如果重插后还是unauthorized可以去手机的开发者选项里执行“撤销 USB 调试授权”再重新插线触发授权弹窗。注意撤销授权会清空所有电脑的授权记录下一次连接任何一台电脑都要重新确认。如果是no permissions说明 Linux 下缺少 udev 规则。你需要创建一个规则文件比如/etc/udev/rules.d/51-android.rules把厂商 ID 加进去。厂商 ID 可以用lsusb查到。写好后执行sudo udevadm control --reload-rules sudo udevadm trigger再拔插 USB。不过说实话对 Windows 用户来说no permissions基本不会出现Windows 上更常见的是设备管理器里直接看到“ADB Interface”带感叹号或者压根识别不到。这种情况看下一节的驱动排查。2.3 检查 Android Studio 的设备列表刷新机制在 Android Studio 里每次打开 Run 配置的下拉列表或者 Device Explorer 时IDE 会通过内部的 ADB 桥接模块去调用adb devices。也就是说如果命令行下adb devices能看到设备但界面还在转圈问题就可能出在 IDE 与 adb 的通信上。这种情况可以尝试在 Android Studio 里打开Tools → Device Explorer或者View → Tool Windows → Device Explorer看能不能正常展开文件目录。如果 Device Explorer 能打开但设备列表一直转先把“设备下拉框”关掉再重新打开或者直接重启 Android Studio。IDE 的 UI 刷新偶尔会卡在某个状态这不算罕见。另外Android Studio 底部的 Event Log 往往会有线索。如果 Event Log 里报了类似adb: failed to read from...或者与 adb 版本有关的错误基本就是 ADB 本身有问题了。不要只看那个一直转圈的 Loading Devices把日志窗口打开它比圈圈诚实多了。3. 模拟器场景AVD 起不来Loading Devices 永远不停3.1 模拟器启动失败的常见原因如果你是在开发时依赖 Android 模拟器 AVD那么“Loading Devices”卡住极有可能是模拟器没有真正跑到可被 ADB 识别的状态。最常见的情况是点击运行按钮后 Android Studio 同步启动了模拟器但模拟器启动过程特别慢或者中途直接失败。这时候你去看 Emulator 窗口要么是黑屏要么是窗口一闪而过要么弹了个报错框。AVD 没起来ADB 自然找不到设备Android Studio 的 Loading Devices 就会一直转。模拟器启动失败的原因按出现频率排一下系统镜像System Image没有正确下载或者下载不完整当前电脑的虚拟化支持没开x86_64 架构的镜像无法运行显卡渲染初始化失败OpenGL 模式不兼容模拟器进程上次异常退出留下了锁文件或者快照损坏运行内存不够模拟器启动到一半被系统杀掉。这几种情况对应的解决方式完全不同。我的建议是不要从 Android Studio 里启动模拟器来排查问题而是直接用命令行启动这样能看到全部启动日志。3.2 用命令行启动 AVD日志才是最好的老师先列出你已有的虚拟设备emulator -list-avds如果列表为空说明 AVD 本身就没有创建成功。打开 Android Studio 的 SDK Manager在 SDK Tools 页面确认 Emulator 和对应 Android 版本的 System Image 都已安装。注意System Image 一定选择 x86_64 版本除非你的电脑是 ARM 架构否则别装 arm64 的镜像在 Intel/AMD 机器上基本跑不了。如果 AVD 列表不为空直接指定名称启动emulator -avd 你的AVD名称 -no-snapshot -gpu swiftshader_indirect-no-snapshot参数跳过快照加载解决快照损坏导致的启动卡死-gpu swiftshader_indirect用软件渲染解决显卡兼容问题。启动后观察终端输出如果出现Cannot find AVD system path之类的错误说明系统镜像路径不对需要重新安装或修复 SDK如果出现x86_64 emulation currently requires hardware acceleration说明虚拟化没开如果出现HVF is not installed或HAXM is not installed说明加速驱动缺失。看到具体的错误信息之后搜索引擎一搜就有答案。但如果你从 Android Studio 里启动这些日志被吞在 IDE 后台排查效率会低非常多。3.3 硬件加速与虚拟化一个很容易踩的坑x86_64 架构的模拟器镜像离不开硬件加速。Intel 平台的电脑在 Windows 上可以用 In tel HAXM已经停止更新或者 Windows Hypervisor PlatformAMD 平台通常走 Windows Hypervisor Platform或者用 Android Emulator Hypervisor DriverAEHD。macOS 上用 Hypervisor.Framework一般不用额外装东西。最简单的验证方式是用 Android Studio 自带的加速检查工具emulator -accel-check输出accel is installed and usable就说明没问题。如果提示不行第一件事去 BIOS/UEFI 里确认 VT-xIntel或 AMD-V 已经开启。很多电脑出厂默认关着虚拟化特别是某些台式机主板和部分笔记本你在系统里装什么都没用必须进 BIOS。如果你用的是 Android Studio 3.x 以后的老版本打开 AVD 时会提示安装 HAXM。从 Android Studio 11 之后官方转向了 AEHD新的系统镜像对 AEHD 的适配更统一。建议直接把 Android SDK 里的 Emulator 和 Platform-Tools 升级到最新版同时把虚拟化相关的 Windows 功能打开控制面板 → 启用或关闭 Windows 功能 → 勾选 Windows Hypervisor Platform重启一次电脑基本就通了。模拟器冷启动慢也是一个容易被误判成“Loading Devices”的情况。特别是第一次启动新创建的 AVD需要初始化用户数据和 dex 优化吃满 CPU 要跑好几分钟。这个阶段adb devices可能已经能看到emulator-5554但状态是offline需要等它变成device。如果你性子急看着 Android Studio 转圈就以为出问题那必然会误杀。其实只要模拟器窗口在动静下心来等它就对了。4. 真机场景数据线、驱动、授权一个都不能缺4.1 USB 调试开关和传输模式真机调试的“Loading Devices”问题一半出在开发者选项没配置对。首先进入“设置 → 关于手机”找到版本号连续点击七次开启开发者模式。然后进入开发者选项打开“USB 调试”。这里有个细节部分国产手机默认把“USB 调试”和“USB 安装”分开光开 USB 调试还不够。最好把“USB 安装通过 USB 安装应用”“USB 调试安全设置”这类权限也一并打开。注意不同品牌的入口名称不一样。插上数据线后手机下拉通知栏会有一个“当前 USB 配置”或者“USB 用途”的通知点开后把传输模式从“仅充电”改成“传输文件”MTP。这一点很关键很多人在“仅充电”模式下插线Windows 那边设备管理器能看到一个未知设备但adb devices输出空列表因为 ADB 在 Android 11 之前的版本上默认不走“仅充电”模式通信。改到传输模式后再执行一次adb devices通常就出现了。4.2 Windows 驱动问题设备管理器会告诉你真相Windows 系统对 Android 手机驱动的兼容性参差不齐。手机插上电脑后打开设备管理器如果出现带黄色感叹号的“Android Composite ADB Interface”直接显示“未知设备”或者根本没有新设备出现那就说明驱动没装好。优先去手机厂商官网下载对应的 USB 驱动。推荐通用性更强的 Universal Adb Driver谷歌可以搜到它覆盖了绝大多数厂商的设备安装后插上手机大概率能被正确识别。这里有一个操作顺序上的小坑一定要先装驱动再插入手机。如果插入了识别不对先卸载设备再重新插。Windows 对第一次识别的设备会缓存驱动信息顺序错了容易越搞越乱。除驱动外还需要注意数据线的质量问题。市面上很多便宜的数据线只有充电能力没有数据通路。外观上长得一模一样插上也能充电但系统根本枚举不到端口。遇到手机在别的电脑上能识别、自己的电脑上死活不行的情况第一件事先换一根原装或品牌线再试。电脑的前置 USB 面板因为供电不稳也可能导致识别失败优先用主机后置的 USB 接口。4.3 无线调试从 Android 11 开始的新玩法与坑无线调试是现在很常用的方式谷歌从 Android 11 开始提供了官方的无线调试功能。开通步骤手机连上 Wi-Fi电脑和手机必须处于同一个局域网开发者选项里打开“无线调试”用“配对码配对”功能生成一个六位配对码命令行执行adb pair 手机IP:配对端口输入配对码后配对成功 5. 在无线调试界面能看到“IP 地址和端口”执行adb connect 手机IP:端口这里要注意配对端口和连接端口是不同的别搞混。vivo 手机因为系统定制较多路径有点特别。开发者选项里要先开启“USB 调试”然后才能看到无线调试选项。viVO 部分型号第一次启用无线调试时系统会要求先插上数据线做一个鉴权或者要求打开“USB 调试安全设置”。这一步卡住的话需要先按提示用 USB 线完成初始授权然后再断线走无线流程。无线调试失败还有一个隐蔽原因路由器开了 AP 隔离。AP 隔离开启后同一 Wi-Fi 下的设备之间不能互相访问虽然手机和电脑都能上网但彼此连不通。如果你用adb connect一直连接超时去路由器管理后台把 AP 隔离关掉试试。另外防火墙可能拦截了 5555 端口Windows 弹出的防火墙授权第一次要选“允许访问”。4.4 国产手机调试的隐藏开关这里专门说一下国产手机。小米、vivo、OPPO、华为等品牌都有自己的一套权限管理逻辑光开“USB 调试”并不够。小米需要额外打开“USB 安装”部分 MIUI 版本还要登录小米账号vivo 需要在开发者选项里打开“USB 调试”后同时确认“USB 安装”“USB 调试安全设置”是否开启OPPO 则要额外验证账号在开发者选项里输入账号密码才能开启“USB 调试”的高级授权。如果你换了新手机连电脑adb devices显示的设备状态是unauthorized但重插之后也不再弹授权框那多半是这台手机的安全策略把“始终允许”选项给吞了。做法是插着线的情况下去开发者选项里“撤销 USB 调试授权”然后立刻拔插数据线手机会重新弹出授权框。这时候勾选“始终允许”再点击允许状态就变device了。5. Android Studio 自身的问题缓存、索引、SDK 组件5.1 清理缓存和重启解决 UI 卡死如果命令行下adb devices一切正常设备状态是device但 Android Studio 的设备下拉框或者 Device Explorer 还在转圈那问题很可能出现在 IDE 自身。先试最轻量的方案关闭当前项目回到欢迎界面再打开项目。这个操作会重新初始化设备连接状态不耗时间但经常有效。如果不行执行File → Invalidate Caches / Restart清理 IDE 的本地缓存并重启。清缓存之后Android Studio 需要重建索引首次打开项目会慢一些但设备列表的刷新往往会恢复正常。这里有一个常被忽视的点Android Studio 底部的 Event Log 或者 Logcat 窗口如果积累了巨量日志会对 IDE 的性能产生明显影响甚至导致 UI 线程卡顿。尤其是项目里日志输出频率很高、又开了多个设备窗口时下拉列表的刷新会被 UI 线程阻塞。可以先把 Logcat 清空再刷新设备列表试一次。5.2 SDK 组件不完整导致的隐性故障SDK Manager 里的组件缺失或版本不一致也会表现为“Loading Devices”。最常见的情况是Platform-Tools 版本过旧导致 ADB 协议与新版设备/模拟器不兼容。打开SDK Manager → SDK Tools检查 Platform-Tools 和 Emulator 是否有可更新版本。状态栏提示更新就更新保持最新版本能规避相当一部分连接问题。SDK 下载不完整在断网或者网络波动时很常见如果发现某个组件一直提示“unavailable”可以直接删除本地 SDK 目录对应组件后重新下载。Windows 上默认 SDK 路径在C:\Users\用户名\AppData\Local\Android\Sdk。如果这个盘空间不足SDK 组件更新时会静默失败IDE 端也不报错只是各种界面状态卡着不动。检查一下磁盘剩余空间如果不足 10G建议把 SDK 迁移到空间充足的磁盘。5.3 项目同步没完成“Loading Devices”是假象还有一种很常见的场景特别是你刚 clone 一个项目下来用 Android Studio 打开时Gradle 还在同步阶段项目没有完全 Load 完成。这时候如果你手快点了运行按钮Android Studio 会同时干两件事——继续进行 Gradle 同步同时尝试枚举设备。由于主线程被 Gradle 任务占满UI 上的“Loading Devices”就可能一直转。解决方式很简单等 Gradle 同步完成。看右下角进度条或者同步状态如果显示 “Gradle sync finished”再去点设备下拉框你会发现设备秒出。但问题在于国内网络环境下依赖下载经常很慢第一次同步可能要好几分钟。你可以把 Gradle 的依赖仓库改成国内镜像比如在build.gradle或init.gradle里把google()、mavenCentral()的前面加上 Aliyun 镜像源。在 Android Studio 里修改init.gradle的方法是找到 Gradle 用户目录下的init.gradle一般在C:\Users\用户名\.gradle\init.d\或~/.gradle/init.d/写入allprojects { repositories { maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/central } maven { url https://maven.aliyun.com/repository/gradle-plugin } } }这个init.gradle能对全局项目生效不用每个项目单独改。同步速度会明显提升那些因为同步慢而误判的“Loading Devices”也就不会出现了。5.4 代理配置与版本 BugAndroid Studio 自带设置里如果配置了 HTTP 代理但代理服务没有正常启动会导致 IDE 的网络请求无限超时。这种超时可能影响很多功能不只是 SDK 下载包括设备查询在内的一系列内部通信都会变慢。排查方法进入Settings → Appearance Behavior → System Settings → HTTP Proxy选择No proxy然后重启 Android Studio。这一步在有些环境下特别关键因为 Android Studio 的代理设置会覆盖系统代理就算系统能上网它也会执拗地走自己的代理配置。如果配置的代理地址已经失效了很多人不会第一时间想到是这里的问题但改掉之后卡顿立刻消失。另外Android Studio 每个大版本初期都有一些已知 bug。比如某几个版本里设备下拉框偶尔会卡在 “Loading Devices”官方在新版里做了修复。如果你当前用的版本出现过这种情况可以考虑升级到该大版本的最新修订版。升级一般不用重装直接在Help → Check for Updates里操作。新版本往往也改善了系统镜像、模拟器和 IDE 的协作效率从长远角度说保持 IDE 更新不是什么坏习惯。6. 常见问题速查表从现象直接找对策现象直接原因处理方法adb devices完全没有设备驱动未装 / 数据线仅充电 / USB 模式不对换数据线、装驱动、手机切换为“传输文件”模式设备状态为unauthorized手机端未授权拔插数据线重新弹窗勾选始终允许撤销授权后重试设备状态为offline通信链路异常、驱动不匹配拔插 USB重启 adb更换 USB 接口命令行有设备Android Studio 转圈IDE 缓存/UI 卡死、Gradle 未同步完成清缓存重启、等 Gradle 同步、检查 Event Log模拟器启动后黑屏或闪退系统镜像缺失、显卡渲染不兼容用命令行启动加-gpu swiftshader_indirect模拟器提示需要硬件加速BIOS 虚拟化未开启、加速驱动缺失开启 VT-x/AMD-V安装 AEHD 或开启 Windows Hypervisor Platform无线调试配对成功但 connect 超时AP 隔离 / 防火墙拦截 / 端口不对关闭 AP 隔离放行 5555 端口确认连接端口Linux 下no permissionsudev 规则缺失配置 udev 规则或临时用 sudo 执行 adbGradle 同步极其缓慢导致状态假卡依赖下载慢配置国内镜像仓库用 init.gradle 全局加速代理配置导致 IDE 内部通信超时代理失效或未启动设置里改 No proxy 后重启 IDE这张表是这几年各种设备问题的一个浓缩。排查的时候不用从头到尾全做一遍按现象命中哪一行就直接跳到对应方法效率最高。7. 最后再分享几个实操习惯每次排查“Loading Devices”这类问题时我个人的习惯是先做一次命令行自检链adb kill-server→adb start-server→adb devices。这三条命令走完基本就知道问题出在设备端还是 IDE 端。如果命令行能看到设备再回去折腾 IDE如果命令行都看不到那问题一定出在底层链路回 Android Studio 里反复重启界面一点用也没有。另外建议在开发机上常备一个专门的 ADB 工具目录单独保存最新版的 platform-tools。Android Studio 自带的 platform-tools 在更新时偶尔会因网络问题更新失败但命令行目录里的版本是独立可控的。只要保证命令行里的 adb 是最新版再把 Android Studio 里Tools → SDK Manager → SDK Tools → Platform-Tools更新到同样版本就能规避很多因为版本不一致引发的诡异连接问题。还有一个容易忽略的小技巧电脑休眠后唤醒USB 设备经常处于一个半失效的状态模拟器也可能被系统挂起。如果你早上打开电脑发现 Android Studio 卡在 Loading Devices先别急着各种折腾把模拟器完全退出、数据线拔插一次、重启一下 adb基本就能恢复正常。这个体验说实话不算好但摸透了规律之后处理起来也就是半分钟的事。“Loading Devices”说到底不是某一个组件的问题而是一条完整链路的连通性问题ADB 服务、驱动、USB 接口、设备授权、系统镜像、IDE 缓存任何一环出问题都会表现为那个让人烦躁的转圈。好在每一环都有清晰的验证命令和解决方法照着链路从最短的路径开始查你总能找到卡住它的那一环。
返回列表