build立设备进行开发(??????没有权限)
我正在使用三星Galaxy Nexus手机( Android 4.0平台)。
我正在Ubuntu Linux操作系统上开发Android应用程序。 我想直接在三星手机上运行我的应用程序,所以我做了以下设置步骤:
-
在我的项目AndroidManifest.xml文件中,将
android:debuggable="true"
到<application>
元素 -
在设备上, 设置>安全启用未知来源
-
在设备上, 设置>开发人员选项启用USBdebugging
-
在我的电脑上,创build文件
/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
然后,我打开一个terminal,并在我的电脑上执行命令adb devices
,我得到:
List of devices attached ???????????? no permissions
由于我没有看到我的设备,但只有“???????没有权限”,我然后运行以下命令:
adb kill-server adb start-server adb devices
但我仍然得到:
List of devices attached ???????????? no permissions
为什么? 我在想什么?
什么对我有用就是杀死并再次启动adb服务器。 在Linux上: sudo adb kill-server
然后sudo adb start-server
。 然后,它几乎可以检测到所有的设备。
没有任何工作,直到我终于在这里find答案: http : //ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html
我在这里复制文本,以防将来消失。
使用以下内容创build一个名为/tmp/android.rules的文件(hex供应商编号取自供应商列表页面):
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
replacelogin名,即id -nu
打印的内容。
在某些情况下,可能需要为udev规则文件提供一个接近结尾的名称,例如z51-android.rules
。
input以下命令:
adb kill-server
sudo ./adb start-server
adb devices
问题是你没有以root身份运行adb服务器。
试了以上,没有工作..终于工作时,我从MTP连接切换到相机(PTP)。
在Archlinux中,偶尔会发生这种情况。 修正:
$ sudo -s # adb kill-server # adb start-server
这个问题有很多不好的答案,从坚持以root
身份运行adb
(这不应该被视为唯一或甚至推荐的解决scheme)来解决完全不相关的问题。
下面是一个最简单和最普遍的方法来同时处理所有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
至于OP在他的问题上做了错误的具体事情 – 编辑.rules
文件后没有重新加载udev
规则。
OP也没有告诉他手机上有哪个Android版本(又名ROM)。 idVendor
值由软件设置,因此取决于ROM。 所以他在原来的规则中使用的04E8
的价值只适用于三星股票ROM的设备。 但是对于这个udev
规则来说,这不是一个问题 – 它将使用adb
或fastboot
接口匹配所有设备,而不pipe他们的VendorID 。
我遇到了同样的问题,解决scheme就像他一样:(顺便说一句,你不必为你的设备创build根目录)
- input“su”切换到超级用户。
- 你的path/ adb kill-server。
- 你的path/ adb启动服务器。
- 如果没有错误发生,您可以在root帐户中看到带有“your-path / adb devices”的设备列表。
- 退出超级用户。
- 现在您可以在您的帐户中执行“adb设备”。
请享用。
对于那些使用Debian的人来说,在Ubuntu下build立一个设备的指南来创build文件“/etc/udev/rules.d/51-android.rules”不起作用。 我遵循这里的指示。 放在这里作为参考。
以超级用户的身份编辑此文件
sudo nano /lib/udev/rules.d/91-permissions.rules
find类似这样的文字
# usbfs-like devices SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0664″
然后将模式更改为0666,如下所示
# usbfs-like devices SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0666″
这允许adb工作,但是我们仍然需要设置设备,以便可以识别。 我们需要以超级用户的身份创build这个文件,
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连接手机,并在编译和运行项目时检测到。
与我的Galaxy S3有同样的问题。 我的问题是,idVendor值(04E8)是不正确的。 要find合适的人,请将智能手机连接到计算机,并在terminal中写入命令
lsusb
因为我发现所有与正确的ID相连的USB设备。 您的智能手机必须有一行显示,如下所示:
Bus 002 Device 010: ID 18d1:d002 Google Inc.
在我的情况。 所以正确的idVendor价值是“18d1”。 所以/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
Everithing工作!
- 请按照http://developer.android.com/guide/developing/device.html上的说明进行操作;
- 在/etc/udev/rules.d/51-android.rules中将“0bb4”的供应商IDreplace为“18d1”。 或者添加另一行:SUBSYSTEM ==“usb”,SYSFS {idVendor} ==“18d1”,MODE =“0666”
- 重新启动计算机或只是重新启动udev服务。
我知道这可能会有点晚,但这是一个关于如何手动添加Android ADB USB驱动程序的非常好的文章。 在Ubuntu 14.04 LTS中手动添加Android ADB USB驱动程序
编辑添加链接内容
脚步
注意: 确保您已经在USBdebugging模式下连接了您的Android设备
打开terminal( CTRL + ALT + T
)并input命令: lsusb
现在你可能会得到类似的回复:
Bus 002 Device 013: ID 283b:1024
注意:参考Bus 002 Device 008: ID 283b:1024
{idVendor}==”283b” {idProduct}==”1024″
现在input以下命令: sudo gedit /etc/udev/rules.d/51-android.rules
这将创buildandroid规则文件( 51-android.rules
)或打开指定位置( /etc/udev/rules.d
)中的现有文件
添加一个新行到这个文件:
SUBSYSTEM==”usb”, ATTRS{idVendor}==”283b”, ATTRS{idProduct}==”1024″, MODE=”0666″
注意使用您的设备值编辑idProduct
& idProduct
值。 保存并closures。
现在input以下命令:
sudo chmod a+rx /etc/udev/rules.d/51-android.rules
– 授予读取/执行权限
sudo service udev restart
– 重新启动udev
服务
现在我们必须将adb_usb.ini
添加到adb_usb.ini
。 input以下命令:
cd ~/.android
gedit adb_usb.ini
添加下面的值0x283b
这只不过是0x( idVendor
值)。 所以用这个replace值。 尊重您的设备值保存并closures文件。
现在input以下命令:
sudo service udev restart
拔出Android设备并重新连接。
现在input以下命令:
adb kill-server
adb devices
你走了! 您的设备必须列出。
从 Ubuntu 14.04 LTS手动添加Android ADB USB驱动程序 复制
为我工作。
当你重新启动udev时,杀死adb服务器并启动adb服务器转到android sdk安装path,并做所有的sudo。 然后运行adb设备将解决权限问题。
我的设备是POSITIVO,我的操作系统是Ubuntu 14.04 LTS
所以,我的问题是variables名称
我创build文件/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
没有拔掉
所有提供的答案都假定您可以拔下并重新连接USB电缆。 在不可能的情况下(例如,当你是远程的时候),你可以做下面的事情来实质上做什么build议udev规则将重新插入:
lsusb
find你关心的设备,例如:
Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus
记下它所在的公交车号码,然后执行,例如公共汽车003
:
sudo chmod a+w /dev/bus/usb/003/*
显然,这可能比你想要的更宽容(可能会有更多的设备不仅仅是这个),但你明白了。
尝试使用您的用户的主要组而不是GROUP="plugdev"
。
GitHub社区维护udev规则
https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules
这是迄今为止我见过的最完整的udev规则列表,甚至超过了目前推荐的sudo apt-get install android-tools-adb
官方文档中的 sudo apt-get install android-tools-adb
,请试试看。
在我的情况下,Ubuntu的12.04 LTS,我不得不改变我的macros达不可思议的USB模式从收费媒体,然后设备出现在亚行。 当然,在这两种情况下都已经进行了debugging。
我用苏,它开始工作。 当我用普通用户使用Jetbrains时,我发现这个问题,但在Su模式下重新启动Jetbrains后,我可以看到我的设备没有任何操作。
我使用Ubuntu 13.04和Jetbrains 12.1.4
如上所述,问题是由于没有使用root权限运行adb引起的。
我想添加我的解决scheme,运行与Android Studio 0.8.2的Ubuntu 12.04的问题。 这也将告诉你如何打开android studio没有input完整的path:
首先,通过编辑.bashrc文件将android-studio / bin添加到PATH中。
cd ~/ gedit .bashrc //add the below line withing your .bashrc file, I prefer you to put it at the //very bottom HOME=$HOME:~/<android-studio>/bin //save file, exit terminal, open new terminal studio.sh // will now open android studio from any directory in terminal
这将允许您从terminal内的任何目录中使用studio.sh命令运行程序。 但是,这不会允许你从任何目录terminal内运行sudo! 这将我们带回到我们的主要问题。 为此,我们需要编辑我们的/ etc / sudoers文件。
cd /etc sudo gedit sudoers //edit the secure_path="" to include /home/<your-username>/<android-studio>/bin //save file, exit terminal, open new terminal gksudo studio.sh // will now open android studio as root from any direcotry in terminal // I use gksudo rather than sudo when opening a graphical program
现在,adb以root身份运行,您的计算机将识别您的连接设备。 你可以从任何目录启动程序。 这只是我解决问题的方式,我以为我会分享。
您也可以尝试编辑位于/home/username/.android/的 adb_usb.ini文件。 该文件包含您想要连接的设备的供应商列表。 您只需将您的设备的ID供应商添加到新行(每行一个ID)。 然后重新启动adb服务器并重新插入设备。
它在Ubuntu 12.10上为我工作。
如果任何人在使用adb devices
时遇到以下错误消息
no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]
执行以下操作
sudo -s adb kill-server adb start-server
这解决了我的问题在自定义生成Android设备
就像Debian去的那样,我使用了Kali做了以上的事情。 chown命令和重新启动后,我失去了我的笔记本电脑和外部键盘/鼠标的使用。 双引导Ubuntu Studio,我启动到,装载Debian分区,打开terminal和
sudo su rm path / to / all.android.rules
都在/ libs / udev中…和/ etc / udev和
gedit /lib/udev/rules.d/91-permissions.rules
并切换回来
类似usbfs的设备
SUBSYSTEM ==“usb”,ENV {DEVTYPE} ==“usb_device”,\ MODE =“0666”
重新启动,所有键盘/鼠标再次工作。 此外,重新启动回到Kali / Debian没有android.rules和“正常”91-permission.rules和…
adb设备
像它应该的工作 – 与权限等。我仍然有我的非root用户在plugdev组。 在$ PATH中有adbpath。 在/ home / user / andy / sdk / platform-tools /
希望这可以帮助遇到这种情况的人。