啊宇哥哥 2025-11-01 06:35 采纳率: 98.6%
浏览 7
已采纳

mac下ADB无法识别Android设备

在 macOS 系统中,ADB(Android Debug Bridge)无法识别已连接的 Android 设备是常见问题。典型表现为执行 `adb devices` 命令后设备列表为空,或显示“unauthorized”状态。可能原因包括:USB 调试未启用、ADB 驱动(在 Mac 上为 usbmuxd)异常、adb 服务未正确启动、数据线接触不良或为充电线、系统权限限制(如 macOS 的隐私设置阻止 USB 设备通信),以及 ADB 版本过旧不兼容新设备。此外,部分国产手机需额外开启“允许安装应用”或“USB调试(安全设置)”。重启 ADB 服务(`adb kill-server` 后 `adb start-server`)、更换接口或线缆、重新授权调试均可尝试解决。
  • 写回答

1条回答 默认 最新

  • 时维教育顾老师 2025-11-01 09:19
    关注

    一、问题现象与基础排查

    在 macOS 系统中使用 ADB(Android Debug Bridge)调试 Android 设备时,常遇到执行 adb devices 命令后设备列表为空或显示“unauthorized”状态的问题。该现象直接影响开发、测试及自动化流程的推进。

    • 设备未出现在 adb devices 列表中
    • 设备显示为 unauthorized,提示需授权调试
    • USB 连接后系统无任何响应
    • 终端报错:“device not found” 或 “no permissions”

    初步检查应从物理连接和基本设置入手:

    1. 确认使用的是数据线而非仅充电线
    2. 尝试更换 USB 接口(优先使用原生接口而非扩展坞)
    3. 检查手机是否已开启“开发者选项”和“USB 调试”
    4. 部分国产机型还需额外开启“USB调试(安全设置)”或“允许安装应用”

    二、系统级权限与 macOS 安全策略影响

    macOS 自 Catalina 起加强了对外部设备的访问控制,可能阻止 ADB 与设备通信。即使 ADB 已安装,若未获得相应权限,adb devices 仍无法识别设备。

    系统版本相关权限设置位置所需授权项
    macOS Monterey+系统设置 → 隐私与安全性 → 定位服务 → 其他设备允许 adb 访问 USB 设备
    macOS Big Sur系统偏好设置 → 安全性与隐私 → 通用允许来自未知开发者的 adb 工具运行
    macOS Ventura系统设置 → 通用 → 登录项 → 安全性ADB 守护进程需被信任

    建议操作:

    sudo chmod 755 /usr/local/bin/adb
    tccutil reset All com.google.AndroidSDK.platform-tools

    注意:tccutil 需通过第三方工具如 tccutil-cli 安装以管理 TCC 数据库。

    三、ADB 服务与 usbmuxd 驱动机制分析

    在 macOS 上,iOS 和 Android 设备共用底层 USB 多路复用守护进程 usbmuxd。当其异常时,ADB 可能无法建立连接通道。

    usbmuxd 负责将 USB 流量转发至对应的调试协议,其崩溃或卡死会导致 ADB 无法枚举设备。

    # 查看 usbmuxd 进程状态
    ps aux | grep usbmuxd
    
    # 重启 usbmuxd(需管理员权限)
    sudo killall usbmuxd
    sleep 2
    systemctl --user restart usbmuxd  # 若使用 homebrew 安装的服务

    此外,ADB 自身服务也可能处于僵死状态:

    adb kill-server
    adb start-server
    adb devices

    此过程会重建 ADB daemon 并重新扫描可用设备。

    四、设备授权机制与密钥管理

    当设备首次连接时,ADB 会在手机端弹出“允许 USB 调试”的对话框。若用户拒绝或超时未确认,则设备状态变为 unauthorized

    常见处理方式包括:

    • 断开重连触发授权弹窗
    • 清除电脑端 ADB 密钥:rm ~/.android/adbkey ~/.android/adbkey.pub
    • 重启 ADB 服务后重新握手

    对于多设备协作环境,建议统一管理 ADB 密钥分发策略,避免频繁授权中断 CI/CD 流水线。

    五、硬件兼容性与软件版本匹配

    老旧版本的 ADB(如 SDK Platform-Tools < 34.0.0)可能无法识别搭载 Android 13+ 或新 SoC 的设备。

    Android 版本推荐 ADB 版本获取途径
    Android 10–1130.0.5+Android Studio SDK Manager
    Android 12–1333.0.3+Google SDK Repository
    Android 14+34.0.4+Command line tools only 包
    Pixel / Samsung 最新型号最新 nightly buildAOSP 源码编译

    升级命令示例:

    brew uninstall android-platform-tools
    brew install android-platform-tools

    六、高级诊断流程图与自动化脚本

    为系统化排查 ADB 识别失败问题,设计如下 Mermaid 流程图:

    graph TD
        A[执行 adb devices] --> B{设备列出?}
        B -- 否 --> C[检查 USB 数据线与接口]
        C --> D[更换线缆或端口]
        D --> E[确认手机开启USB调试]
        E --> F[查看是否有授权弹窗]
        F -- 有 --> G[点击允许]
        F -- 无 --> H[执行 adb kill-server]
        H --> I[删除 ~/.android/adbkey*]
        I --> J[重启 ADB 服务]
        J --> K[重新连接设备]
        K --> B
        B -- 是, unauthorized --> L[手机端确认授权]
        L --> M[再次执行 adb devices]
        M --> N[成功识别]
      

    可编写自动化检测脚本辅助日常开发:

    #!/bin/bash
    echo "Starting ADB diagnosis..."
    adb kill-server
    sudo killall usbmuxd
    sleep 2
    adb start-server
    echo "Current devices:"
    adb devices
    if [ $(adb devices | grep -c "unauthorized") -gt 0 ]; then
      echo "⚠️  Found unauthorized device(s), please check phone screen."
    fi
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月2日
  • 创建了问题 11月1日