解决adb对Android设备的识别问题

今天开始学习APICloud开发Android平台下的app,使用的是Sublime Text3进行开发,按照官网上的教程把插件安装成功,并按照教程新建了一个有底部导航栏的demo app,当右击选择真机调试时,却弹出对话框没有链接着的设备,可是明明我用usb连接着我的T1呀,本文就讲解一下我解决这个问题的过程。

平台

  • 平台:Mac
  • 手机:Smartisan T1(锤子手机)
  • 开发技术平台:APICloud

问题分析

在sublime Text的APICloud插件中,有android真机调试的选项,但是我点击后却出现一下对话框:

1

正常情况下,应该可以直接进行真机调试,我首先想到会不会是官方教程中所说的在mac下权限的问题,我就进入插件安装包下找到adb,命令行下执行

chmod +x ./adb

但是,修改adb权限后还是这个问题,调用adb命令查看连接着的设备

./adb devices

但是结果中确实没有链接中的设备,这就排除插件的问题了,应该会是手机的问题,按理说adb应该可以查看到链接中的设备,我又去网上一搜,发现了Smartisan T1 配置 ADB 的方法这个帖子,这才明白原来是旧版的adb中没有包含T1的ID所致,但是帖子中没有Mac下解决此问题的方法,估计应该是类似的方法,无非就是添加T1的ID到adb_usb.ini文件中,后来搜索又看到了这个帖子Mac下android手机的adb识别,第2部分将讲解各平台下解决adb对T1的识别问题。

解决adb对android设备的识别问题

貌似最新的adb工具已经包含了Smartisan T1的Vendor ID 0X29A9,但是如果不想更换到最新的adb可以通过以下方法解决不能识别设备的问题,其实这些方法同样适于所有不能识别的android手机,因为可能都是因为adb没有包含对应手机的Vendor ID所致。

查看Android设备的Vendor ID

首先我们应该知道我们的android设备的Vendor ID。

Windows下

在windows下,通常的做法是进入设备管理器找到连接的手机右击选择属性进行查看。

Linux下

通常可以在终端下输入以下命令,敲回车可以查看连接的USB设备的信息,然后记下ID即可:

lsusb -tv
Mac下

顶栏最左侧苹果标志->关于本机->更多信息->概览->系统报告->USB->Android->厂商ID(Vendor ID)

配置中添加Vendor ID

我们知道了Vendor ID,下面就要修改一些文件来实现识别了,三大平台下的方法有所差异,但都是向文件中添加Vendor ID来解决问题。

Windows下
  • windows8/8.1

  • windows7

    • 从设备管理器中安装驱动adb_usb_driver_smartisan.zip
    • 打开用户目录下的.android/adb_usb.ini文件,将得到的Vendor ID添加到最后一行(是新起一行),比如T1的是0x29A9.
    • 在命令行中重启adb:
      • adb kill-server
      • adb start-server
Linux下
  • 修改设备规则文件,向文件/etc/udev/rules.d/51-android.rules中添加以下内容:

    SUBSYSTEM==“usb”, ATTR{idVendor}==“29a9”, ATTR{idProduct}==“701a”, MODE=“0666”, OWNER=“your name”

    SUBSYSTEM==“usb”, ATTR{idVendor}==“29a9”, ATTR{idProduct}==“701b”, MODE=“0666”, OWNER=“your name”

  • 打开用户目录下的.android/adb_usb.ini文件,将得到的Vendor ID添加到最后一行(是新起一行),比如T1的是0x29A9.

  • 在命令行中重启adb:

    • adb kill-server
    • adb start-server
Mac下

以T1为例,可以在终端下执行以下命令:

echo 0x29A9 >> ~/.android/adb_usb.ini
adb kill-server
adb start-server
检查是否成功解决问题

执行命令:

adb devices

如果能列出你的设备说明,就可以了。

参考

  1. Smartisan T1 配置 ADB 的方法
  2. Mac下android手机的adb识别
  3. 解决Win8/8.1强制要求驱动签名而导致驱动安装失败的问题