zoukankan      html  css  js  c++  java
  • 在Linux下adb连接不上android手机的终极解决方案

    转自:

    http://blog.csdn.net/liuqz2009/article/details/7942569

    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的方法:

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

    其实这样做的目的无非是为了使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里。

    连接金立手机 GiONEE GN9005 。最后通过文中的第二种方法

    (1)先在插入usb之前和之后,运行lsusb,获取设备VID

    xxx@xxx:~$ lsusb
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 17ef:6019 Lenovo
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    xxx@xxx:~$ lsusb
    Bus 002 Device 018: ID 271d:c011 
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 17ef:6019 Lenovo 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    得到设备VID为271d

     

    (2)然后在Home路径下的 /.android 路径下新建了文件adb_usb.ini

    内容为: 

    #for GiONEE GN9005
    0x271d

     

    (3)然后adb kill-server    adb start-server

    成功连上

  • 相关阅读:
    Mysql字符串截取函数
    java 多线程系列---JUC原子类(一)之框架
    java 多线程系列基础篇(十一)之生产消费者问题
    java 多线程系列基础篇(十)之线程优先级和守护线程
    java 多线程系列基础篇(九)之interrupt()和线程终止方式
    java 多线程系列基础篇(八)之join()、start()、run()方法
    java 多线程系列基础篇(七)之线程休眠
    java 多线程系列基础篇(六)之线程让步
    java 多线程系列基础篇(五)之线程等待与唤醒
    java 多线程系列基础篇(四)之 synchronized关键字
  • 原文地址:https://www.cnblogs.com/maxiaodoubao/p/4536534.html
Copyright © 2011-2022 走看看