启用安全性未知......" /> 启用安全性未知......"> 启用安全性未知......" />
我正在使用三星 Galaxy Nexus 手机(Android 4.0 平台)。
我正在 Ubuntu linux 操作系统上开发 Android 应用程序。我想直接在三星手机设备上运行我的应用程序,所以我执行了以下设置步骤:
在我的项目 AndroidManifest.xml 文件中,将 android:debuggable="true" 添加到
然后,在我的电脑上打开终端并执行 adb devices
命令,我得到:
List of devices attached
???????????? no permissions
由于我没有看到我的设备,而只有 ???????????? no permissions
,因此我运行以下命令:
adb kill-server
adb start-server
adb devices
但我仍然得到:
List of devices attached
???????????? no permissions
为什么?我错过了什么?
plugdev
组中。
对我有用的是再次杀死并启动 adb 服务器。在 Linux 上:sudo adb kill-server
,然后是 sudo adb start-server
。然后它将检测到几乎所有开箱即用的设备。
在我终于在这里找到答案之前,没有什么对我有用: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
。
70-android.rules
,根据这篇文章:esausilva.com/2010/05/13/…。还要感谢您让我们知道您必须重新启动 udev
并终止所有 adb 进程。像魅力一样工作!
sudo udevadm control --reload-rules
来刷新 udev 规则。
输入以下命令:
# cd to adb for sudo
cd `which adb | sed -e "s/adb//"`
adb kill-server
sudo ./adb start-server
./adb devices
This happens when you are not running adb server as root.
以上都试过了,没有一个工作..当我从MTP切换到相机(PTP)时终于工作了。
这个问题有很多不好的答案,从坚持将 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 在他的问题中做错的具体事情 - 在编辑 .rules
文件后没有重新加载 udev
规则。
OP 也没有告诉他手机上有哪个 Android 版本(又名 ROM)。 idVendor
值是在软件中设置的,因此它取决于 ROM。因此,他在原始规则中使用的 04E8
的值仅适用于具有三星库存 ROM 的设备。但这对于这条 udev
规则来说不是问题 - 它匹配所有具有 adb
或 fastboot
接口的设备,而不管它们的 VendorID 是什么。
在 Archlinux 中,这种情况偶尔会发生。修复:
$ sudo -s
# adb kill-server
# adb start-server
sudo adb kill-server; sudo adb start-server
不起作用,但这个起作用了。
对于使用 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 连接手机,在编译和运行项目时应该会检测到它。
我遇到了同样的问题,解决方案是:(顺便说一句,你不必root你的设备。)
输入“su”切换到超级用户。你的路径/adb 杀死服务器。你的路径/adb 启动服务器。如果没有发生错误,您可以在 root 帐户中看到带有“your-path/adb devices”的设备列表。退出超级用户。现在您可以在您的帐户中执行“adb devices”。
享受。
su
登录,请使用 sudo su
。我做到了。此外,如果您不知道如何退出用户,请使用 exit
。
我知道这可能有点晚了,但这是一篇关于如何手动添加 Android ADB USB 驱动程序的非常好的文章。 Manually adding Android ADB USB driver in Ubuntu 14.04 LTS
编辑添加链接内容
脚步
注意:确保您已在 USB 调试模式下连接您的 Android 设备
打开终端 (CTRL + ALT + T
) 并输入命令:lsusb
现在您可能会收到类似的回复:
Bus 002 Device 013: ID 283b:1024
注意:参考此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″
注意 编辑 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
值)。因此将值替换为。尊重您的设备价值 保存并关闭文件。
现在输入以下命令:
sudo service udev restart
拔出 Android 设备并重新连接。
现在输入以下命令:
adb kill-server
adb devices
给你!必须列出您的设备。
复制自 Manually adding Android ADB USB driver in Ubuntu 14.04 LTS
为我工作。
我的 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
,一切正常!
ATTR{idVendor}=="18d1"
使用 M0Rf30/android-udev-rules
GitHub 社区维护的 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 还要多,它为我解决了这个问题。
按照 http://developer.android.com/guide/developing/device.html(存档链接) 中的说明将 /etc/udev/rules.d/51-android.rules 中的 0bb4 的供应商 id 替换为 18d1 或添加另一行显示:SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666" 重新启动计算机或重新启动 udev 服务。
当您重新启动 udev 时,杀死 adb 服务器并启动 adb 服务器转到 android sdk 安装路径并在 sudo 上执行所有操作。然后运行 adb devices 它将解决权限问题。
我的设备是 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
无需拔掉电源
所有提供的答案都假设您能够拔下并重新连接 USB 电缆。在无法做到这一点的情况下(例如,当您处于远程状态时),您可以执行以下操作以基本上执行建议的 udev 规则在重新插入时会执行的操作:
lsusb
找到您关心的设备,例如:
Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus
记下它所在的总线号,然后执行,例如总线 003
:
sudo chmod a+w /dev/bus/usb/003/*
显然,这可能比您想要的更宽松(可能连接的设备不止这个),但您明白了。
udev
规则,只需使用 udevadm trigger --verbose --action=add --subsystem-match=usb
命令。
您不应该像其他答案所建议的那样以 root 身份运行 adb
服务器。相反,如果您使用的是 Arch Linux,请执行以下操作:
使用 Pacman Reload udev 规则安装 android-udev 包:# udevadm control --reload-rules 将自己添加到 adbusers 组,然后注销并登录:# usermod -aG adbusers $LOGNAME
来源:https://wiki.archlinux.org/index.php/android#Configuring_adb
仅适用于 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
尝试使用您的用户的主组而不是 GROUP="plugdev"
。
在我的 ubuntu 12.04 LTS 上,我不得不将我的 HTC Incredible USB 模式从充电更改为媒体,然后设备出现在 adb 下。当然,在这两种情况下都已经进行了调试。
请不要遵循建议使用 sudo
(sudo adb start-server
) 的解决方案!这以 root(管理员)身份运行 adb,它不应该那样运行!!! 这是一个糟糕的解决方法!
以 root 身份运行的所有内容都可以在您的系统中执行任何操作,如果它创建或修改文件可以将其权限更改为仅供 root 使用。再次,不要!
正确的做法是设置您的系统以使 USER 拥有权限,请查看 this guide 我写的如何正确执行此操作。
我遇到了同样的问题,我按照以下步骤操作:
# 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 中进行了描述。它对我有用。
请务必确认重新插入后将出现在手机屏幕上的对话框。
sudo usermod -aG plugdev $LOGNAME
这个命令对我有用
当您将 USB 连接到计算机时,它会询问您是否信任计算机来调试手机上的应用程序。单击是解决了问题
这让我很生气。首先,这里的一些非常古老的建议可能会破坏您的 Arch linux 系统。我不得不从救援 USB 启动以撤消规则黑客。在我的案例中,当我插入 USB 时,我无法让我的 android 提示授权主机,并且与其他人有相同的症状:
$ sudo adb devices
List of devices attached
89MY08NPA no permissions; see [http://developer.android.com/tools/device.html]
成为root没关系。
进入您的 android 的 USB 设置并确保 Use USB for
设置为文件传输。尽管我多年来一直在这款手机上进行 Android 开发,但由于某种原因,我的设置为无数据传输。谷歌的一些更新必须将其翻转到另一个设置。
将其设置为文件传输后,系统会提示您允许从主机进行调试并恢复正常
https://i.stack.imgur.com/cgV5j.png
我尝试了一些上述解决方案:
重启 adb 服务器
修改 51-android.rules
将自己添加到 adbusers 组
它工作了一次。该设备要求我授权PC,之后一切正常。
问题是当我在 PC 重新启动后尝试连接设备时,问题又是一样的。为了现在解决这个问题,我不得不手动撤销 Settings
->Developer Options
->USB debugging authorizations
,然后设备再次要求我授权 PC,因此终于成功了。
还有一次,上述撤销 USB 调试授权的解决方案没有成功,为了触发设备身份验证,我必须手动禁用/启用 Settings
->Developer options
->USB debugging
我正在使用 ubuntu 20.04LTS。
如果您使用的是 Ubuntu、deepin 等基于发行版的 debian,您可以尝试运行
sudo apt-get install android-sdk-platform-tools-common
瞧你的问题解决了
我使用了 su 并开始工作。当我与普通用户一起使用 Jetbrains 时,我看到了这个问题,但是在 su 模式下重新启动 Jetbrains 后,我可以看到我的设备而无需执行任何操作。
我正在使用 Ubuntu 13.04 和 Jetbrains 12.1.4
您也可以尝试编辑位于 /home/username/.android/ 的 adb_usb.ini 文件。此文件包含您要连接的设备的 ID 供应商列表。您只需在新行中添加设备的 ID 供应商(每行一个 ID)。然后重新启动 adb 服务器并重新插入您的设备。
它在 Ubuntu 12.10 上对我有用。
无论如何,我做了什么来解决这个问题(在 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
我们按下“添加”并编写我们的命令:/home/vadimm/.add_device_permissions.sh
您也可以尝试在命令行中使用下一个命令: ./adb devices ./adb kill-server sudo ./adb devices ./adb kill-server ./adb devices
如果有人在使用 adb devices
时遇到以下错误消息
no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]
执行以下
sudo -s
adb kill-server
adb start-server
这为我在自定义构建的 android 设备上解决了这个问题
-rwxrwxr-x 1 martin martin 156K 2011-11-09 15:40 adb
。尝试直接移动到目录并通过“sudo ./adb devices”启动。如果你可以在没有 sudo 的情况下运行它,你应该可以用 sudo 运行它......我不确定你的问题可能是什么......adb kill-server
sudo adb start-server
检查:adb devices