作為一名Android開發人員,經常需要將手機連接到PC,以便調試程序。
但是,有些手機不容易連接上。導致這一問題有多方面的原因:
1.手機內部狀態出了問題。一般來說,重新打開“USB調試”就可以解決這個問題,但是有時需要重啟手機或PC才行。
2.USB供電不足。如果是這個原因,那么就需要更換USB連接線或者USB插口。
3.沒有安裝相應的驅動。這個問題一般只針對Windows用戶才存在,安裝驅動就可以解決問題。如果是Linux或Mac OS X用戶,則無需安裝驅動。
4.其它程序干擾。就我個人情況而言,經常就是由於“豌豆夾”的運行,導致Eclipse無法識別到手機。殺掉它。
5.adb等的版本過低。升級Android的一系列開發工具和SDK,就可以解決問題。
如果是在Linux下面工作,情況可能比較復雜,下面主要來說明一下這種情況。
在Linux下面,你不需要安裝驅動,按理說,連接一個手機不應該出問題;但是,Linux下面的權限管理比較嚴格,不是任何人都可以操作USB設備的。
關於這一點,可以做如下驗證:
1.找一台不能被識別的手機,連接上PC,運行lsusb,你會發現,它出現在結果列表中,這說明Linux是識別該手機的。
2.以root身份重新運行adb,你會發現,手機現在可以被識別了。
3.以普通身份重新運行adb,執行adb devices,你會發現,該手機被標識為“???????????? no permissions”。
總結,手機之所以不能被識別,是由於當前Linux用戶不具備足夠的權限。
解決方法:
1.如果沒有的話,在Linux上創建/etc/udev/rules.d/51-android.rules文件(以root身份)。
2.加入類似形式的行(每個設備一行):SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"。
其中,ATTR{idVendor}=="0bb4"中的數字應該替換成對應手機的id,該id可以通過lsusb查詢。
這行代碼中,關鍵的部分是MODE="0666",它向所有人開放了該設備的讀寫權限。
3.重啟udev。在我的Ubunut 12.10之下,發現無需做這一步,正好我也不理解udev。
另外,還有一些比較特別的情況,請參考我寫的另外兩篇文章:
解決"設備升級至Android 4.2.2之后,可以連接但無法調試"的問題
安裝驅動:
http://developer.android.com/tools/extras/oem-usb.html(針對一般手機)
http://developer.android.com/sdk/win-usb.html(針對Google手機)
官方說明:
http://developer.android.com/tools/device.html
書寫udev rules:
http://www.reactivated.net/writing_udev_rules.html