我正在使用三星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 回答
我有同样的问题,解决方案是同伴:(顺便说一句,你不必根设备 . )
键入"su"以切换到超级用户 .
your-path / adb kill-server .
your-path / adb start-server .
如果没有发生错误,您可以在root帐户中看到带有"your-path/adb devices"的设备列表 .
退出超级用户 .
现在您可以在帐户中执行"adb devices" .
请享用 .
对我有用的是再次杀死并启动adb服务器 . 在linux上:
sudo adb kill-server
然后sudo adb start-server
. 然后它将检测几乎所有开箱即用的设备 .在Archlinux中偶尔会发生这种情况 . 修复:
这个问题有很多不好的答案,从坚持运行
adb
作为root
(不应该被吹捧为唯一或甚至推荐的解决方案)来解决完全不相关的问题 .以下是同时处理所有adb和fastboot设备权限的最短且最通用的方法:
或者你可以使用我发布到gist稍长的版本 .
至于OP在他的问题中做错的具体事情 - 在编辑
.rules
文件后没有重新加载udev
规则 .OP也没有告诉他手机上有哪个Android版本(又称ROM) .
idVendor
值在软件中设置,因此取决于ROM . 因此,他在原始规则中使用的04E8
的值仅适用于具有三星股票ROM的设备 . 但这不是这个udev
规则的问题 - 它匹配所有具有adb
或fastboot
接口的设备,无论其VendorID如何 .尝试以上所有,没有工作..当我从MTP切换到相机(PTP)时终于工作了 .
在我终于找到答案之前,没有什么对我有用:http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html
我正在复制这里的文字,以防它将来消失 .
使用以下内容创建名为/tmp/android.rules的文件(十六进制供应商编号来自供应商列表页面):
运行以下命令:
断开手机和计算机之间的USB电缆 .
重新连接手机 .
运行
adb devices
以确认现在它有权访问手机 .请注意,可以在
.rules
文件中使用, USER="$LOGINNAME"
而不是, MODE="0666"
,用$LOGINNAME
替换您的登录名,即id -nu
打印 .在某些情况下,可能需要为udev规则文件提供一个靠近末尾排序的名称,例如
z51-android.rules
.我知道这可能有点晚了但是这篇关于如何手动添加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 使用您的设备值修改
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
添加以下值
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
为我工作 .
按照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服务 .
在我的ubuntu 12.04 LTS的情况下,我不得不将我的HTC Incredible usb模式从充电改为Media,然后设备出现在adb下 . 当然,在两种情况下都已经进行了调试 .
如果有人在使用
adb devices
时面临以下错误消息执行以下操作
这解决了我在自定义构建Android设备上的问题
我用su,它开始工作了 . 当我与常规用户一起使用Jetbrains时,我看到了这个问题但是在su模式下重新启动Jetbrains后,我可以看到我的设备没有做任何事情 .
我使用的是Ubuntu 13.04和Jetbrains 12.1.4
您不应该像其他答案所建议的那样以root身份运行
adb
server . 相反,如果您使用的是Arch Linux,请执行以下操作:使用Pacman安装
android-udev
包重新加载udev规则:
adbusers
组,然后注销并登录:资料来源:https://wiki.archlinux.org/index.php/android#Configuring_adb
输入以下命令:
adb kill-server
sudo ./adb start-server
adb devices
问题是您没有以root身份运行adb服务器 .
我和我有同样的问题Galaxy S3 . 我的问题是
idVendor
值04E8
不是正确的 . 要找到合适的人,请将智能手机连接到计算机并在终端中运行lsusb
. 它会列出你的智能手机:所以正确的
idVendor
值是18d1
. 并且/etc/udev/rules.d/51-android.rules
中的行必须是:然后我运行
sudo udevadm control --reload-rules
,一切正常!对于那些使用debian的用户,在Ubuntu下设置设备以创建文件"/etc/udev/rules.d/51-android.rules"的指南不起作用 . 我按照here的说明进行操作 . 在此处放下相同内容以供参考 .
以超级用户身份编辑此文件
找到与此类似的文字
然后将模式更改为0666,如下所示
这允许adb工作,但是我们仍然需要设置设备以便识别它 . 我们需要以超级用户身份创建此文件,
并输入
以上行是针对HTC的,请关注@ grebulon的帖子以获取完整列表 .
保存文件,然后以超级用户身份重新启动udev
通过USB连接手机,编译和运行项目时应检测到它 .
我的设备是POSITIVO,我的操作系统是
Ubuntu 14.04 LTS
所以,我的问题是变量名我创建文件/etc/udev/rules.d/51-android.rules并放入
SUBSYSTEM=="usb", SYSFS{idVendor}=="1662", MODE="0666"
我断开了设备并执行:
在此之后我再次以开发者模式连接Android设备
当你重新启动udev时,杀死adb服务器并启动adb服务器转到android sdk安装路径并在sudo上执行所有操作 . 然后运行adb设备它将解决权限问题 .
尝试使用您的用户的主要组而不是
GROUP="plugdev"
.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,试一试 .无论如何,我做了什么来解决这个问题(在 Ubuntu 上) .
.bashrc
) .您可以在其中记录这些命令的启动 . 但是,当您在控制台中输入
bash
命令时,将触发这些命令 .打开控制台:
gedit .zshrc
文件打开后,添加以下行:
之后或之前,我们需要创建此文件:
.add_device_permissions.sh
,其中我们编写以下内容:我们还需要创建.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
请 DO NOT follow solutions suggesting to use sudo (
sudo adb start-server
)!这运行adb作为root(管理员),它不应该像那样运行! It's a BAD workaround !以root身份运行的所有内容都可以在您的系统中执行任何操作,如果它创建或修改文件,则可以将其权限更改为仅由root用户使用 . 再说一遍,不要!
right thing to do 设置了你的系统以使用户拥有权限,请查看this guide我写了如何正确地做到这一点 .
您也可以尝试编辑位于/home/username/.android/的adb_usb.ini文件 . 此文件包含要连接的设备的ID供应商列表 . 您只需在每行添加一个设备's id vendor in new line (it'一个ID . 然后重新启动adb服务器并重新插入您的设备 .
它在Ubuntu 12.10上对我有用 .
没有拔掉插头
所有提供的答案都假设您可以拔下并重新连接USB电缆 . 在无法做到这一点的情况下(例如,当您处于远程状态时),您可以执行以下操作以基本上执行建议的udev规则在重新插入时执行的操作:
找到你的设备关心,例如:
记下它所在的总线编号然后执行,例如 Bus
003
:显然,这可能比你想要的更宽松(可能有更多的设备连接而不仅仅是这个),但你明白了 .