ADB
简介
adb
(Android 调试桥)是一种功能多样的命令行工具,可让PC
端和Android
端进行通信
工作原理
当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。
然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推
如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。
服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。
安装配置
Homebrew 安装
$ brew cask install android-platform-tools
// 新版 homebrew 使用该指令
$ brew install --cask android-platform-tools
手动安装
下载对应工具并解压
- 官方下载地址:https://developer.android.com/studio/releases/platform-tools?hl=zh-cn
将解压文件存放自定义目录下
- 我这里存放在:
~/.android-sdk-macosx
目录下
配置
# 环境变量设置
echo 'export PATH=$PATH:~/.android-sdk-macosx/platform-tools/' >> ~/.bash_profile
# 更新配置文件
source ~/.bash_profile
# 测试是否正常安装
adb devices
开启adb调试
如要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)
常用指令集
- 查看连接设备:
adb devices
- 安装应用:
adb install test.apk
- 指定连接设备使用命令:
adb -s ${devices_id} shell
- 卸载应用,需要指定包:
adb uninstall cn.com.test.mobile
- 卸载app 但保留数据和缓存文件:
adb uninstall -k cn.com.test.mobile
- 列出手机装的所有app 的包名:
adb shell pm list packages
- 列出除了系统应用的第三方应用包名:
adb shell pm list packages -3
- 查看 android 版本:
adb shell getprop ro.build.version.release
- 查看 SDK 版本:
adb shell getprop ro.build.version.sdk
- 终止adb服务:
adb kill-server
- 重启adb服务:
adb start-server
- 清除应用数据与缓存:
adb shell pm clear cn.com.test.mobile
- 启动应用:
adb shell am start -ncn.com.test.mobile/.ui.SplashActivity
- 包信息:
adb shell dumpsys package
- 内存使用情况:
adb shell dumpsys meminfo
- 强制停止应用:
adb shell am force-stop cn.com.test.mobile
- 查看日志:
adb logcat
- 清除 log 缓存:
adb logcat -c
- 重启:
adb reboot
- 获取序列号:
adb get-serialno
- 查看占用内存前10 的app:
adb shell top -s 10
- 从本地复制文件到设备:
adb push <local> <remote>
- 从设备复制文件到本地:
adb pull <remote> <local>
- 查看 bug 报告:
adb bugreport
- 获取 pageSource:
adb shell uiautomator dump --compressed /sdcard/uidump.xml
- 拉取文件本本地:
adb pull /sdcard/uidump.xml > ./uidump.xml
adb shell
交互 shell
启动:
$ adb [-d | -e | -s serial_number] shell
退出:
exit
shell am
$ adb shell am command
shell pm
$ adb shell pm command
shell dpm
$ adb shell dpm command
权限操作
按组列出权限和状态:
$ adb shell pm list permissions -d -g
授予或撤消一项或多项权限:
$ adb shell pm [grant|revoke] <packageName> <permissionName> ...
清理某个 APP 所有数据(包括系统权限)
$ adb shell pm clear <packageName>