2013-07-25 17:19:15|  分类: android|举报|字号 订阅

1、做android开发的过程,碰到了Linux下adb识别不了android设备的问题,刚开始在网上google下,发现都是针对ubuntu下的一些说明:如google提供的方法:http://developer.android.com/tools/device.html,但发现通过做这些还是有些android设备连接不上,于是通过阅读adb源码,得出了一些方法,和大家一起共勉下:

a、google提到的修改/etc/udev/rules.d/51-android.rules的方法:

DE>SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"DE>

其实这样做的目的无非是为了使adb对创建的usb节点有访问权限,其实只要使用root来启动adb server就不存在此问题。做法如下:在root终端上运行adb start-server ,如果已经有运行adb命令的则需要杀掉adb server,运行 ps aux | grep adb ,找到adb server的pid,然后kill掉,如我机器上:

root       2795  0.0      0.0         30556      1244          pts/2              sl          09:00  0:03           adb fork-server server

执行kill 2795杀掉adb server。

b、通过以上办法还是无法识别android设备的,则可能你的android的VID未能加入adb中,你需要手动添加。

添加的文件位置与你第一次启动adb server有关,如你在root上启动adb server,则其位置在

/root/.android/adb_usb.ini,否则其位置在$HOME/.android/adb_usb.ini下,如果$HOME为空,则在/tmp/.android/adb_usb.ini下。未有文件或目录的请手动添加。以下是一份adb_usb.ini的示例:

#for OKWAP C900

0x14b4

#for K-Touch W606

0x0525

#for lenovo speic

0x2006

其中#开头表注释,其它则表示android的VID,每个VID需要单独一行。

获取VID的方法:插上设备前运行lsusb,插上设备后,再次运行lsusb,多出的那个就是你的设备,而VID就在其中如:

Bus 001 Device 034: ID 2006:5010

其中的2006即为其VID。

在adb_usb.ini中添加好后,杀掉adb server,然后启动adb server,(参考a中提到的方法)。

c、如果按以上执行完以上两步还不行,那就碰到了令人头痛的问题了。

现在有些usb设备叫做“免CD”设备。具体点来说,目前一些新的USB 设备在内部含有windows驱动,当你第一次插入的时候,它作为一个闪存,并提示你安装驱动。在安装驱动之后,驱动会自动切换USB设备的模式,存储设备将会消失(大多数情况),新的设备将会产生(如USB类型的Modem)。这种特征被无线设备的制造商称其为“免CD”的设备。在Linux下是通过usb_modeswitch这个工具自动切换的。你读到这里说明你的设备肯定不在usb_modeswitch支持的列表中。此时你要么等其支持,要么就是自己动手支持了。

要自己手动支持,这是个复杂的过程,你可以参考:http://www.draisberghof.de/usb_modeswitch/

简单的来讲,如果你要自己支持,也就是要抓取Windows下驱动做了哪些事情,让其进行了模式切换。然后你在/etc/usb_modeswitch.d/目录下参照已有的文件,创建自己的配置文件如:2006:5010,在其中添加你抓取到得信息。

备注:windows下没过多研究,一般装上驱动,识别到了adb接口就可以识别到。平板上和Linux下比较类似,不过其$HOME为空,所以添加的目录在/tmp/.android/adb_usb.ini里。

=========================

Ubuntu下实机调试Android程序

入手华为C8500一台,连到我的Ubuntu上,打算实机调试下程序。
结果ADB不能识别该设备,于是展开一番调查并将结果奉上。
设备不被识别

调查并解决之

方法一:
停止当前ADB服务
    adb kill-server
以root权限重新开启ADB服务
    sudo adb start-server
这方法是个野路子,官方方法请看下面;-)
方法二:
创建下面文件
    /etc/udev/rules.d/51-android.rules
在该文件中加入下记内容
    # HUAWEI
    SUBSYSTEM=="usb", SYSFS{idVendor}=="12d1", MODE="0666"
这个方法的依据是Android的官方文档,推荐使用。
需要注意的是上面红色字体的部分需要根据设备的厂家而改变。具体也可参考Android的官方文档。
现在来看一下效果

