概述

  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线重新测试

常用操作

无线调试

  1. 确保手机和电脑在同一个WIFI下,由于现在新的WIFI支持2.4G和5G双频段,尤其确认好设备是再同一个频段下。
  2. 手机链接usb数据线到电脑。
  3. adb devices 检查手机,确保已经连上
  4. 定义连接端口
# adb tcpip <port>
adb tcpip 5000
  1. 拔掉手机数据线
  2. 检查手机WIFI中的IP地址
  3. 连接手机
# adb connect <IP>:<port>
adb connect 192.168.1.100:5000

这里假设手机IP是192.168.1.100

模拟触控点击

  1. 计算比例
adb shell getevent -p | grep -e "0035" -e "0036"

获得event 体系里 宽(0035)和高(0036)

以当前我使用的手机为例,命令会输出如下信息:

0035  : value 0, min 0, max 1602, fuzz 0, flat 0, resolution 0
0036  : value 0, min 0, max 2503, fuzz 0, flat 0, resolution 0

注释:如果是windows环境,没有“|” 管道 和 grep 命令,可以直接用

adb shell getevent -p

然后在打印信息里自己过滤 0035 和 0036 找对应如上两行信息

我们需要的就是 其中的max

0035(宽) max 1602
0036(高) max 2503

手机屏幕的分辨率是已知的,还以当前我使用的手机为例:

手机屏幕分别率是1080p即:1080(宽) * 1920(高),可以从手机设置里找到分辨率信息。

计算比例:

rateW = 1080(手机屏幕的宽) / 1602(event里0035的max) = 0.674
rateH = 1920(手机屏幕的高) / 2503(event里0036的max) = 0.767
  1. 点击屏幕计算点击位置的坐标
adb shell getevent | grep -e "0035" -e "0036"

以当前我使用的手机为例,命令会输出如下信息:

/dev/input/event0: 0003 0035 00000341
/dev/input/event0: 0003 0036 000008ec

把0035和0036后面的位置数据从16进制转化为10进制

width = 0x341 = 3*16*16 + 4*16 + 1 = 833
height = 0x8ec = 8*16*16 + 14*16 + 12 = 2284

嫌麻烦,可以直接用计算器16进制输入,然后改成10进制模式,就自动显示出来了。

这是在event体系里的位置,将其转化为屏幕位置

screenW = width * rateW = 833 * 0.674 = 561
screenH = height * rateH = 2284 * 0.767 = 1751

上边点击的屏幕位置坐标为(561, 1751)

相关链接

16进制在线转换
安卓模拟点击

参考链接

arch wiki adb配置
gentoo adb
udev 列表