黎小葱 2025-09-18 21:15 采纳率: 98.4%
浏览 10
已采纳

adb.exe已停止工作:常见崩溃原因及解决方案

问题:在使用 ADB 调试时,频繁出现“adb.exe 已停止工作”提示,导致设备连接中断、命令无响应。该问题常见于 Windows 系统,尤其在启动 adb server 或执行 adb shell、adb logcat 等命令时触发崩溃。可能原因包括 USB 驱动异常、ADB 版本不兼容、端口被占用(如5037)、杀毒软件拦截,或系统环境变量配置错误。部分情况下,多设备连接或厂商定制 ROM 的 ADB 实现差异也会引发进程异常退出。如何定位并解决此类 ADB 崩溃问题,确保调试稳定运行?
  • 写回答

1条回答 默认 最新

  • 小丸子书单 2025-09-18 21:15
    关注

    一、ADB崩溃问题的系统性诊断与解决方案

    1. 问题现象与初步排查

    在Windows环境下进行Android设备调试时,频繁出现“adb.exe 已停止工作”错误提示。该异常通常发生在以下场景:

    • 执行 adb start-server 启动服务
    • 运行 adb shelladb logcat
    • 多设备连接后执行命令
    • 设备热插拔或长时间运行后

    初步可判断为进程级崩溃,表现为:无响应、闪退、无法获取设备列表(adb devices 超时)

    2. 常见原因分类与优先级排序

    原因类别发生频率影响范围排查难度
    USB驱动异常单设备/多设备
    ADB版本不兼容跨平台通用
    5037端口被占用本地服务阻塞
    杀毒软件拦截特定安全策略
    环境变量配置错误全局路径失效
    厂商定制ROM ADB实现差异特定品牌设备
    多设备并发冲突自动化测试环境
    系统权限不足非管理员运行
    防火墙限制网络ADB模式
    ADB缓存文件损坏长期使用累积

    3. 深度分析流程图

    graph TD
        A[ADB崩溃] --> B{是否首次启动?}
        B -->|是| C[检查环境变量 & ADB路径]
        B -->|否| D[执行 adb kill-server]
        D --> E[检查5037端口占用 netstat -ano | findstr :5037]
        E --> F{端口被占用?}
        F -->|是| G[任务管理器结束占用进程]
        F -->|否| H[重启ADB服务]
        H --> I[连接设备]
        I --> J{是否多设备?}
        J -->|是| K[使用序列号指定设备 adb -s XXXX shell]
        J -->|否| L[检查USB驱动状态]
        L --> M[更新Google USB Driver或OEM驱动]
        M --> N[禁用杀毒软件临时测试]
        N --> O[尝试更换ADB版本如Platform Tools最新版]
        O --> P[验证是否仍崩溃]
        P -->|是| Q[抓取Windows事件日志分析崩溃堆栈]
        P -->|否| R[问题解决]
        

    4. 关键排查命令与输出示例

    以下是用于定位问题的核心命令及其典型输出:

    # 检查ADB版本
    adb version
    ⇒ Android Debug Bridge version 1.0.41

    # 查看端口占用情况
    netstat -ano | findstr :5037
    ⇒ TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 1234

    # 结束占用进程
    taskkill /PID 1234 /F

    # 清除ADB密钥以重置信任关系
    del %USERPROFILE%\.android\adbkey*

    # 强制重启ADB服务
    adb kill-server && adb start-server

    # 指定设备执行命令避免混淆
    adb -s CB5A2B3C4D shell getprop ro.build.fingerprint

    # 使用Process Monitor监控adb.exe调用行为
    procmon /BackingFile adb_trace.pml /Quiet

    # 查看系统事件日志中的应用程序错误
    eventvwr.msc → Windows Logs → Application → Filter by "adb.exe"

    # 启用ADB调试日志(需编译源码支持)
    set ADB_TRACE=1
    adb devices

    5. 高级解决方案:从系统层到工具链优化

    对于资深开发者,建议采取以下进阶措施:

    1. 使用官方最新Platform Tools替换旧版ADB
    2. 在CI/CD环境中部署独立ADB实例,隔离端口与配置
    3. 通过PowerShell脚本自动化检测并修复常见问题:
    function Repair-ADB {
        param([switch]$ForceKill)
        if ($ForceKill) { adb kill-server }
        $portCheck = netstat -ano | Select-String ":5037"
        if ($portCheck) {
            $pid = ($portCheck -split '\s+')[-1]
            Write-Host "Killing process $pid on port 5037"
            taskkill /PID $pid /F
        }
        Start-Process adb -ArgumentList "start-server" -WindowStyle Hidden
        Start-Sleep -Seconds 2
        $devices = adb devices | Select-Object -Skip 1
        Write-Host "Connected devices: $($devices.Count)"
    }

    此外,针对华为、小米等厂商定制系统,应关闭“USB调试安全设置”或启用“始终允许来自这台计算机”选项,避免因授权弹窗导致ADB通信中断。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 9月18日