295

我正在使用三星 Galaxy Nexus 手机(Android 4.0平台)。

我正在 Ubuntu linux 操作系统上开发 Android 应用程序。我想直接在三星手机设备上运行我的应用程序,所以我执行了以下设置步骤:

  1. 在我的项目AndroidManifest.xml文件中,添加android:debuggable="true"<application>元素

  2. 在设备上,在Settings > Security enabled Unknown sources

  3. 在设备上,在设置 > 开发人员选项中启用USB 调试

  4. 在我的电脑上,创建了/etc/udev/rules.d/51-android.rules包含以下内容的文件:

    SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev" 
    
  5. 在我的电脑上,运行chmod a+r /etc/udev/rules.d/51-android.rules命令

然后,在我的电脑上,我打开了一个终端并执行了adb devices命令,我得到了:

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

由于我没有看到我的设备,而只有???????????? no permissions,因此我运行以下命令:

 adb kill-server
 adb start-server
 adb devices

但我仍然得到:

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

为什么?我错过了什么?

4

28 回答 28

469

What works for me is to kill and start the adb server again. On linux: sudo adb kill-server and then sudo adb start-server. Then it will detect nearly every device out of the box.

于 2012-02-09T11:55:10.663 回答
356

在我最终在这里找到答案之前,没有什么对我有用:http: //ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html

我在这里复制文本以防将来消失。

创建一个名为 /tmp/android.rules 的文件,其内容如下(十六进制供应商编号取自供应商列表页面):

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1bbb", MODE="0666"

运行以下命令:

sudo cp /tmp/android.rules /etc/udev/rules.d/51-android.rules
sudo chmod 644   /etc/udev/rules.d/51-android.rules
sudo chown root. /etc/udev/rules.d/51-android.rules
sudo service udev restart
sudo killall adb

断开手机和电脑之间的 USB 数据线。

重新连接手机。

运行adb devices以确认现在它有权访问电话。

请注意,可以使用, USER="$LOGINNAME"而不是, MODE="0666".rules文件中,代替$LOGINNAME您的登录名,即id -nu打印的内容。

在某些情况下,可能需要为 udev 规则文件指定一个接近结尾的名称,例如z51-android.rules.

于 2012-09-30T18:55:42.760 回答
85

输入以下命令:

# cd to adb for sudo
cd `which adb | sed -e "s/adb//"`
adb kill-server
sudo ./adb start-server
./adb devices

This happens when you are not running adb server as root.  
于 2012-08-13T15:08:45.597 回答
58

以上都试过了,没有一个工作..当我从MTP切换到相机(PTP)时终于工作了。

于 2015-04-01T05:32:06.653 回答
33

这个问题有很多不好的答案,从坚持运行adbroot不应该被吹捧为唯一甚至推荐的解决方案)到解决完全不相关的问题。

这是同时处理所有设备adbfastboot设备权限的最短且最通用的方法:

echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:ff420?:*", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --verbose --action=add --subsystem-match=usb

或者您可以使用我发布到此要点的稍长版本。

至于 OP 在他的问题中做错的具体事情 - 它不是udev在编辑.rules文件后重新加载规则。

OP 也没有告诉他手机上有哪个 Android 版本(又名 ROM)。该idVendor值是在软件中设置的,因此它取决于 ROM。因此,04E8他在原始规则中使用的值仅适用于具有三星库存 ROM 的设备。但这对这条udev规则来说不是问题——它匹配所有带有adbfastboot接口的设备,而不管它们的VendorID是什么。

于 2017-07-10T07:36:51.103 回答
17

在 Archlinux 中,这种情况偶尔会发生。修复:

$ sudo -s
# adb kill-server
# adb start-server
于 2014-09-24T03:23:19.543 回答
9

对于使用 debian 的用户,在 Ubuntu 下设置设备以创建文件“/etc/udev/rules.d/51-android.rules”的指南不起作用。我按照这里的说明进行操作。把同样的东西放在这里以供参考。

以超级用户身份编辑此文件

sudo nano /lib/udev/rules.d/91-permissions.rules

找到类似这样的文字

# usbfs-like devices 
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0664″

然后将模式更改为 0666 如下所示

# usbfs-like devices 
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0666″

这允许 adb 工作,但是我们仍然需要设置设备以便可以识别它。我们需要以超级用户的身份创建这个文件,

sudo nano /lib/udev/rules.d/99-android.rules

并输入

SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”0bb4″, MODE=”0666″

上面一行是针对 HTC 的,请关注@grebulon 的帖子以获取完整列表。

保存文件,然后以超级用户身份重新启动 udev

sudo /etc/init.d/udev restart

通过 USB 连接手机,在编译和运行项目时应该会检测到它。

于 2013-08-19T06:40:02.263 回答
5

