1.连接
USB连接步骤:
- 手机打开开发者模式,选择usb调试
- 手机用数据线连上电脑,同意该设备被电脑调试
- 电脑使用命令行窗口检查是否连接上:
adb devices
ip连接步骤:
already connected to 10.90.136.60:15017
failed to authenticate to 10.90.136.60:15017
基本命令:
- 查看adb的版本信息:
adb version
- 查看设备 –
adb devices
- 安装 –
adb install 路径/xxx.apk
- 安装 – 覆盖低版本APK:
adb install -r xx.apk
- 安装 – 覆盖高版本:
adb install -r -d xx.apk
- 卸载 –
adb uninstall APK的包名
- 电脑推送到手机 –
adb push [电脑文件地址] [手机文件存放地址]
- 手机拉取到电脑 –
adb pull [手机文件存放地址] [电脑文件地址]
- 终止adb服务进程 –
adb kill-server
- 重启adb服务进程 –
adb start-server
- 重启机器 –
adb reboot
- 获取序列号 –
adb get-serialno
- 查看进程列表 –
adb shell ps
- 查看包名列表 –
adb shell pm list packages
- 查看包名对应apk列表 –
adb shell pm list packages -f
- 查看第三方包名和apk列表 –
adb shell pm list package -3 -f
- 查看安装路径 –
adb shell pm path packagename
- 查看手机所有进程 –
adb shell ps
- 杀死进程 –
adb shell kill -9 进程号
- 杀死进程 –
adb shell am force-stop 包名全称
获取包名的几种方法1
获取包名的几种方法2
https://www.jianshu.com/p/56fd03f1aaae
- 安装 – 覆盖其它更高版本或更低版本的时候,使用上述的方法,而不是直接使用install安装,可以避免出现bug:Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
- 如果是先使用
install
安装的apk,然后push
进去相关测试插件,那么手机设备的路径一般是/sdcard/Android/data/com.ss.android.ugc.aweme.lite/files/.download/test.apk
adb shell ps
的时候,name就是包名,PID是进程号
日志
- 日志 – 直接日志输出:
adb logcat
- 日志 – 清除日志:
adb logcat -c
- 日志 – 只选择日志格式输出:
adb logcat -v [格式]
- 日志 – 只选择日志级别输出:
adb logcat [级别]
- 日志 – 格式和级别都选择了:
adb logcat -v [格式] [级别]
- 日志 – 停止
adb logcat
日志输出:Ctrl+c
- 日志 – 输出到文本中:
adb logcat > 路径/文件名.txt
- 日志 – PID是:8607 查看某个进程的日志:
adb logcat -v process |grep 8607
- 日志 –
- 日志 –
- 日志 –
- 日志 –
直接显示日志信息,好像是从设备最近一次开机的日志开始显示,所以一般是清空之后,再触发事件。
格式:
adb logcat [<option>] ... [<filter-spec>] ...
adb logcat [选项] [过滤项]
同一个tag只能有一个过滤项,多个tag可以有多个过滤项。中括号是可选的意思。
序号 | 名称 | 含义 |
---|---|---|
选项 | ||
选项 | -b | 加载一个日志缓冲区, 默认是 main |
-c | 清空所有的日志缓存信息 | |
-d | 将缓存的日志输出到屏幕上, 并且不会阻塞 | |
-f | 将日志输出到文件, 默认输出到标准输出流中 | |
-g | 查看日志缓冲区信息 | |
-n | 设置日志输出的最大数目, 需要 -r 参数 | |
-r | 按照每千字节输出日志, 需要 -f 参数 | |
-s | 设置输出日志的标签, 只显示该标签的日志 | |
-t | 输出最近的几行日志, 输出完退出, 不阻塞 | |
-v | 设置日志的输出格式, 注意只能设置一项 | |
-B | 以二进制形式输出日志 | |
-v 选项可以配合日志输出格式来使用 | ||
日志输出格式 | brief | 简要,显示优先级,进程的PID |
process | 仅显示PID | |
tag | 仅显示优先级和标记 | |
raw | 显示不包含其他元数据字段的原始日志消息 | |
time | 显示日期、调用时间、优先级、标记以及发出消息的进程的 PID | |
threadtime | 显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID | |
long | 显示所有元数据字段,并使用空白行分隔消息 | |
日志过滤级别 | V — Verbose | 明细,最低,输出得最多, |
D — Debug | 调试, | |
I — Info | 信息, | |
W — Warning | 警告, | |
E — Error | 错误, | |
F— Fatal | 严重错误, | |
S — Silent | 最高的优先级, 可能不会记载东西/td> | |
合并两个单元格,要合并3个就把2改成3 ,说的好,再来一个 | ||
1) | 正常的一行 | 对的,就是的 |
规则:
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。
过滤级别:
- V —— Verbose(最低,输出得最多)
- D —— Debug
- I —— Info
- W —— Warning
- E —— Error
- F—— Fatal
- S —— Silent(最高,啥也不输出)
例子:adb logcat *:W
会将 Warning、Error、Fatal 和 Silent 日志输出。
(注: 在 macOS 下需要给 *:W
这样以 *
作为 tag 的参数加双引号,如 adb logcat "*:W"
,不然会报错 no matches found: *:W
。)
按 tag 和级别过滤日志
<filter-spec>
可以由多个 <tag>[:priority]
组成。
比如,命令:
adb logcat ActivityManager:I MyApp:D *:S
表示输出 tag ActivityManager
的 Info 以上级别日志,输出 tag MyApp
的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。
日志格式
可以用 adb logcat -v <format>
选项指定日志输出格式。
日志支持按以下几种 <format>
:
brief,
默认格式:<priority>/<tag>(<pid>): <message>
示例:D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
process,
格式为:<priority>(<pid>) <message>
示例:D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
tag,
格式为:<priority>/<tag>: <message>
示例:D/HeadsetStateMachine: Disconnected process message: 10, size: 0
raw,
格式为:<message>
示例:Disconnected process message: 10, size: 0
time,
格式为:<datetime> <priority>/<tag>(<pid>): <message>
示例:08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
threadtime,
格式为:<datetime> <pid> <tid> <priority> <tag>: <message>
示例:08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
long,
格式为:[ <datetime> <pid>:<tid> <priority>/<tag> ]<message>
示例:[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ]Disconnected process message: 10, size: 0
指定格式可与上面的过滤同时使用。比如:
adb logcat -v long ActivityManager:I *:S
内核日志
命令:
adb shell dmesg
输出示例:
<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
<6>[14201.753642] PM: resume of devices complete after 68.106 msecs
<4>[14201.755954] Restarting tasks ... done.
<6>[14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC
<6>[14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC
<6>[14201.872498] PM: Syncing filesystems ... done.
中括号里的 [14201.684016]
代表内核开始启动后的时间,单位为秒。
通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory
那一行前面的时间就是。