解决设备名乱码:

在adb shell中输入如下命令:
    echo 22>/sys/devices/platform/msm_hsusb_periphera/fixusb
注:adb shell有时会提示目录不存在,这时用R.E.管理器去修改也可以:-)
原来的「Android Mobile Adapter」变成了明确的「hw-smart-phone」,至此打完收工^_^

----------------------------------------------------------------------------------------
首先确认手机连接上电脑,lsusb查看下设备记录。

root@asfman:/home/asfman# lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 04d9:1603 Holtek Semiconductor, Inc. 
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 046d:c051 Logitech, Inc. G3 (MX518) Optical Mouse
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 011: ID 12d1:1035 Huawei Technologies Co., Ltd. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

我这里是:

Bus 007 Device 009: ID 18d1:4e12
然后在/etc/udev/rules.d/下创建一个配置文件: 51-android.rules

sudo vim /etc/udev/rules.d/50-android.rules
文件里添加如下配置参数:

SUBSYSTEM=="usb", SYSFS{"Huawei Technologies Co., Ltd."}=="12d1", MODE="0666"
保存,给配置文件设置下权限

sudo chmod a+rx /etc/udev/rules.d/51-android.rules
Restart

sudo /etc/init.d/udev restart
最后再重启下adb服务,就可以了(没配置环境变量的请进入Android SDK tools目录执行sudo ./adb kill-server ./adb devices)

sudo adb kill-server
sudo adb devices
补充
SYSFS参数:

SYSFS{"idVendor"}="xxx"
针对Linux ADB驱动配置文件里的SYSFS参数是指设备厂商。当初因为是HTC帮Google做的手机,所以官网一开始的用例上写的是”High Tech Computer Corp.”。但现在Moto, 索爱, 三星等一批手机厂商的加入,Android生产厂商已不只HTC一家。而且且如果设备型号不是0bb4那该怎么办呢?

读sdk帮助文档的时候,发现sdk已经提供了说明:
(详见:docs/guide/developing/device.html)

If you’re developing on Ubuntu Linux, you need to add a rules file that contains a USB configuration for each type of device you want to use for development. Each device manufacturer uses a different vendor ID. The example rules files below show how to add an entry for a single vendor ID (the HTC vendor ID). In order to support more devices, you will need additional lines of the same format that provide a different value for the SYSFS{idVendor} property. For other IDs, see the table of USB Vendor IDs, below.

1. Log in as root and create this file: /etc/udev/rules.d/51-android.rules.

For Gusty/Hardy, edit the file to read: [注:ubuntu 7.10及以后版本]
SUBSYSTEM==”usb”, SYSFS{idVendor}==”0bb4″, MODE=”0666″

For Dapper, edit the file to read: [注:ubuntu 6.06及以前版本]
SUBSYSTEM==”usb_device”, SYSFS{idVendor}==”0bb4″, MODE=”0666″
2. Now execute:
chmod a+r /etc/udev/rules.d/51-android.rules

只要按照说明把创建的51-android.rules文件中的0bb4修改为相应的USB供应商ID信息即可。
比如我的手机是motorola,idVender是22b8
那么这一行就是

SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666"
不过,你可以写多行,以使用各种设备。比如我就写了所有的,如下:

#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"
但是这上面的ID,并不能包括所有,我手上就有一台设备的USB ID就不在上述之列。
解决办法是你可以使用lsusb命令查看你的USB ID

root@asfman:/home/asfman# lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 04d9:1603 Holtek Semiconductor, Inc. 
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 046d:c051 Logitech, Inc. G3 (MX518) Optical Mouse
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 011: ID 12d1:1035 Huawei Technologies Co., Ltd. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

找到上面的ID为12d1,在文件中添加设备就可以了。

SUBSYSTEM=="usb", SYSFS{idVendor}=="12d1", MODE="0666"
修改/etc/udev/rules.d/51-android.rules不需要重启Linux机器,重新插拔一下设备就可以了。再次运行adb devices就可以看到你的设备已经连接

root@asfman: adb devices
hw-smart-phone  device

