设置设备进行开发(????????????没有权限)


282

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

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

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

  2. 在设备上的“设置”>“启用安全性的未知来源”中

  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

为什么?我想念什么?


执行adb kill-server之后,您是否得到了*守护程序未运行的消息。从现在开始它在端口5037 * *成功启动守护* ---如果不尝试它,直到u得到这条消息
穿心莲内酯塞尔瓦

2
尝试检查您的用户是否在plugdev组中。
谢尔盖·格洛托夫

2
运行=> sudo adb启动服务器(使用root访问权限运行adb)
困惑的

Answers:


450

对我有用的是再次杀死并启动adb服务器。在linux上:sudo adb kill-server然后sudo adb start-server。然后它将检测出几乎所有开箱即用的设备。


1
我使用root来执行<android-SDK> / platform-tool /下的命令“ adb devices”,我得到“找不到命令'adb'”,为什么?
Leem.fin

8
确保您的adb获得+ x -rwxrwxr-x 1 martin martin 156K 2011-11-09 15:40 adb。尝试直接移动到目录并通过“ sudo ./adb设备”启动。如果您可以在不使用sudo的情况下运行它,那么您应该可以在使用sudo的情况下运行它...我不确定您的问题可能是...
WarrenFaith 2012年

8
如果udev权限设置正确,则无需以root用户身份运行adb。请参阅下面的grebulons答案,或参考android文档:developer.android.com/tools/device.html
gnac 2013年

4
一个重要的建议是断开USB电缆,因此您可以重置adb,连接电缆,然后它就可以工作了。在我的情况下,虽然我在连接电缆的情况下执行了该步骤,但对我来说不起作用。
androidevil

6
命令是:adb kill-server sudo adb start-server检查:adb devices
Asim 2014年

350

在我终于在这里找到答案之前,对我没有任何帮助: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$LOGINNAMEid -nu

在某些情况下,可能有必要给udev规则文件一个名称,该名称的排序应紧靠结尾,例如z51-android.rules


7
注意:对于Ubuntu Precise,文件名70-android.rules如下:esausilva.com/2010/05/13/…。也让我们知道您必须重新启动udev并终止所有adb进程的荣誉。像魅力一样工作!
爱德华·卢卡


4
这工作得很好,但是,如@luciana在另一个答案中指出的那样,sudo udevadm control --reload-rules如果重启服务器还不够,您可能需要调用以刷新udev规则。
serjlee 2014年

4
应该将其标记为正确答案,因为sudo-ing adb对Linux而言不是必需的
Zac

1
这是这里唯一正确的答案。谢谢你!另外,我们可以看到lsusb输出,以确保其中包含必需的供应商。最奇怪的是,升级到Android 7.1.2(即使以root身份运行adb)后,只有我的其中一台设备(OnePlus One)突然停止工作,如上所述添加了udev规则后,它又可以工作了。
user1209216

77

输入以下命令:

adb kill-server sudo ./adb start-server adb devices

问题是您没有以root用户身份运行adb服务器。


4
尽管该想法与接受的答案中的想法相同,但是由于提供了示例,该想法仅对我有所帮助。谢谢
user907860

1
@ user907860,它实际上比接受的答案要好,因为它解释了为什么您应该编写sudo:)(当我看到接受的答案时我没有这样做)
stan0 2015年

顺便说一下,为什么adb应该以root身份运行?
stan0 2015年

抱歉,不,我不记得了
iancrowther

2
adb不应以root用户身份运行。如果需要这样做,则系统配置错误。不要再在所有事物前抛出“ sudo”,这将对安全产生巨大的影响。
hackel 2015年

55

经过以上所有尝试,当我将连接从MTP切换到Camera(PTP)时,任何方法都无法正常工作。


3
对于那些想知道如何执行此操作的人...系统设置>存储>右上按钮:USB计算机连接>连接为选择相机(PTP)而不是媒体设备(MTP)
Thaddeus Albers 2015年

3
男人,我一直在寻找两个小时的解决方案,在Ubuntu 16.04上对我
有用

这应该是要检查的第一件事。为我工作
m50

32

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

这是同时处理所有人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他在原始规则中使用的价值仅适用于带有Samsung stock ROM的设备。但这不是此udev规则的问题-它将匹配具有adbfastboot接口的所有设备,而不管其VendorID如何。


看到它正常工作的唯一缺少步骤是在adb设备之前使用adb kill-server。
mstrange '17

1
这似乎在Android 8.1上不再有效。您是如何找到哪些adb报告为设备ID的?
Cachapa '18年

在Android 7.1.2上为我工作
Amerzilla '18

@Cachapa,它适用于所有Android版本。即使是最新的(在我写这篇文章的时候)的Android P预览4使用相同的亚行接口ID - android.googlesource.com/platform/system/core/+/...
亚历克斯P.


