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

我使用的是三星galaxy nexus手机(Android 4.0平台)。

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

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

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

  3. 在设备上,在Settings > Developer options enabled USB debugging

  4. 在我的计算机上,创建了/etc/udev/rules.d/51-android.rules文件,内容如下:

    SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev"
    
  5. On my computer, run the chmod a+r /etc/udev/rules.d/51-android.rules command

Then, on my computer I opened a terminal and executed the adb devices command, I got:

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

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

 adb kill-server
adb start-server
adb devices

但我还是有:

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

为什么?我错过了什么?

222214 次浏览

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

对我来说有效的方法是关闭并重新启动adb服务器。在linux上:sudo adb kill-server,然后sudo adb start-server。然后,它将检测出几乎所有开箱即用的设备。

当你重启udev时,关闭adb服务器启动adb服务器goto android SDK安装路径&在sudo上做所有的事情。然后运行adb设备即可解决权限问题。

输入如下命令:

# 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.
在我最终找到答案之前,我什么都不做: http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html < / p >

我把这段文字复制在这里,以防将来它会消失。

创建一个名为/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确认现在它有权限访问电话。

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

在某些情况下,可能需要给udev规则文件一个接近末尾的排序名称,例如z51-android.rules

我也遇到过同样的问题,解决方法是:(顺便说一下,你不需要在你的设备上安装root。)

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

享受。

  1. 按照http://developer.android.com/guide/developing/device.html(归档链接)的说明操作
  2. 0bb4的供应商id替换为/etc/udev/rules.d/51-android.rules中的18d1

    或者再加一行:

    SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
    
  3. Restart computer or just restart udev service.

对于那些使用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连接手机,当你编译和运行一个项目时,它应该被检测到。

在我使用ubuntu 12.04 LTS的情况下,我不得不将HTC Incredible usb模式从充电模式更改为媒体模式,然后设备显示在adb模式下。当然,在这两种情况下,调试都已经打开。

我用su,它开始工作了。当我与普通用户一起使用Jetbrains时,我看到了这个问题,但在su模式下重新启动Jetbrains后,我可以看到我的设备而不做任何事情。

我使用的是Ubuntu 13.04和Jetbrains 12.1.4

我的Galaxy S3也有同样的问题。 我的问题是idVendor04E8不是正确的。 要找到正确的一个连接你的智能手机到电脑,并在终端运行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,一切工作!

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

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

I断开设备连接 和执行:< / p >

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

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

$ adb devices


List of devices attached
1A883XB1K   device

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

它在Ubuntu 12.10上对我有效。

在Archlinux中,这种情况偶尔会发生。解决办法:

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

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

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

编辑添加链接内容

步骤

注意: 确保您已经在USB调试中连接了Android设备模式

打开终端(CTRL + ALT + T),输入命令: lsusb < / p > 现在你可能会得到类似的回复:
Bus 002 Device 013: ID 283b:1024 < / p >

<强>注意: 对于这个Bus 002 Device 008: ID 283b:1024
. b0 <代码> {idVendor} = = b“283” {idProduct} = = " 1024 " < /代码> < / p >

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

中打开现有的android规则文件

在这个文件中添加一个新的行:
SUBSYSTEM==”usb”, ATTRS{idVendor}==”283b”, ATTRS{idProduct}==”1024″, MODE=”0666″ < / p >

请注意编辑idVendor &idProduct值与您的设备值。

.

.

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

现在我们必须将idVendor添加到adb_usb.ini中。输入如下命令:
.使用实例 cd ~/.android
gedit adb_usb.ini < / p >

增加如下值 0x283b < / p > 这只是0x(idVendor值)。将值替换为。尊重你的设备价值

. sh

. sh

现在输入以下命令 sudo service udev restart < / p >

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

好了!必须列出您的设备。

抄袭 在Ubuntu 14.04 LTS中手动添加Android ADB USB驱动

为我工作。

没有拔掉

所有提供的答案都假设您能够拔下并重新连接USB线。在这种情况下,这是不可能的(例如,当你是远程的),你可以做下面的事情,基本上做建议的udev规则将在重新插入:

lsusb

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

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

注意它所在的总线号,然后执行,例如,对于总线003:

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

显然,这可能比您想要的更宽松(可能有更多的设备连接,而不仅仅是这一个),但您可以理解。

这个问题有很多糟糕的答案,从坚持将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在他的问题中做错的具体事情——它没有在编辑.rules文件后重新加载udev规则。

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

如果任何人在使用adb devices时面临以下错误消息

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

执行以下操作

sudo -s
adb kill-server
adb start-server

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

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

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

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

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

  1. 使用Pacman安装android-udev
  2. 重载udev规则:

    # udevadm control --reload-rules
    
  3. Add yourself to adbusers group and then logout and login:

    # usermod -aG adbusers $LOGNAME
    

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

不遵循解决方案建议使用sudo (sudo adb start-server)!这运行adb作为根(管理员),它不应该像那样运行!!这是一个糟糕的解决方案 !

任何以root身份运行的东西都可以在系统中做任何事情,如果它创建或修改一个文件,可以将其权限更改为仅供root使用。再次,不要!

做正确的事是设置你的系统使USER有权限,检查本指南我写的关于如何正确地做它。

无论如何,我所做的解决这个问题(在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

我们按下“Add”并写入命令:/home/vadimm/.add_device_permissions.sh

  1. 也可以在命令行下一个命令中尝试使用: 亚行。/设备 亚行kill-server。/ Sudo ./adb设备 亚行kill-server。/ 亚行。/设备 李< /代码> < / >

我也遇到了同样的问题,我采取了以下步骤:

# 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中描述。这对我很管用。

只要确认将出现在您的手机屏幕上的对话框后,重新插上它。

sudo usermod -aG plugdev $LOGNAME

这个命令对我很管用

仅适用于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

当你将usb连接到电脑时,它会询问你是否信任电脑来调试手机上的应用程序。单击“是”就解决了问题

这快把我逼疯了。首先,这里的一些老建议会让你的arch linux系统变砖。我不得不从备用USB启动来撤销规则破解。在我的一个案例中,我无法让我的android在插入USB时提示授权主机,并且有和其他人一样的症状:

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

身为根并不重要。

进入android的USB设置,确保Use USB for设置为文件传输。由于某种原因,我的手机被设置为没有数据传输,尽管我已经在这款手机上做了多年的android开发工作。一定是谷歌的某些更新将其翻转到另一个设置。

一旦将其设置为文件传输,就会提示允许从主机调试并恢复正常

enter image description here

我尝试了上述的一些解决方案:

  • 重启adb服务器
  • 修改51-android.rules
  • 把我自己加入adbusers组

它成功过一次。设备要求我授权PC,之后,一切正常。

问题是当我尝试在PC重启后连接设备时,再次出现同样的问题。 为了克服这个问题,我不得不手动撤销Settings->Developer Options->USB debugging authorizations,然后设备再次要求我授权PC,因此最终工作了 还有一次,前面提到的撤销USB调试授权的解决方案不起作用,为了触发设备的身份验证,我不得不手动禁用/启用 SettingsDeveloper optionsUSB debugging < / p >

我使用的是ubuntu 20.04LTS。

如果你使用的是debian,比如Ubuntu, deepin等,你可以尝试运行

sudo apt-get install android-sdk-platform-tools-common

瞧,你的问题解决了