在Linux下adb连接不上android手机的终极解决方案相关推荐

  1. linux下adb连接不上解决方法

    linux下adb连接不上解决方法 参考文章: (1)linux下adb连接不上解决方法 (2)https://www.cnblogs.com/asin-huang/p/8604368.html 备忘 ...

  2. ubuntu linux 下 adb 连接andoid 设备

    http://hi.baidu.com/yuhui_bear/blog/item/d087a2642735dffbf736548b.html http://forum.ubuntu.org.cn/vi ...

  3. linux http连接超时时间设置,Linux 下 HTTP连接超时

    将项目部署到现场环境,HTTP请求莫名奇妙的连接超时,通过抓包定位了问题,是请求的IP被禁止掉.其中用到了抓包,将记录记录于此. tcpdump host 120.197.89.51 -i any - ...

  4. 关于魅族手机adb连接不上的问题

    在知乎上看到的帖子http://www.zhihu.com/question/26245688 mx4 如何连接eclipse? 如题,我的debug 模式已经打开了,豌豆荚也可以连上,但是在ecli ...

  5. Android杂谈--ubuntu系统下adb连接小米2

    Android杂谈--ubuntu系统下adb连接小米2 发现Ubuntu12.04不能连接小米开发,adb devices不能看到设备!  搞了一个上午才搞成功! 小米手机利用USB连接到Ubunt ...

  6. Windows下解决adb连接不上的终极解决方案

    这几天突然从Mac系统换到Windows系统做Android开发,最头疼的是adb总是连接不上或是5037端口被占用,随后尝试关闭各种第三方的adb连接软件,还是有问题,无奈,转变一下思路,修改adb ...

  7. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  8. 出现adb连接不上的解决办法(转载)

    晚上测试Android时,又出现adb连接不上,提示信息如下 [2014-05-09 21:50:15 - AndroidGov] The connection to adb is down, and ...

  9. Mac上Android手机无法连接解决方案

    用mac电脑开发Android程序的时候,有时候会发现adb连接不上手机,这时候首先你要查找你的开发者选项里面usb调试功能是不是打开了,不可以的话你可以重启一下开发工具,如果打开了还是不能连接的时候 ...

最新文章

  1. 安装、设置与启动MySql5.1.30绿色版的方法
  2. kaggle、TDS、arXiv等,我最喜欢的数据科学资源
  3. (记忆宏)Function问题
  4. spring boot 表单的实体提交错误:Validation failed for object='book'. Error count: 2
  5. Android图片加载框架之(Glide和Picasso的区别,Glide的简单使用)
  6. 那些年,我们见过的 Java 服务端“问题”
  7. BFGS C++优化算法曲线拟合实现
  8. VB讲课笔记06:窗体与常用控件
  9. 【职场生活】跳槽离职要注意的那些坑?
  10. 华为hg255d路由器使用博爱网络开发的操作系统进行中继设置
  11. 解决学校断网,突破天翼校园,实现共享wifi以及linux下无天翼校园客户端
  12. 牛顿插值法,泰勒公式
  13. 二叉树叶子结点个数统计
  14. 数据统计基础之F分布及其应用
  15. becon帧 wifi_无线路由器Beacon时槽值设置为100同500有什么区别?是不是设置越高WIFI信号的传输距离就越远越强?...
  16. Jackson荧光染料丨艾美捷Jackson Alexa Fluor®荧光染料
  17. 使用FTP(IOS FTP客户端开发教程)
  18. SAP物料清单MM60中如何统计输出条目数量
  19. Win10 开机默认开启数字小键盘的方法
  20. 万用表怎么测量电池容量_万用表怎么检测电池容量_电池电量 - 全文

热门文章

  1. python的copy
  2. php doss_php的shell_dDos***型web shell
  3. 密码宝贝教你追女七大招
  4. igs无法分配驱动器映射表_项目超过255个摄像机怎么分配IP地址
  5. 时间——时间到底是什么?
  6. 孪生网络 Siamese Networks
  7. 收集银行卡号前六位识别发卡行和卡的种类(不全)
  8. python归一化 增大差异_特征选择和特征生成问题初探
  9. 【学习小记】Berlekamp-Massey算法
  10. 04.分支语句和循环语句