我们在接触一个新的项目或入职新公司接手项目,特别是大型项目,对项目不熟悉,有些小伙伴经常去找同事帮忙找这个页面对应是那个Activity或Fragment时,如果是长时间去问这些问题,会大量浪费同事的时间,同时对我们自己的成长不是很好。我们要学会怎么去找切入口。下面分享自己在日常开发使用的adb命令(基于windows平台),我平时怎么快速定位页面对应的Activity或Fragment,打印日志信息也很关键的实战所用到的,希望帮到大家。
ADB查看APP的常用命令
查看当前界面Activity:
adb shell "dumpsys activity top | grep ACTIVITY | tail -n 1"
- dumpsys activity top :打印顶层Activity信息
- grep ACTIVITY:从上个命令结果中过滤出Activity相关信息
- tail -n 1:从上一步过滤结果中继续过滤出最后一条记录,也就是当前界面(顶层top)activity
查看当前界面Fragment:
adb shell "dumpsys activity top | grep '#0: ' | tail -n 1"
或adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1"
- grep '#0: ' : 当前第一个Fragment
如果不知道一个Activity里有几个Fragment,使用这命令,Activity信息栈里显示有那些相关的Fragment
adb shell dumpsys activity top
命令 | 描述 |
---|---|
adb shell ps | 查看进程 |
adb shell dumpsys activity | 获取当前 Android 系统 Activity 栈中 Activity 信息 |
adb shell dumpsys activity top | 获取当前 Android 系统 中与用户交互的 Activity 的详细信息 |
adb shell dumpsys meminfo 应用包名 | 查看应用的内存使用情况 |
adb shell dumpsys package 应用包名 | 获取手机里面某个 apk 的应用信息、版本信息 |
adb shell pm list package -3 | 列出所有的应用的包名 (-s:列出系统应用 -3:列出第三方应用 -f:列出应用包名及对应的apk名及存放位置 -i:列出应用包名及其安装来源) |
adb shell dumpsys activity activities | 显示当前所有在运行的任务栈,并可查看栈中所有的 Activity 的列表 |
adb shell wm size | 手机屏幕分辨率 |
adb shell wm density | 手机屏幕密度 |
adb shell getprop ro.product.model | 查看设备型号 |
获取连接的设备列表及设备状态
adb devices
安装APK
adb install path_to_apk
-l向前锁定应用
adb install -l your.apk #forward lock application
-r替换已存在应用
adb install -r test.apk #replace existing application
-t测试package标志
adb install -t test.apk #allow test packages
-s将应用安装到sdcard
adb install -s test.apk #install application on sdcard
-d忽略版本号安装apk
adb install -d test.apk #allow version code downgrade
-p部分安装apk标志
- path_to_apk:指apk的绝对路径
卸载 APK
adb uninstall 应用包名
//使用-k参数:保留安装包的数据和缓存目录
adb uninstall -k 应用包名
Logcat常用命令
捕捉手机里已经发生过的崩溃日志,bugreport是支持所有手机日志信息
D:\bugreport>adb bugreport > 123.txt
输出到指定目录到123.txt文件(过程需要等待几分钟时间),会down下一个所有日志的压缩包。
在此目录下输入命令:findstr "FATAL EXCEPTION" .\** 找异常所有的对应文件,然后打开对应的文件,然后全文搜索FATAL EXCEPTION,就可以找出问题所在。
查看命令帮助, 查看一下一些简单的数据格式
adb logcat --help
使用命令adb logcat的打印:从上而下,优先级最高
V - Verbose(lowest priority:优先级最低,输出得最多)
D - Debug
I - Info
W - Warning
E - Error
F - Fatal
S - Silent(highest priority,on which nothing is ever printed:优先级最高,啥也不输出)
清除缓存信息
adb logcat -c
- 最好的做法的先使用-c清除之前的日志信息,再触发事件,查看最近的日志信息。
使用tag以后级别失效的原因是没有加上*:S。不加静默所有其他日志的选项就会把其他日志都输出。
在developers文档有介绍 Logcat 命令行工具 | Android 开发者 | Android Developers (google.cn)
打印优先级为Error以上的日志信息。
adb logcat *:E
- *表示任何的Tag
- E表示优先级
显示所有优先级Warning以上的日志
adb logcat *:W *:S
打印时间和优先级为Error以上的日志信息:
adb logcat -v time *:E *:S
把日志信息保存到电脑上D盘log.txt文件上
adb logcat -v time *:E *:S > D:\log.txt
如果需要精准到某他APP上,则在其后面添加上 " | findstr app进程ID"
注意:
Window环境:findstr
Mac或Linux环境:grep
打印某个APP下,且tag为tagName的info级别以上的信息
adb logcat TagName:I *:S | findstr app进程ID
打印某个APP的某个Tag的logcat信息(级别从E到S)
adb logcat TagName:E *:S | findstr app进程ID
打印某个APP的某些Tag的logcat信息(级别从E到S)
adb logcat TagName:E Tag:E *:S | findstr app进程ID