Linux下面开发Android应用时,有时想用真的Android机来进行调试。但是发现在Linux下面不能识别Android机子,出现 ????? 这种情况。那么下面的方法可以帮你解决问题:
PS:请确定你的Android真机不是定制机,不然下面的办法有可能是不管用的,还是识别不了你的真机。
下面我以 Motorola xt615 为例:
首先查看一下你的Android设备机是否连接上来了:
lsusb
效果如图:
[xxxx@Ubuntu:shell]$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 001 Device 004: ID 138a:0008 Validity Sensors, Inc. VFS300 Fingerprint Reader
Bus 002 Device 003: ID 192f:0416 Avago Technologies, Pte.
Bus 002 Device 004: ID 0c45:6481 Microdia
Bus 001 Device 005: ID 413c:8161 Dell Computer Corp. Integrated Keyboard
Bus 001 Device 006: ID 413c:8162 Dell Computer Corp. Integrated Touchpad [Synaptics]
Bus 001 Device 007: ID 413c:8160 Dell Computer Corp. Wireless 365 Bluetooth
Bus 002 Device 005: ID 22b8:2de6 Motorola PCS
最下面的那个机子就是我自己的手机信息:
Bus 002 Device 005: ID 22b8:2de6 Motorola PCS
Motorola PCs 是我的真机的描述信息
22b8 为我真机的vendor id
然后在 /etc/udev/rules.d/ 这个目录下面 新建一个文件,命名为: android-rules 或者 70-android-rules 前面加数字不知道代表什么意思,但是不加数字好象也没有关系。
cd /etc/udev/rules.d/
>android-rules
chmod u+x android-rules
android-rules 里面的内容可以是:
SUBSYSTEM=="usb",ATTRS{idVendor}=="22b8",ATTRS{idProduct}="2de6",MODE="0666"
或者
SUBSYSTEM=="usb", SYSFS("Motorola PCS")=="22b8",MODE="0666"
或者
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
使用下面的命令把上面内容中的其中一个写到android-rules文件中
echo SUBSYSTEM=="usb",ATTRS{idVendor}=="22b8",ATTRS{idProduct}="2de6",MODE="0666" > android-rules
然后给 adb 创建一个执行文件连接:
ln -s /home/xxx/local/eclipse-plugins/android-sdk/android-sdk-linux/platform-tools/adb /usr/local/bin/
上面的 /home/xxxx/local/eclipse-plugins/android-sdk/android-sdk-linux/platform-tools/adb 为你自己的android sdk 安装目录位置。
执行下面的语句:
sudo service udev restart
sudo adb kill-server
sudo adb start-server
adb devices
内容为:
List of devices attached
IRMM0100329912 device
说明你的Android真机可以被识别了。
如果你要测试的真机类型比较多,你可以把下面的内容都添加到android-rules 里面:
#Acer 0502
SUBSYSTEM=="usb", SYSFS{idVendor}=="0502", MODE="0666"
##Dell 413c
SUBSYSTEM=="usb", SYSFS{idVendor}=="413c", MODE="0666"
##Foxconn 0489
SUBSYSTEM=="usb", SYSFS{idVendor}=="0489", MODE="0666"
##Garmin-Asus 091E
SUBSYSTEM=="usb", SYSFS{idVendor}=="091e", MODE="0666"
##HTC 0bb4
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
##Huawei 12d1
SUBSYSTEM=="usb", SYSFS{idVendor}=="12d1", MODE="0666"
##Kyocera 0482
SUBSYSTEM=="usb", SYSFS{idVendor}=="0482", MODE="0666"
##LG 1004
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666"
##Motorola 22b8
SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666"
##Nvidia 0955
SUBSYSTEM=="usb", SYSFS{idVendor}=="0955", MODE="0666"
##Pantech 10A9
SUBSYSTEM=="usb", SYSFS{idVendor}=="10A9", MODE="0666"
##Samsung 04e8
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
##Sharp 04dd
SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"
##Sony Ericsson 0fce
SUBSYSTEM=="usb", SYSFS{idVendor}=="0fce", MODE="0666"
##ZTE 19D2
SUBSYSTEM=="usb", SYSFS{idVendor}=="19D2", MODE="0666"
【备注】关于上面的USB Vendor ID,不同的厂商可能不同,参考:
Company | USB Vendor ID |
---|---|
Acer | 0502 |
ASUS | 0b05 |
Dell | 413c |
Foxconn | 0489 |
Fujitsu | 04c5 |
Fujitsu Toshiba | 04c5 |
Garmin-Asus | 091e |
18d1 | |
Hisense | 109b |
HTC | 0bb4 |
Huawei | 12d1 |
K-Touch | 24e3 |
KT Tech | 2116 |
Kyocera | 0482 |
Lenovo | 17ef |
LG | 1004 |
Motorola | 22b8 |
MTK | 0e8d |
NEC | 0409 |
Nook | 2080 |
Nvidia | 0955 |
OTGV | 2257 |
Pantech | 10a9 |
Pegatron | 1d4d |
Philips | 0471 |
PMC-Sierra | 04da |
Qualcomm | 05c6 |
SK Telesys | 1f53 |
Samsung | 04e8 |
Sharp | 04dd |
Sony | 054c |
Sony Ericsson | 0fce |
Teleepoch | 2340 |
Toshiba | 0930 |
ZTE | 19d2 |