ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Android Studio“Loading Devices”卡住?一文拆解ADB设备排查全流程

Android Studio“Loading Devices”卡住?一文拆解ADB设备排查全流程 搞Android开发的人八成都在Android Studio里见过那个转圈圈的“Loading Devices”。真机插上了、调试模式也开了结果设备列表死活不加载要么一直转要么干脆空空如也。这个问题的恶心之处在于它不像编译报错那样有明确的红色日志很多时候连个错误提示都不给就卡在那儿让人抓狂。今天我就把这几年踩过、填过、排查过的“Loading Devices”相关坑一次性梳理清楚。这篇文章不会只给你一句“重启ADB”就完事我会从问题背后的设备发现机制讲起逐步拆解从硬件到软件、从命令行到IDE缓存的完整排查链路最后再附上高频场景比如vivo手机无线调试的实战方案。无论你是刚装了Android Studio的新手还是被这个问题折磨已久的老兵照着这篇去排查基本能把九成以上的“Loading Devices”问题搞定。1. 先搞清楚“Loading Devices”到底卡在哪一环很多人在遇到这个问题时第一反应就是上网搜“Android Studio Loading Devices 卡住”搜出来一堆帖子挨个试了一遍结果发现有些方法在别人那里管用在自己电脑上却毫无反应。这背后的核心原因在于没有先搞清楚问题到底出在哪一层。1.1 “Loading Devices”背后的设备发现流程Android Studio本身并不直接认识你的手机它是通过Android Debug Bridge简称ADB这条通道来与设备沟通的。整个设备发现流程大致是这样的Android Studio启动时会向本机的ADB Server发送请求要求列出当前所有连接的设备。ADB Server收到请求后会通过USB协议或TCP/IP协议对应无线调试轮询所有已连接的硬件设备。手机端收到ADB的握手请求后会验证电脑的RSA密钥指纹——就是你在手机上看到“允许USB调试吗”那个弹窗。验证通过后手机会将设备状态device / unauthorized / offline上报给ADB Server。ADB Server把设备列表返回给Android StudioIDE再渲染到“Device Explorer”或运行目标下拉框中。“Loading Devices”这个字样就出现在Android Studio等待ADB Server返回设备列表的阶段。也就是说只要上述任何一个环节卡住你看到的就是这个无尽的Loading。举个例子ADB Server本身崩溃了、5037端口被别的进程占用、USB驱动异常导致系统根本识别不到手机、手机上的USB调试授权弹窗一直没有被点击……这些都会导致设备列表迟迟刷不出来。问题可能出在四个层面操作系统层、驱动层、ADB通信层、IDE渲染层。不同层面的问题解决思路完全不同。1.2 问题定位的核心方法论用命令行先做“二分法”这里我要给出一个贯穿全文的核心理念遇到“Loading Devices”不要急着在IDE里点来点去先打开命令行输入一条命令看看ADB层面的设备状态。这条命令就是adb devices -l这条命令的输出结果能直接帮你把问题范围缩小一半如果命令行能正常列出你的设备状态为device那说明硬件、驱动、ADB通信都没有问题问题大概率出在Android Studio的缓存或AS与ADB的通信上。如果命令行也卡住、报错或者列出的是unauthorized、offline状态那问题就出在更底层需要按后面的章节逐步排查。这个思路就像排查网络问题时先ping一下网关先确认链路是否通再决定往哪个方向深挖。我见过太多人刷了几十篇帖子把Android Studio卸载重装了三遍最后发现只是数据线接触不良就是因为他从来没有用命令行做过这一步判断。2. 从环境和硬件入手的基础排查方案如果adb devices的输出结果不正常或者根本识别不到设备那就要从最基础的环境和硬件开始逐个排查。这一部分比较琐碎但恰恰是“Loading Devices”最高发的坑区。2.1 开发者选项与USB调试的正确开启方式这个听起来简单但实际操作中有很多细节。首先开发者选项默认是隐藏的需要在“设置-关于手机”里连续点击“版本号”7次才能解锁。这个操作在不同品牌的手机上位置大同小异但有一些深度定制的系统尤其是国内厂商的ROM会改成连续点击“OS版本”或者“内核版本”。开启开发者选项后需要打开的关键开关包括USB调试这是必须开启的不用多说。“仅充电模式下允许ADB调试”这是一个容易忽略的选项。很多手机默认只允许在“文件传输MTP”模式下进行ADB调试如果你插上数据线后选择的连接模式是“仅充电”那ADB会直接失效。“USB安装”部分手机如小米、vivo把这个选项单独拆出来了它控制的是通过ADB安装APK的权限如果没打开运行App时会报错。从我自己的实操经验来看国内厂商的ROM在USB调试上普遍比原生Android多设置了几道“闸门”。比如vivo的Funtouch OS/OriginOS除了“USB调试”之外还有“USB调试安全设置”允许通过USB模拟点击和修改权限。如果只开了普通USB调试Android Studio虽然能识别设备但有些操作会受限表现也可能是设备列表加载异常。建议把能开的调试相关开关全部打开特别是插入数据线后把USB连接方式固定为“传输文件MTP”不要选“仅充电”。2.2 数据线、USB接口与驱动问题排查完手机端设置接下来就是物理层。这一步我吃过太多亏了数据线看起来毫发无损实际上内部线芯已经断了或者接触不良。判断方法很简单插上手机后看电脑系统是否弹出设备接入的提示音或通知。如果系统层面都没有反应那大概率是数据线或接口问题。我建议直接换一根原装线试试同时注意尽量插在电脑主机背面的原生USB接口上前面板接口尤其是机箱前置经常因为供电不足导致设备反复断开重连。在Windows系统上还有一个经典的坑驱动问题。你可以在“设备管理器”里展开“便携设备”或“通用串行总线控制器”看看有没有带黄色感叹号的设备。如果有说明驱动没装好。最常见的两种情况手机厂商提供了专门的USB驱动如vivo手机助手驱动、华为手机助手驱动安装了手机助手后驱动就有了。使用通用的ADB驱动或者通过SDK Manager单独安装Google USB Driver路径在\extras\google\usb_driver。macOS和Linux系统一般不需要额外装驱动但要注意系统需要能正常识别USB设备必要时重启电脑让系统重新枚举一次设备。2.3 设备授权弹窗的“看不见的坑”这是一个非常隐蔽的问题。当手机第一次连接电脑时手机上会弹出“允许USB调试吗”的对话框并显示电脑的RSA密钥指纹。如果这个弹窗没弹出来或者被你误触点了“取消、不再询问”那设备在Android Studio里就会一直显示为unauthorized不解决授权问题设备列表永远出不来。判断方法和解决方法都很简单在命令行执行adb devices如果看到状态是unauthorized说明授权还没完成。解决方法是在手机端进入“开发者选项”找到“撤销USB调试授权”位置可能叫“撤销USB调试授权”或类似名称点击撤销然后重新拔插数据线手机会重新弹出授权弹窗。弹窗弹出后勾选“始终允许使用这台计算机进行调试”然后点击确定。这里有个老司机的技巧如果你发现怎么拔插都不弹授权框可以在命令行先执行adb kill-server再执行adb devices让ADB Server重新启动一次。很多时候ADB Server在第一次握手时已经记录了错误的设备状态重启Server可以强制重新发起握手。3. 用命令行诊断并修复ADB连接问题命令行是排查ADB问题最趁手的工具也是我工作中最依赖的方法之一。当你确认基础环境和硬件没有问题后接下来就要用命令行做精细化的诊断了。3.1 ADB完整诊断流程kill、start、devices这里我给出一套完整的、可复现的ADB诊断命令序列按照顺序执行即可# 1. 查看当前ADB版本 adb version # 2. 终止ADB Server adb kill-server # 3. 启动ADB Server adb start-server # 4. 查看设备列表-l参数会显示设备详细信息 adb devices -l这套命令的逻辑是先确认ADB版本然后主动杀掉可能卡死的Server进程再重新拉起最后查看设备列表。看似简单但很多“Loading Devices”问题在执行完这套操作后就直接解决了。adb devices -l的输出结果有几种常见状态每种都对应不同的处理方法设备状态含义处理方法device正常连接继续排查Android Studio层面unauthorized未授权在手机上确认授权弹窗或撤销USB调试授权后重试offline设备离线拔掉数据线重插或重启手机个别情况需要重启电脑no permissionsLinux下权限不足使用sudo adb kill-server后再启动时前加sudo空列表识别不到设备检查驱动、数据线、USB调试开关3.2 5037端口被占用ADB Server起不来的元凶ADB Server默认监听本机的5037端口。如果这个端口被其他进程占用ADB Server就无法正常启动设备列表自然刷不出来Android Studio里也会一直转圈。这种情况在安装了各种手机助手、模拟器的电脑上特别常见。检测端口占用情况在Windows上执行netstat -ano | findstr 5037在macOS/Linux上执行lsof -i :5037如果发现端口被占用记下占用进程的PID然后在任务管理器Windows或kill命令macOS/Linux中结束对应进程。我自己遇到过的端口占用元凶包括某些手机厂商的同步助手、蓝叠模拟器、甚至一些电脑管家的“应用加速”功能。这里有个实用的小技巧我不想每次都手动去杀进程所以干脆把手机厂商的助手类软件设为开机不启动。这些助手软件除了占端口还经常在后台偷偷更新实在没什么正面作用。另外如果在企业内网或学校实验室环境建议检查是否开启了一些安全软件自带的“USB设备管控”这种管控策略也会干扰ADB的正常通信。3.3 ADB版本与Platform-Tools的兼容性ADB版本的差异也会导致奇怪的兼容性问题。Android Studio自带了一套Platform-Tools包含ADB路径通常在SDK目录下的platform-tools文件夹里。有几种情况会导致ADB版本异常电脑上同时安装了多个Android开发工具链如Eclipse时代遗留的ADT插件、第三方的ADB工具包系统PATH环境变量里优先指向了旧版本的ADB。Android Studio的SDK Manager里Platform-Tools更新失败导致版本过旧。使用了某些“绿色版”“精简版”ADB工具功能不全。判断方法很简单执行adb version查看版本号和发布时间。如果发现版本很旧可以通过SDK Manager更新Platform-Tools打开Android Studio进入“SDK Manager”。切换到“SDK Tools”选项卡。勾选“Android SDK Platform-Tools”点击“Apply”进行更新。更新完成后重启Android Studio。还有一个思路直接去官方网站单独下载最新版的Platform-Tools压缩包解压后把里面的adb.exeWindows或adbmacOS/Linux替换掉SDK目录下的同名文件。不过这个操作属于“手动动刀”建议新手还是优先通过SDK Manager更新避免因为版本不匹配引发其他问题。4. Android Studio进程与缓存层的解决方案如果命令行已经能正常显示设备但Android Studio里还是“Loading Devices”那问题就出在IDE这一层了。这部分的坑比较玄学但解决方案相对固定。4.1 重启ADB与IDE的正确顺序很多人在遇到问题时会直接在Android Studio里点击“File - Invalidate Caches / Restart”或者直接重启IDE。但如果你先重启IDE、后重启ADB那大概率是白折腾一场——Android Studio在启动时会连接ADB Server如果这个连接因为某种原因卡住了IDE重启后还是会去连那个卡住的Server。正确的操作顺序是在命令行执行adb kill-server彻底杀掉ADB Server。执行adb start-server重新启动ADB Server。重启Android Studio让它重新与ADB Server建立连接。在执行完第2步后可以先在命令行执行adb devices确认设备已经处于device状态再重启IDE。这个过程保证了Android Studio启动时面对的是一个健康的ADB环境而不是一个半死不活的幽灵Server。4.2 清理IDE缓存Invalidate Caches的适用场景如果上面那套“重启大法”用完还是不行那就是Android Studio自己的缓存出问题了。IDE在识别设备列表时也会缓存一些设备信息和布局状态缓存一旦损坏就可能出现设备列表空白、一直转圈或者显示奇怪的占位符。这时需要执行“Invalidate Caches / Restart”操作在Android Studio菜单栏点击“File”。选择“Invalidate Caches / Restart”。在弹出的对话框中选择“Invalidate and Restart”。这个操作会清除IDE的本地缓存和索引然后在重启后重新构建。需要提醒的是这个过程在大型项目上会持续几分钟而且会重建所有模块的索引期间CPU占用会飙高属于正常现象不用慌。我自己遇到过一种情况Android Studio的“Device Explorer”面板始终刷不出文件列表重装AS都没用但执行了Invalidate Caches之后就好了。所以当“重启ADB 重启IDE”的组合失败时不要犹豫直接清缓存。4.3 SDK、模拟器与多设备场景的特殊情况除了真机“Loading Devices”也经常出现在启动模拟器的时候。如果你启动AVD后设备列表一直不出现或者出现了但状态异常要检查以下几项SDK平台工具是否完整模拟器的启动依赖于Emulator、System Image等组件缺失或损坏都会导致启动失败或设备状态异常。可以在SDK Manager里检查是否有组件需要更新或下载。虚拟化技术是否开启在Windows上模拟器通常依赖Intel HAXM或Windows Hypervisor Platform在macOS上依赖Hypervisor.framework。如果虚拟化功能没有正常启用模拟器会启动不了表现为设备列表里永远没有模拟器。可以在SDK Manager里单独安装和检查HAXM的安装状态。同时连接多台设备时的选择问题当电脑上同时连接了模拟器和真机Android Studio会弹出一个选择目标设备的对话框。如果这个对话框没有正常弹出来或者默认选中的设备不对也可能看起来像“Loading Devices”。可以在工具栏的下拉框里手动点击刷新或者拔掉其他设备只保留目标设备来排除干扰。还有一个容易忽略的场景如果你用命令行启动了很久之前创建的AVD并且这个AVD的系统镜像版本很老启动后加载时间会特别长甚至卡在启动动画。在“Loading Devices”的同时模拟器界面可能一直黑屏或停在Boot界面这其实不是设备发现的问题而是模拟器本身没启动完成。建议先升级系统镜像或者删除旧AVD重新创建一个。5. 高频真机场景无线调试连接vivo手机的完整方案前面讲的都是USB有线连接。但在实际开发中很多场景下你并不想一直插着数据线——试想一下你要拿着手机在真机上测扫码、测NFC、测蓝牙交互拖着一条数据线有多痛苦。这时候就需要无线调试了。我注意到“如何使用Android Studio无线连接调试vivo手机”是很多人在搜的问题而且无线环境的“Loading Devices”问题比有线更多、更隐蔽所以专门用一节来讲。5.1 两种无线调试方案对比目前Android实现无线调试主要有两种思路Android 11 原生无线调试Android 11及以上的系统内置了“无线调试”功能可以在开发者选项里直接开启通过二维码或配对码连接。传统ADB over TCP/IP通过adb tcpip命令把手机的ADB端口设置为网络监听模式然后再从电脑连接。这种方法对Android版本没有硬性要求但每次手机重启后需要重新设置。两张方案各有优劣。原生方案需要Android 11以上系统但配网过程更安全、更稳定传统方案兼容性更好但步骤更繁琐。对于vivo手机如果你使用的是OriginOS/Funtouch OS绝大多数是Android 11内核的系统可以直接用原生无线调试。5.2 vivo手机无线调试实操步骤先说要满足的前提手机和电脑连接同一个Wi-Fi网络。手机开启了开发者选项、USB调试在首次配置无线调试时仍需用数据线连接电脑完成ADB配对。第一种方式原生无线调试Android 11在vivo手机上进入“设置 - 其他设置 - 开发者选项”。找到“无线调试”点击进入。开启“无线调试”开关。点击“使用配对码配对设备”此时手机会显示一个6位配对码和当前的IP地址端口。在电脑上打开命令行执行配对命令注意端口要使用手机配对页面显示的那个adb pair 192.168.x.x:xxxxx按照提示输入配对码配对成功后执行连接命令连接端口与配对端口不同通常在无线调试主页面可以查到adb connect 192.168.x.x:xxxxx连接成功后执行adb devices能看到设备的连接方式显示为192.168.x.x:xxxxx device这表示无线连接已建立。第二种方式传统ADB over TCP/IP适用于Android 10及以下或老版本系统用数据线连接手机和电脑有线连接正常。在命令行执行adb devices adb tcpip 5555拔掉数据线。在手机上查看当前Wi-Fi的IP地址设置 - WLAN - 点击当前网络的详情。在电脑上执行adb connect 手机IP:5555连接成功后设备列表会出现手机IP:5555 device的条目。5.3 无线调试中“Loading Devices”的特有陷阱无线调试的“Loading Devices”问题除了常规ADB问题外还有一些特有的坑手机锁屏导致ADB掉线部分vivo手机在锁屏后会自动关闭Wi-Fi的某些能力导致ADB连接断开。解决方法是进入“WLAN - 高级设置 - 在休眠状态下保持WLAN连接”选择“始终”。路由器AP隔离如果你的Wi-Fi网络开了“AP隔离”或“访客网络”手机和电脑之间可能无法直接通信表现就是adb connect一直超时。可以切换到同一局域网下的普通网络试试。IP地址变化手机重启后动态IP大概率会变导致之前保存的ADB连接失效。每次重启手机后都需要重新adb connect一次新的IP。我自己在vivo手机上实测用Android 11原生无线调试的稳定性明显好于传统tcpip模式掉线率低很多。强烈建议系统版本支持的话优先用第一种方案。6. 常见问题速查表与独家避坑心得最后把前面提到的所有方案整理成一张速查表方便各位收藏遇到问题时直接对号入座。6.1 “Loading Devices”常见问题速查表现象排查方向推荐解决手段命令行也识别不到设备数据线、接口、驱动换原装线、换USB口、装驱动、重启电脑状态显示unauthorizedUSB调试授权未通过撤销USB调试授权重新授权勾选“始终允许”状态显示offline通信链路异常拔插线、重启adb、重启手机、换USB口ADB Server起不来5037端口被占用netstat/lsof查端口结束占用进程IDE刷不出但命令行正常Android Studio缓存/连接异常kill-server后重启ASInvalidate Caches模拟器不出现在列表虚拟化或系统镜像问题检查HAXM/Hypervisor升级SDK组件无线调试连接超时网络隔离或AP隔离关闭AP隔离确保同一局域网无线调试经常掉线手机锁屏策略/自启动管理设置“屏幕关闭后保持WLAN连接”并固定在后台
返回列表