adb
2018年06月18日

概述

  1. adb是Android Debug Bridge(Android调试桥的缩写),adb是一个C/S架构的命令行工具,主要由3部分组成:
    运行在PC端的客户端:可以通过它对Android应用进行安装,卸载及调试
    Eclipse中的ADT,SDK工具目录下的DDMS,Monitor等工具,都是同样地用到了adb的功能来与Android设备进行交互
    。PC端的手机助手,诸如360手机助手,豌豆荚,应用宝等,其中除了安装第三方应用方便,其他的功能,基本上都可以通过adb命令去完成,这里建议测试人员尽量不要在电脑上安装这些手机助手,因为其自带的adb程序可能会与Android SDK下的adb程序产生冲突,5037端口被占用,导致使用adb命令时无法连接到设备
  2. 运行在PC端的服务:其管理客户端到Android设备上adb后台进程的连接
    adb服务启动后,Windows可以在任务管理器中找到adb.exe这个进程
  3. 运行在Android设备上的adb后台进程
    执行adb shell ps | grep adbd,可以找到该后台进程,windows请使用findstr替代grep

配置

  1. 安装adb
emerge dev-util/android-tools
  1. 配置sudo
    由于普通用户无法使用adb连接,需要配置免密sudo adb
visudo
USERNAME ALL=(ALL)NOPASSWD:/usr/bin/adb

linux adb连接android设备

查看usb设备id,如果没有lsusb命令,可以安装usbutils包

lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 0cf3:9271 Qualcomm Atheros Communications AR9271 802.11n
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 29a9:7020  

最后一行就是我的android手机ID

  1. 让udev正确识别设备
vim /etc/udev/rules.d/51-android.rules
# Smartisan
SUBSYSTEM=="usb", ATTR{idVendor}=="29a9", MODE="0660", GROUP="users"
SUBSYSTEM=="usb", ATTR{idVendor}=="29a9", ATTR{idProduct}=="7020|7021",SYMLINK+="android_adb"
SUBSYSTEM=="usb", ATTR{idVendor}=="29a9", ATTR{idProduct}=="7020|7021",SYMLINK+="android_fastboot"

idVendor填写lsusb结果中id的前半段,idProduct填写后半段
如果是同一个生产厂商的不同型号,可以使用|进行分割,例如ATTRS{idProduct}=="7020|7021"

  1. 重启udev服务
sudo udevadm control --reload-rules
sudo systemctl restart systemd-udevd
  1. 清除配置
adb kill-server 
# 如果之前错误的使用root权限执行的adb,请使用root权限 kill-server
rm -rf ~/.android 

有些用户明明正确配置了udev,在使用普通用户进行链接的时候,仍然提示unauthorized,就是因为$HOME/.android文件夹的旧配置文件冲突造成的

  1. 断开手机usb链接
  2. 清除手机的usb调试授权
    根据android手机的定制系统菜单不同一般是在-设置(系统设置)-开发者选项-撤销USB调试授权-确定
  3. 重启adb服务
sudo adb start-server
  1. usb连接手机
    这是会提示授权,勾选永久(以后不会再弹窗提示)
  2. 查看
adb devices
xxxxx device

连接正常!打开android studio执行运行,即会在手机上自动安装应用并打开

最近发现adb需要在root权限下执行,普通用户才可以使用adb调试安卓设备,所以启动adb服务的时候,需要root权限

注意:
运行android studio调试以后,手机上可能有提示是否允许调试,记得允许
部分usb线只保留了供电针脚,没有数据针脚,如果lsusb没有手机设备信息,可以更换usb线重新测试

参考链接

arch wiki adb配置
gentoo adb
udev 列表