我遇到了同样的问题,解决方案是:(顺便说一句,你不必root你的设备。)

  1. 输入“su”切换到超级用户。
  2. 你的路径/adb 杀死服务器。
  3. 你的路径/adb 启动服务器。
  4. 如果没有发生错误,您可以在 root 帐户中看到带有“your-path/adb devices”的设备列表。
  5. 退出超级用户。
  6. 现在您可以在您的帐户中执行“adb devices”。

享受。

于 2013-02-12T05:04:47.730 回答
4

我的 Galaxy S3 也有同样的问题。我的问题是idVendor价值04E8不正确。要找到合适的,请将您的智能手机连接到计算机并lsusb在终端中运行。它将像这样列出您的智能手机:

Bus 002 Device 010: ID 18d1:d002 Google Inc.

所以正确的idVendor值为18d1。中的行 /etc/udev/rules.d/51-android.rules必须是:

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

然后我跑了sudo udevadm control --reload-rules,一切正常!

于 2014-07-17T09:57:22.760 回答
4
于 2015-05-02T13:24:34.003 回答
3

使用M0Rf30/android-udev-rulesGitHub 社区维护的 udev-rules

https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules

这是迄今为止我见过的最完整的 udev-rules 列表,甚至比sudo apt-get install android-tools-adb 官方文档中目前推荐的还要多,它为我解决了这个问题。

于 2017-10-21T21:24:26.397 回答
2
  1. 按照http://developer.android.com/guide/developing/device.html上的说明进行操作(存档链接)
  2. 0bb418d1in替换 vendor id/etc/udev/rules.d/51-android.rules

    或者添加另一行:

    SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
    
  3. 重新启动计算机或只是重新启动 udev 服务。
于 2013-07-26T10:08:33.750 回答
1

当您重新启动 udev 时,杀死 adb 服务器并启动 adb 服务器转到 android sdk 安装路径并在 sudo 上执行所有操作。然后运行 ​​adb devices 它将解决权限问题。

于 2012-03-16T14:37:52.487 回答
1

我的设备是 POSITIVO,我的操作系统是Ubuntu 14.04 LTS 所以,我的问题出在变量名上

我创建文件 /etc/udev/rules.d/51-android.rules 并把 SUBSYSTEM=="usb", SYSFS{idVendor}=="1662", MODE="0666"

我断开设备并执行:

$ sudo udevadm control --reload-rules
$ sudo service udev restart

在此之后,我再次以开发者模式连接了 android 设备,然后

$ adb devices

List of devices attached 
1A883XB1K   device
于 2014-08-24T04:36:18.327 回答
1

您不应该adb像其他答案所建议的那样以 root 身份运行服务器。相反,如果您使用的是 Arch Linux,请执行以下操作:

  1. 使用 Pacman安装android-udev软件包
  2. 重新加载 udev 规则:

    # udevadm control --reload-rules
    
  3. 将自己添加到adbusers组,然后注销并登录:

    # usermod -aG adbusers $LOGNAME
    

来源:https ://wiki.archlinux.org/index.php/android#Configuring_adb

于 2018-03-29T06:43:21.447 回答
1

仅适用于 Ubuntu/Debian 用户:ubuntu 需要做一些特定的事情才能使 USB 调试工作:这里描述: https ://developer.android.com/studio/run/device 这里是提到的两个步骤。在终端中运行这两个命令:

sudo usermod -aG plugdev $LOGNAME
sudo apt-get install android-sdk-platform-tools-common
于 2020-09-19T15:23:20.107 回答
1

无需拔掉电源

所有提供的答案都假设您能够拔下并重新连接 USB 电缆。在无法做到这一点的情况下(例如,当您处于远程状态时),您可以执行以下操作以基本上执行建议的 udev 规则在重新插入时会执行的操作:

lsusb

找到您关心的设备,例如:

Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus

记下它所在的总线编号,然后执行,例如总线003

