首页 文章

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

提问于
浏览
262

我正在使用三星galaxy nexus手机( Android 4.0 平台) .

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

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

  • 在设备上, Settings > Security 已启用 Unknown sources

  • 在设备上, Settings > Developer options 已启用 USB debugging

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

SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev"
  • 在我的计算机上,运行 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

为什么?我错过了什么?

23 回答

  • 75

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

    • 键入"su"以切换到超级用户 .

    • your-path / adb kill-server .

    • your-path / adb start-server .

    • 如果没有发生错误,您可以在root帐户中看到带有"your-path/adb devices"的设备列表 .

    • 退出超级用户 .

    • 现在您可以在帐户中执行"adb devices" .

    请享用 .

  • 1

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

  • 0

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

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

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

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

  • 22

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

  • 15

    在我终于找到答案之前,没有什么对我有用: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 以确认现在它有权访问手机 .

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

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

  • 4

    我知道这可能有点晚了但是这篇关于如何手动添加Android ADB USB驱动程序的文章非常好 . Manually adding Android ADB USB driver in Ubuntu 14.04 LTS

    Edited to Add Link Content

    步骤

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

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

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

    Note: 参考此 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″

    Note 使用您的设备值修改 idVendoridProduct 值 . 保存并关闭 .

    现在输入以下命令:
    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

    添加以下值 0x283b

    这只是0x( idVendor value) . 所以用 . 替换值 . 尊重您的设备值保存并关闭文件 .

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

    拔出Android设备并重新连接 .
    现在输入以下命令:
    adb kill-server
    adb devices

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

    Copied From Manually adding Android ADB USB driver in Ubuntu 14.04 LTS

    为我工作 .

  • 425
    • 按照http://developer.android.com/guide/developing/device.html的说明操作

    • 在/etc/udev/rules.d/51-android.rules中将供应商ID“0bb4”替换为“18d1” . 或者添加另一行:SUBSYSTEM == "usb",SYSFS == "18d1",MODE = "0666"

    • 重启计算机或只是重启udev服务 .

  • 46

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

  • -1

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

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

    执行以下操作

    sudo -s 
    adb kill-server
    adb start-server
    

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

  • -1

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

    我使用的是Ubuntu 13.04和Jetbrains 12.1.4

  • 3

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

    • 使用Pacman安装 android-udev

    • 重新加载udev规则:

    # udevadm control --reload-rules
    
    • 将自己添加到 adbusers 组,然后注销并登录:
    # usermod -aG adbusers $LOGNAME
    

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

  • 1

    输入以下命令:

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

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

  • 2

    我和我有同样的问题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 ,一切正常!

  • 7

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

  • -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
    
  • 329

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

  • -2

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

  • -1

    GitHub community maintained udev-rules

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

    这是迄今为止我见过的最完整的udev规则列表,甚至超过了目前推荐的 sudo apt-get install android-tools-adb on the official documentation,试一试 .

  • 1

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

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

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

    • 因为我有一个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,我们需要对密码进行硬编码 .

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

    在哪里按"Add"并写下我们的命令: /home/vadimm/.add_device_permissions.sh

    • 也可以尝试在命令行中使用下一个命令: ./adb devices ./adb kill-server sudo ./adb devices ./adb kill-server ./adb devices
  • 5

    DO NOT follow solutions suggesting to use sudosudo adb start-server )!这运行adb作为root(管理员),它不应该像那样运行! It's a BAD workaround

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

    right thing to do 设置了你的系统以使用户拥有权限,请查看this guide我写了如何正确地做到这一点 .

  • 1

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

    它在Ubuntu 12.10上对我有用 .

  • 0

    没有拔掉插头

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

    lsusb
    

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

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

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

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

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

相关问题