跳转至

ADB

https://developer.android.com/tools/adb?hl=zh-cn

Android Debug Bridge, 一个 C/S 架构的命令行工具,可以安装、卸载、调试 Android 应用等

客户端通过服务端和后台程序之间通信,端口号: 5037

一些手机助手其实也是自带 adb 才能控制手机的,所以会占用 5037 端口

安装和连接

ADB 包含在 SDK/platform-tools

官方单独下载地址,具体配置参考 Android SDK

adb --version

开发者选项

设置 > 关于手机 > 编译编号或软件版本 > 连按多次

以小米为例:设置 -> 我的设备 -> 全部参数与信息 -> MIUI 版本

然后便可以在更多设置中看到开发者选项,如果要用 adb install,需要打开「USB 安装」选项,首次需要安装 SIM 卡(废弃停机的也可以)才能打开

无线连接

adb install 的速度较慢

无 root 的手机必须得先手机连接下才行

adb tcpip 5037
adb connect 192.168.101.236:5555
adb disconnect 192.168.101.236:5555

# 切回USB连接
adb usb

基础

# 查看连接设备
adb devices
'
serial_number:序列号
state:状态
'

# 获取设备状态
adb get-state
'
三种状态
device 设备正常连接
offline 连接出现异常,设备无响应
unknown 没有连接设备
'

# 端口转发
adb forward tcp:1234 tcp:8888  # 将主机端口映射到设备的端口,方便调试

# 结束/启动 adb 服务
adb kill-server
adb start-server

如果有多个设备,使用 -s udid 指定要控制的设备

# 重启设备
adb reboot

adb install 包名  # 将存放在主机上的apk安装到设备
'
-r 覆盖安装
-s 安装到 sdcard
-d 解决低版本问题
'
adb uninstall 包名  # 卸载,加 -k 卸载时保存数据和缓存目录

# 复制手机文件到本地
adb pull sdcard/demo.txt path/
'
重命名 path/new_demo.txt
手机系统根目录:/sdcard
'
# 复制本地文件到手机
adb push path/demo.txt sdcard/

# 将 system 分区重新挂在为可读写分区,此命令在操作系统目录时很重要
adb remount

ADB Shell

调用安卓系统自带的命令,通常存储在:system/bin, sources/android-20/com/android/commands 等位置

  • pm
  • am
  • dumpsys
  • uiautomator
  • input

直接 adb shell pm xxx 形式执行

或者执行 adb shell 进入 Shell 环境执行

# 退出
exit  # 或 Ctrl + D

# 查看进程
ps | grep baidu

# 杀死某进程
kill pid xxx

pm

Package Manager 执行包相关的操作

pm list packages  # 获取所有应用的包名
'
命令后加参数
-s 列出系统应用
-3 列出第三方应用
-f 列出应用包名及对应的 apk 名及存放位置
-i 列出应用包名及其安装来源
'

# 还可以加过滤关键字,比如过滤 zhihu
adb shell pm list package -f -3 -i zhihu
# 输出:package:/data/app/com.zhihu.android-1.apk=com.zhihu.android  installer=com.xiaomi.market

pm dump 包名  # 获取包的各种信息,比如查看版本号:| grep version
pm path 包名  # 通过包名获取apk名

pm install 包名  # 安装存放在设备上的apk包
pm uninstall 包名

pm get-install-location  # 获取应用安装位置

pm clear com.xxx.xx  # 清空缓存数据,重置

am

Activity Manager 执行各种系统操作,调试利器,如启动指定 Activity,结束进程,发送广播,更改屏幕属性等

# 启动 Activity
am start 包名/.要启动的Activity
am start -W -n com.xxx.android/.view.WelcomeActivityAlias -S

am force-stop 包名  # 结束应用

am startservice  # 启动一个服务

# 监控 crash 与 ANR
am monitor

dumpsys

可以输出很多系统信息

# 获取所有的dumpsys子命令
dumpsys | grep -i dump

# 获取当前界面元素
dumpsys activity top

# 获取任务列表,可以获取到appium依赖的原始activity
dumpsys activity activities

# 获取特定包基本信息
dumpsys package com.xueqiu.android

# 获取系统通知
dumpsys notification

# 获得内存信息,输出每个 App 的内存使用和系统内存状态,可以指定包名或pid
dumpsys meminfo com.android.settings > 0.txt

# 获取cpu信息
dumpsys cpuinfo

# 获取gpu绘制分析
dumpsys gfxinfo com.android.settings

# 获取短信
dumpsys activity broadcasts | grep senderName
  • 耗电测试
# 查看电池使用情况
dumpsys batterystats

# 测试前重置电量数据文件
adb shell dumpsys batterystats --reset

# 测试完后取回电量数据文件,等一会会生成一个zip文件
adb bugreport > bugreport.txt

# 数据分析
#   直接看电量文件
#   借助 Battery Historian

其它

# 查看手机分辨率
adb shell wm size

# 截图
adb shell screencap -p /sdcard/screen.png

# 录屏
# 显示原生分辨率,默认录制 3min(180s) 自动停止,Ctrl+C 随时暂停
# 不支持在录制时旋转屏幕,否则会被切断
adb shell screenrecord sdcard/record.mp4
'
--time-limit 10  录制 10s

adb pull /sdcard/demo.mp4  导出视频
'
  • input
# 模拟点击/按压
adb shell input tap x y
# 模拟按键
adb shell input keyevent keycode
# 模拟滑动
adb shell input swipe x1 y1 x2 y2
# 模拟输入文本
adb shell input text string
  • uiautomator
# 获取当前界面的控件信息
adb shell uiautomator dump
  • 查看单个应用程序的最大内存限制
# Dalvik Heap size 超过这个限制就很可能发生 OOM
adb shell getprop | grep heapgrowthlimit
# 或者
adb shell getprop dalvik.vm.heapgrowthlimit