Android adb 你真的会用吗?

3,029 阅读3分钟

引言

本文基于Android官方文档, 以及个人工作的使用经验, 总结下adb的常用用法, 备忘.

1, adb简介

adb全名Andorid Debug Bridge. 顾名思义, 这是一个Debug工具.
然而, 为何称之为Bridge呢? 因为adb是一个标准的CS结构的工具, 是要连接开发电脑和你的调试手机的.包含如下几个部分:

  • Client端, 运行在开发机器中, 即你的开发PC机. 用来发送adb命令.
  • Deamon守护进程, 运行在调试设备中, 即的调试手机或模拟器.
  • Server端, 作为一个后台进程运行在开发机器中, 即你的开发PC机. 用来管理PC中的Client端和手机的Deamon之间的通信.

2, 常用用法

2.1 adb devices

列举当前连接的调试设备

$ adb devices
List of devices attached
DU2SSE1467010378    device

2.2 adb logcat

打印log信息

指令 说明 备注
adb logcat 打印log /
adb logcat -c 清除手机的log buffer 有些手机权限控制, 不支持.
adb logcat -b 打印指定buffer的log信息 buffer有: main(主log区,默认), events(事件相关的log), radio(射频, telephony相关的log)
adb logcat -v 格式化输出log 常用的用adb logcat -v time显示时间
adb logcat -f 输出log到指定文件

2.3 adb install/uninstall

安装卸载apk

// 安装apk时指定apk file路径
$ adb install ~/Downloads/mobileqq_android.apk
[100%] /data/local/tmp/mobileqq_android.apk
    pkg: /data/local/tmp/mobileqq_android.apk
Success

// 卸载apk时指定包名
$ adb uninstall com.tencent.mobileqq
Success

2.4 adb pull/push

调试设备和开发PC之间拷贝文件.

// 拷贝本地文件到调试设备中
$ adb push ~/temp/GithubApp.trace /sdcard/
[100%] /sdcard/GithubApp.trace

// 从调试设备中拷贝文件到本地
$ adb pull /sdcard/GithubApp.trace ~/
[100%] /sdcard/GithubApp.trace

2.5 adb start/kill-server

启动/杀死adb简介中提到的Server端进程.

由于adb并不稳定, 有时候莫名的问题掉线时, 可以先kill-server, 然后start-server来确保Server进程启动. 往往可以解决问题.

2.5 adb shell

进入调试设备的shell界面, 此时可以使用调试设备中的很多指令. 下文高阶用法中很多就是.

$ adb shell
shell@hwH60:/ $

3, 高阶用法

3.1 adb connect/disconnect

通过wifi进行远程连接手机进行调试的.
developer.android.com/studio/comm…

需先连上usb模式, 开启远程调试模式:
$ adb tcpip 5555

3.2 adb shell am

am即activity manager.
该命令用来执行一些系统动作, 例如启动指定activity, 结束进程, 发送广播, 更改屏幕属性等. 调试利器.

指令 说明 备注
start 根据intent指向启动Activity Intent可以是显示的指向activity, 也可以是ACTION方式, 并且可以添加flag, data等参数信息.
startservice 启动Service 可以添加flag, data等参数信息.
broadcast 发送广播 可以添加flag, data等参数信息.
monitor 启动一个Crash和ANR的监听器 如有Crash或ANR会在控制台输出相关信息.
force-stop 强制停止该包相关的一切 传入package name.
kill 杀死该包相关的所有进程 传入package name.
kill-all 杀死所有后台进程
display-size WxH 改变显示的分辨率 例如adb shell am display-size 1280x720, 手机可能不支持.
display-density 改变显示的density 例如adb shell am display-density 320, 手机可能不支持.

3.3 adb shell pm

pm即package manager.
用来执行package相关的操作, 例如安装卸载, 查询系统的安装包等.

指令 说明 备注
list packages 列出满足filter条件的所有包
list permissions 列出该Group的所有权限
list features 查看系统支持哪些feature 例如蓝牙, wifi, 摄像头等.
install /uninstall 安装卸载
clear 清除应用数据

3.4 adb shell screencap

截屏, 比截屏快捷键更加方便快捷.

$ adb shell screencap /sdcard/screen.png

$ adb pull /sdcard/screen.png ~/temp
[100%] /sdcard/screen.png

3.5 adb shell screenrecord

录屏, 做demo的话, 可以很方便的用这个命名录制视频, 然后借助工具将其转换成gif图, 超赞.

Android4.4及以上系统可用.

2.5 adb shell dumpsys

强大的dump工具, 可以输出很多系统信息. 例如window, activity, task/back stack信息, wifi信息等.

探索Activity之launchMode探索Activity之启动Intent flag和Affinity就是用adb shell dumpsys activity来输出task信息的.

常用dumpsys:

指令 说明 备注 细分参数
activity 输出app组件相关信息 还可以用细分参数获得单项内容, 下同. 例如adb shell dumpsys activity activities来获取activity task/back stack信息. activites, service, providers, intents, broadcasts, processes
alarm 输出当前系统的alarm信息 / /
cpuinfo 输出当前的CPU使用情况 / /
diskstats 输出当前的磁盘使用状态 / /
batterystats 电池使用信息 / /
package package相关信息, 相当于pm功能的集合 输出诸如libs, features, packages等信息 /
meminfo 输出每个App的内存使用和系统内存状态 可以指定包名, 例如adb shell dumpsys meminfo com.anly.githubapp /
window 输出当前窗口相关信息 / policy, animator, tokens, windows

原文链接: lmj.wiki/post/androi…
版权anly_jun所有, 转载请注明出处.