设置开发设备(????????????无权限)

时间:2012-02-09 11:35:40

标签: android linux ubuntu adb fastboot

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

我正在Ubuntu linux OS上开发Android应用程序。我想直接在Samsung手机设备上运行我的应用程序,因此我执行了以下设置步骤:

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

  2. 在设备上,设置&gt;安全性已启用未知来源

  3. 在设备上,设置&gt;开发人员选项已启用 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命令

  6. 然后,在我的计算机上,我打开了一个终端并执行了adb devices命令,我得到了:

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

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

     adb kill-server
     adb start-server
     adb devices
    

    但我还是得到了:

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

    为什么呢?我错过了什么?

26 个答案:

答案 0 :(得分:432)

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

答案 1 :(得分:337)

在我终于找到答案之前,没有什么对我有用: 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

答案 2 :(得分:76)

输入以下命令:

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

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

答案 3 :(得分:50)

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

答案 4 :(得分:28)

这个问题有很多不好的答案,包括坚持将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

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

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

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

答案 5 :(得分:16)

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

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

答案 6 :(得分:8)

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

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

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连接手机,编译和运行项目时应检测到它。

答案 7 :(得分:5)

我有同样的问题,解决方案就是同伴:(顺便说一下,你不必根设备。)

  1. 输入“su”切换到超级用户。
  2. your-path / adb kill-server。
  3. your-path / adb start-server。
  4. 如果没有发生错误,您可以在root帐户中看到设备列表中包含“your-path / adb devices”。
  5. 退出超级用户。
  6. 现在,您可以在帐户中执行“adb设备”。
  7. 享受。

答案 8 :(得分: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,一切正常!

答案 9 :(得分:2)

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

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

这是我迄今为止看到的最完整的udev规则列表,甚至超过了目前推荐的sudo apt-get install android-tools-adb on the official documentation,它为我解决了这个问题。

答案 10 :(得分:2)

  1. 按照http://developer.android.com/guide/developing/device.html
  2. 上的说明操作
  3. 在/etc/udev/rules.d/51-android.rules中将“0bb4”的供应商ID替换为“18d1”。 或者添加另一行:     SUBSYSTEM ==“usb”,SYSFS {idVendor} ==“18d1”,MODE =“0666”
  4. 重新启动计算机或只是重新启动udev服务。

答案 11 :(得分:1)

当你重启udev时,杀死adb服务器&amp;启动adb服务器goto android sdk安装路径&amp;在sudo做所有事情。然后运行adb设备它将解决权限问题。

答案 12 :(得分:1)

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

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

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

    # usermod -aG adbusers $LOGNAME
    
  4. 来源:https://wiki.archlinux.org/index.php/android#Configuring_adb

答案 13 :(得分:1)

不拔掉

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

lsusb

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

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

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

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

显然,这可能比你想要的更宽松(可能有更多的设备连接而不仅仅是这个),但你明白了。

答案 14 :(得分: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

答案 15 :(得分:0)

尝试代替GROUP="plugdev"使用您用户的主要群组。

答案 16 :(得分:0)

请勿关注建议使用sudo sudo adb start-server)的解决方案!这运行adb作为root(管理员),它不应该像那样运行! 这是一个不好的解决方法

以root身份运行的所有内容都可以在您的系统中执行任何操作,如果创建或修改文件,则可以将其权限更改为仅供root用户使用。同样,DON&#39; T!

正确的事情是设置您的系统以使USER获得权限,请查看this guide我写的如何正确地执行此操作。

答案 17 :(得分: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中进行了描述。它对我有用。

只要确保在重新插入电话后确认出现在电话屏幕上的对话框即可。

答案 18 :(得分:0)

sudo usermod -aG plugdev $LOGNAME

此命令对我有用

答案 19 :(得分:0)

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

答案 20 :(得分:0)

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

答案 21 :(得分:-1)

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

在Ubuntu 12.10上它对我有用。

答案 22 :(得分:-1)

我用了su,它开始工作了。当我和常规用户一起使用Jetbrains时,我看到了这个问题但是在su模式下重启Jetbrains后,我可以看到我的设备没有做任何事情。

我正在使用Ubuntu 13.04和Jetbrains 12.1.4

答案 23 :(得分:-1)

在我的ubuntu 12.04 LTS的情况下,我不得不将我的HTC Incredible usb模式从充电更改为Media,然后设备出现在adb下。当然,两种情况下调试都已经开启。

答案 24 :(得分:-1)

无论如何,我为解决此问题所做的工作(在 Ubuntu 上)。

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

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

  2. 因为我有一个.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

答案 25 :(得分:-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设备上的问题