解决 adb devices时?????????? no permissions 问题的两种方法

本文详细介绍了如何在Ubuntu 12.04环境下解决Android开发中使用adb devices命令时遇到的nopermissions错误。包括修改adb和fastboot程序的所有者及权限,通过lsusb列出USB设备信息,记录VID和PID,编辑udev配置文件,重启udev服务,以及重新启动adb server等步骤。

在Ubuntu12.04下做android开发时运行adb devices命令,经常会出现如下结果。

List of devices attached 
???????????? no permissions

一:

修改adb程序的所有者和权限做到以后直接运行adb devices.

切换到adb程序的目录,命令:

如我的:cd android-sdk-linux/platform-tools

ls -l 

把adb和fastboot的权限改成如下:

sudo chown root:root adb

sudo chown root:root fastboot

sudo chmod 4777 adb

sudo chmod 4777 fastboot

改好后:

adb devices你就会发现,可以正确看到android设备了。

List of devices attached 
20130530 device (这个是我的)


二:

$ lsusb

Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 009: ID 18d1:0003 Google Inc. 
Bus 002 Device 004: ID 0461:4d22 Primax Electronics, Ltd

记录你的VID和PID (我的是 18d1:0003)


$ sudo vim /etc/udev/rules.d/70-android.rules

如提示没有vim工具 :

sudo apt-get install vim


打开后按键盘S键进入编辑模式,加入以下字段

SUBSYSTEM==”usb”, ATTRS{idVendor}==”18d1″, ATTRS{idProduct}==”0003″,MODE=”0666″
然后更改你的VID和PID
18d1就是VendorID ,0003就是 ProductID(我的,按上述所做)


运行命令,重启udev:

$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules (更换读写和执行权限)

$ sudo service udev restart (重启udev)

三、重新启动adb server
(很重要)拔掉usb重新连上再执行:

adb kill-server

adb devices

adb root (这一步很重要 )




<think>嗯,用户这次的问题很明确:想了解如何重启ADB服务及处理设备连接异常。结合对话历史,用户之前已经询问过如何关闭ADB,现在自然过渡到重启和故障排除,说明ta正在实际调试设备,可能遇到了连接问题。 从引用内容看,用户特别提到"device unauthorized"这类典型错误[^3],还提供了adb版本信息[^2]和异常处理代码片段[^1],说明ta有一定技术背景,但可能对ADB的底层机制不熟悉。需要重点解决三个层面:服务重启操作(基础)、连接问题分类(核心)、进阶排查手段(深度)。 关于重启ADB服务,基础操作是adb kill-server后执行adb start-server,但必须补充细节:Windows和macOS/Linux的环境变量差异可能导致命令失效,这点在引用[2]的路径信息中已暗示。连接异常则要分层次处理:物理连接(线缆/USB口)→设备端设置(开发者选项/USB调试)→电脑端冲突(5037端口占用)→授权状态[^3]。尤其要注意引用[3]提到的设备未授权场景,需要图文并茂说明如何点击"允许USB调试"弹窗。 进阶部分考虑引入adb -P指定端口绕过占用,以及adb usb强制切回USB模式——这些在引用里没提,但实际排查很实用。最后用树状图总结排查路径,比纯文字更直观。用户提供的异常处理代码[^1]恰好能转化为Python示例,展示如何用脚本自动化检测设备状态。 相关问题设计成阶梯式:从基础(资源消耗)到安全(永久禁用)再到开发(Python集成),覆盖用户潜在需求。特别注意引用[2]的版本号格式,回答adb命令的字母大小写必须严格一致(如adb devices不是ADB Devices)。</think>以下是重启 ADB 服务及解决常见连接问题的完整指南,结合操作步骤和故障排查方法: --- ### 一、重启 ADB 服务的标准方法 #### 步骤 1:终止当前 ADB 服务 ```bash adb kill-server # 强制停止 ADB 后台进程 ``` - **验证是否关闭**:执行 `adb devices`,若输出 `* daemon not running; starting now at tcp:5037` 或 `List of devices attached` 为空,表示服务已终止[^2]。 #### 步骤 2:重新启动 ADB 服务 ```bash adb start-server # 重启服务 adb devices # 检查设备是否识别 ``` - 成功显示设备序列号及状态(如 `ABC12345 device`)[^2]。 > **注意**:若命令提示 `adb: command not found`,需检查环境变量是否包含 ADB 安装路径(引用[3]中配置方法)。 --- ### 二、常见连接问题解决方案 #### 问题 1:设备未授权(`device unauthorized`) - **现象**:`adb devices` 返回 `unauthorized` - **解决**: 1. 检查设备弹窗:连接 USB ,设备会显示 **"允许 USB 调试吗?"** 弹窗,勾选 **"始终允许"** 后确认[^3]。 2. 重置授权: ```bash adb pair 192.168.x.x:xxxx # 若使用无线调试(替换为设备IP和端口) adb reconnect offline # 强制重新协商密钥 ``` #### 问题 2:设备离线(`offline`) - **原因**:ADB 版本与设备不兼容或 USB 连接不稳定 - **解决**: 1. 升级 ADB 工具至最新版(引用[2]中 `adb version` 检查版本)。 2. 更换 USB 数据线或接口,避免使用扩展坞。 3. 重启设备:`adb reboot` #### 问题 3:端口占用(`cannot bind to tcp:5037`) - **解决**: 1. 查找占用进程: ```bash # Windows netstat -ano | findstr "5037" taskkill /PID <进程ID> /F # macOS/Linux lsof -i :5037 kill -9 <进程ID> ``` 2. 指定新端口启动: ```bash adb -P 5038 start-server # 使用 5038 端口 ``` #### 问题 4:设备未列出(无设备显示) - **排查步骤**: 1. 开启开发者选项:进入手机 **设置 → 关于手机 → 连点 7 次 "版本号"**。 2. 启用 USB 调试:**设置 → 开发者选项 → USB 调试**。 3. 切换 USB 模式:连接选择 **"文件传输"** 或 **"PTP"** 模式(非"仅充电")。 4. 检查设备 VID/PID:更新电脑端 USB 驱动程序(尤其三星/华为等品牌需单独安装驱动)。 --- ### 三、自动化检测脚本(Python 示例) 通过脚本捕获异常并重试: ```python import subprocess def check_adb_connection(): try: result = subprocess.run( ["adb", "devices"], capture_output=True, text=True, timeout=10 ) if "device" in result.stdout: print("设备连接正常") else: print("执行 adb 命令出错: 设备未识别") subprocess.run(["adb", "kill-server"]) subprocess.run(["adb", "start-server"]) except Exception as e: print(f"执行 adb 命令出错: {e}") # 引用[1]的错误处理逻辑 check_adb_connection() ``` --- ### 四、连接问题排查流程图 ```mermaid graph TD A[设备未列出] --> B{USB 调试已开启?} B -->|否| C[进入开发者选项启用] B -->|是| D{USB 模式} D -->|仅充电| E[切换为文件传输] D -->|其他| F{电脑驱动正常?} F -->|否| G[安装设备专用驱动] F -->|是| H[重启 ADB 服务] H --> I[adb kill-server && start-server] I --> J[成功识别设备] ``` --- ### 五、关键注意事项 1. **系统兼容性**: - Windows:禁用驱动程序强制签名(华为/小米设备常见问题) - macOS/Linux:需配置 `udev` 规则(`/etc/udev/rules.d/51-android.rules`) 2. **无线调试**: ```bash adb tcpip 5555 # 开启设备 TCP 端口 adb connect 192.168.x.x:5555 # 替换设备 IP ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值