sudo chmod a+w /dev/bus/usb/003/*

显然,这可能比您想要的更宽松(可能连接的设备不止这个),但您明白了。

于 2016-07-29T16:28:03.297 回答
0

尝试而不是GROUP="plugdev"使用用户的主要组。

于 2012-02-09T11:53:45.487 回答
0

在我的 ubuntu 12.04 LTS 上,我不得不将我的 HTC Incredible USB 模式从充电更改为媒体,然后设备出现在 adb 下。当然,在这两种情况下都已经进行了调试。

于 2013-09-25T15:04:05.613 回答
0
sudo usermod -aG plugdev $LOGNAME

这个命令对我有用

于 2020-06-20T05:40:22.727 回答
0

不要遵循建议使用sudo( sudo adb start-server) 的解决方案!这以 root(管理员)身份运行 adb,它不应该那样运行!!!这是一个糟糕的解决方法

以 root 身份运行的所有内容都可以在您的系统中执行任何操作,如果它创建或修改文件可以将其权限更改为仅供 root 使用。再次,不要!

正确的做法是设置您的系统以使用户拥有权限,请查看我写的关于如何正确执行此操作的指南。

于 2018-05-03T08:25:57.110 回答
0

我遇到了同样的问题,我按照以下步骤操作:

# Clone this repository
git clone https://github.com/M0Rf30/android-udev-rules.git
cd android-udev-rules
# Copy rules file
sudo cp -v 51-android.rules /etc/udev/rules.d/51-android.rules
# OR create a sym-link to the rules file - choose this option if you'd like to update your udev rules using git.
sudo ln -sf "$PWD"/51-android.rules /etc/udev/rules.d/51-android.rules
# Change file permissions
sudo chmod a+r /etc/udev/rules.d/51-android.rules
# If adbusers group already exists remove old adbusers group
groupdel adbusers
# add the adbusers group if it's doesn't already exist
sudo mkdir -p /usr/lib/sysusers.d/ && sudo cp android-udev.conf /usr/lib/sysusers.d/
sudo systemd-sysusers # (1)
# OR on Fedora:
groupadd adbusers
# Add your user to the adbusers group
sudo usermod -a -G adbusers $(whoami)
# Restart UDEV
sudo udevadm control --reload-rules
sudo service udev restart
# OR on Fedora:
sudo systemctl restart systemd-udevd.service
# Restart the ADB server
adb kill-server
# Replug your Android device and verify that USB debugging is enabled in developer options
adb devices
# You should now see your device

上述步骤在android-udev-rules上进行了描述。它对我有用。

请务必确认重新插入后将出现在手机屏幕上的对话框。

于 2020-03-09T16:36:52.053 回答
0

这让我很生气。首先,这里的一些非常古老的建议可能会破坏您的 Arch linux 系统。我不得不从救援 USB 启动以撤消规则黑客。在我的案例中,当我插入 USB 时,我无法让我的 android 提示授权主机,并且与其他人有相同的症状:

$ sudo adb devices
List of devices attached
89MY08NPA       no permissions; see [http://developer.android.com/tools/device.html]

成为root没关系。

进入你 android 的 USB 设置并确保Use USB for设置为文件传输。尽管我多年来一直在这款手机上进行 Android 开发,但由于某种原因,我的设置为无数据传输。谷歌的一些更新必须将其翻转到另一个设置。

将其设置为文件传输后,系统会提示您允许从主机进行调试并恢复正常

在此处输入图像描述

于 2022-01-10T15:35:13.393 回答
0

当您将 USB 连接到计算机时,它会询问您是否信任计算机来调试手机上的应用程序。单击是解决了问题

于 2021-03-24T16:24:47.583 回答
-1

您也可以尝试编辑位于/home/username/.android/的adb_usb.ini文件。此文件包含您要连接的设备的 ID 供应商列表。您只需在新行中添加设备的 ID 供应商(每行一个 ID)。然后重新启动 adb 服务器并重新插入您的设备。

它在 Ubuntu 12.10 上对我有用。

于 2014-09-20T07:40:48.150 回答
-1

我使用了 su 并开始工作。当我与普通用户一起使用 Jetbrains 时,我看到了这个问题,但是在 su 模式下重新启动 Jetbrains 后,我可以看到我的设备而无需执行任何操作。

我正在使用 Ubuntu 13.04 和 Jetbrains 12.1.4

于 2013-11-23T04:03:50.447 回答
-1

无论如何,我做了什么来解决这个问题(在Ubuntu上)。

  1. 定义在什么情况下我需要运行这些命令。对于大多数 ubuntu 用户来说,都有一个主文件夹(隐藏文件.bashrc)。

    在其中可以记录这些命令的启动。但是这些命令会在你bash在控制台输入命令时触发。

  2. 因为我有一个 shell .zshrc,所以我做了以下事情:

    打开控制台:gedit .zshrc

当文件打开时,添加以下行:

./.add_device_permissions.sh

之后或之前,我们需要创建这个文件:.add_device_permissions.sh我们在其中编写以下内容:

#!/bin/bash
# Add permissions
ADB="/home/vadimm/Android/Sdk/platform-tools/adb"
$ADB devices
$ADB kill-server
cat .permissions_redmi_note | sudo -S $ADB devices
$ADB kill-server
cat .permissions_redmi_note | sudo -S $ADB devices

我们还需要在需要硬编码密码的地方创建 .permissions_redmi_note。

  1. 不要添加到文件中.zshrc不必要的我们可以在启动系统时指定路径:Startup Applications Preferences

我们按下“添加”并编写我们的命令:/home/vadimm/.add_device_permissions.sh

  1. 您也可以尝试在命令行中使用下一个命令: ./adb devices ./adb kill-server sudo ./adb devices ./adb kill-server ./adb devices
于 2018-11-08T12:15:34.043 回答
-2

如果有人在使用时遇到以下错误信息adb devices

no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]

执行以下

sudo -s 
adb kill-server
adb start-server

这为我在自定义构建的 android 设备上解决了这个问题

于 2017-08-28T16:58:57.887 回答