我使用的是三星galaxy nexus手机( Android 4.0 平台)。
我正在Ubuntu linux OS上开发Android应用程序。我想直接在Samsung手机设备上运行我的应用程序,因此我执行了以下设置步骤:
在我的项目AndroidManifest.xml
文件中,将android:debuggable="true"
添加到<application>
元素
在设备上,设置&gt;安全性已启用未知来源
在设备上,设置&gt;开发人员选项已启用 USB调试
在我的计算机上,创建了包含以下内容的/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
为什么呢?我错过了什么?
答案 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
(不应该被吹捧为唯一或甚至推荐的解决方案)来解决完全不相关的问题。
以下是同时处理所有adb
和fastboot
设备权限的最短且最通用的方法:
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
规则的问题 - 它会匹配具有adb
或fastboot
接口的所有设备,无论其 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的帖子以获取完整列表。
保存文件,然后以超级用户
重新启动udevsudo /etc/init.d/udev restart
通过USB连接手机,编译和运行项目时应检测到它。
答案 7 :(得分:5)
我有同样的问题,解决方案就是同伴:(顺便说一下,你不必根设备。)
享受。
答案 8 :(得分: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
,一切正常!
答案 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)
答案 11 :(得分:1)
当你重启udev时,杀死adb服务器&amp;启动adb服务器goto android sdk安装路径&amp;在sudo做所有事情。然后运行adb设备它将解决权限问题。
答案 12 :(得分:1)
您不应该像其他答案所建议的那样以root身份运行adb
服务器。相反,如果您使用的是Arch Linux,请执行以下操作:
android-udev
包重新加载udev规则:
# udevadm control --reload-rules
将您自己添加到adbusers
组,然后退出并登录:
# usermod -aG adbusers $LOGNAME
来源: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 上)。
定义了在什么情况下我需要运行这些命令。对于大多数ubuntu用户,都有一个主文件夹(隐藏文件.bashrc
)。
您可以在其中记录这些命令的启动。但是,当您在控制台中输入bash
命令时,将触发这些命令。
因为我有一个.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
在我们按下“添加”的位置并编写命令:/home/vadimm/.add_device_permissions.sh
./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设备上的问题