16

在Archlinux中,这种情况可能偶尔发生。解决方法:

$ sudo -s
# adb kill-server
# adb start-server

我不确定这是否是使它起作用的唯一方法...我尝试了上述方法。但是没有在VBox上发布此帖子,也没有使我的LG G3获得授权。谢谢基南
lastboy

我不知道为什么,但是sudo adb kill-server; sudo adb start-server没有用,但是这个没用。
Hritik

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连接电话,在编译和运行项目时应将其检测到。


5

我遇到了同样的问题,解决方案与其他伙伴相同:(顺便说一下,您不必植根设备。)

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

请享用。


1
如果您无法使用登录su,请使用sudo su。是的 而且,如果您不知道如何退出用户,请使用exit
Pijusn

4

我知道这可能会晚一点,但是这是一篇有关如何手动添加Android ADB USB驱动程序的很好的文章。在Ubuntu 14.04 LTS中手动添加Android ADB USB驱动程序

编辑以添加链接内容

脚步

注意: 确保已在USB调试模式下连接Android设备

打开终端(CTRL + ALT + T)并输入命令: lsusb

现在您可能会收到类似的回复:
Bus 002 Device 013: ID 283b:1024

注意: 参考此Bus 002 Device 008: ID 283b:1024
{idVendor}==”283b” {idProduct}==”1024″

现在输入以下命令: sudo gedit /etc/udev/rules.d/51-android.rules
这将创建android规则文件(51-android.rules)或在指定位置(/etc/udev/rules.d)打开现有的规则文件

在此文件中添加新行:
SUBSYSTEM==”usb”, ATTRS{idVendor}==”283b”, ATTRS{idProduct}==”1024″, MODE=”0666″

注意使用设备值编辑idVendoridProduct值。保存并关闭。

现在输入以下命令:
sudo chmod a+rx /etc/udev/rules.d/51-android.rules-授予读取/执行权限
sudo service udev restart-重新启动udev服务

现在,我们必须将添加idVendoradb_usb.ini。输入以下命令:
cd ~/.android
gedit adb_usb.ini

添加以下值 0x283b

这不过是0x(idVendor值)。因此,将其替换为。尊重您的设备价值保存并关闭文件。

现在输入以下命令:
sudo service udev restart

拔出Android设备,然后重新连接。
现在输入以下命令:
adb kill-server
adb devices

你去!您的设备必须列出。

在Ubuntu 14.04 LTS中手动添加Android ADB USB驱动程序复制而来

为我工作。


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,一切正常!


1
您可能是说:ATTR{idVendor}=="18d1"
Tanasis

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 官方文档中当前推荐的列表还要多,它为我解决了这个问题。


1
当一条规则适用于所有人时,为什么还要烦恼“维护列表”?stackoverflow.com/a/45006231/1778421
Alex P.

@AlexP。谢谢,我不知道那种方法。知道为什么官方指南不建议这样做吗?
西罗Santilli郝海东冠状病六四事件法轮功

主要是由于懒惰和知识惯性。最初的Android开发人员使用具有相同供应商ID的设备,因此他们采用了他们能想到的最简单的方法。当更多的供应商创建更多的设备时,开发人员只是不断向规则文件添加更多ID。
Alex P.


1

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


1

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

我创建文件/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

1

无需拔出

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

lsusb

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

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

记下已打开的总线号,然后执行,例如对于bus 003

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

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


要应用新udev规则而无需重新连接设备,只需使用udevadm trigger --verbose --action=add --subsystem-match=usb命令。
Alex P.

1

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

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

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

    # usermod -aG adbusers $LOGNAME

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


0

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


我正在使用我的用户名,这无济于事
Leem.fin

0

就ubuntu 12.04 LTS而言,我不得不将HTC Incredible usb模式从Charge更改为Media,然后该设备显示在adb下。当然,两种情况下都已经进行了调试。


0

不要遵循建议使用sudosudo adb start-server)的解决方案!这以根用户(管理员)身份运行adb,而不应该那样运行!!!这是一个坏的解决方法

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

做正确的事情是设置系统使用户具有的权限,请查看本指南中我写了一篇关于如何正确地做到这一点。


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中进行了描述。它为我工作。

只需确认重新插入后会在手机屏幕上显示的对话框即可。


-1

我用了su,它开始起作用。当我与普通用户一起使用Jetbrains时,我看到了此问题,但是在su模式下重新启动Jetbrains后,我却看不到任何设备。

我正在使用Ubuntu 13.04和Jetbrains 12.1.4


-1

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

它在Ubuntu 12.10上对我有用。


-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

-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设备上解决了这个问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.