常用的ADB调试命令和使用场景

202 阅读4分钟

adb的使用命令有很多,某些不常用的命令基本都是搜一下就能直接使用,下面罗列一些在工作中比较常用的命令

APK安装/获取命令 

ADB命令描述
adb install  <-r>  <-g>  <文件路径>-r表示强制覆盖安装,-g表示授予所有运行时权限
adb install-multiple <apk文件1> <apk文件2>当导出apk有多个资源文件时使用
adb shell dumpsys activity | findstr mFocus获取当前焦点的应用activity名
adb shell pm path <应用包名> 获取应用所在路径
adb pull <应用所在路径> 提取应用到当前文件夹   后面加文件路径的话就是提取到某个路径下

查看屏幕分辨率/屏幕密度

ADB命令描述
adb shell wm size 获取当前屏幕分辨率
adb shell wm size 1200x2000     调整分辨率至1200x2000   
adb shell wm density 获取屏幕密度

一般用于看一些应用的显示/布局差异,比如三方应用的在不同分辨率下的现象是不一样的,有些应用的显示清晰度也会受到限制。值得注意的是,低分辨率往高分辨率调,受屏幕分辨率限制是不会生效的。

屏幕密度比如说设置里调整显示的大小,此时会通过调整屏幕密度来达到调整屏幕大小的效果。目前遇到的圆角动画也是根据屏幕密度来计算的。附上px和dp的计算公式:px = dp * (densityDpi / 160);dp = px / (densityDpi / 160)

获取手机权限

ADB命令描述
adb root 获取手机root权限
adb remount    获取remount权限,允许修改手机system分区下的文件,重启后生效

获取屏幕上的点击操作

ADB命令描述
adb shell settings put system show_touches 1打开当前触点   0关闭
adb shell settings put system pointer_location 1 打开屏幕报点   0关闭
adb shell getevent -lt   触摸查看是否有touch回显
adb shell settings put secure clock_seconds 1让时钟精确到秒 0关闭

一般用于解决定屏/冻屏类问题或者让测试打开后方便观察操作步骤,有些问题不太好确认时间点的,可以让时钟精确到秒,方便日志定位

日志相关命令

ADB命令描述
adb bugreport 导出bugreport日志
adb pull /sdcard/debuglogger     adb pull /data/debuglogger MTK项目导出log命令 一般以下两条路径二选一
adb pull /sdcard/Logs   高通项目导出log命令
adb pull /data/aee_exp aee_exp_system adb pull /data/vendor/aee_exp aee_exp_vendor导出db命令
adb shell setprop persist.log.tag.NetworkPolicy V开启NetworkPolicy log
adb shell am dumpheap {packages_name} /data/local/tmp/1.hprofadb pull /data/local/tmp/1.hprofadb命令获取内存快照

在有hprof-conv程序的文件夹内执行 hprof-conv 1.hprof 1_mat.hprof 对文件进行转换
通过Memory Analyze Tool 工具进行分析 或者通过AS的profile里的heap deap进行分析

获取系统信息的adb命令

ADB命令描述
adb shell settings get global  <全局变量>  获取全局变量
adb shell cat/proc/dma_heap/all_heaps 抓取GPU内存占用
adb shell cat proc/进程号/oom_score 获取进程的oom权重
adb shell "cat /proc/vmstat | grep oom_kill" 查看是否有oom kill   不等于0就是有
adb shell ps -A | findstr -iE "systemui" 获取进程的进程号
adb shell cat /proc//status获取进程的cpu绑定核心
adb shell setenforce 0   设置SELINUX为宽容模式
adb shell cat proc/aed/generate-oops 触发KE,可以用于抓取全局dump
adb shell find -name "file" 查找某个文件位置/so库位置
adb shell kill -3 <进程号> 打印指定Java进程的trace信息
adb shell debuggerd -b <进程号>   打印指定Native进程的traces信息,-b表示在控制台输出
adb shell am hang --allow-restart 触发手机hang机
adb shell dd if=/dev/urandom of=/sdcard/Documents/testfile bs=1M count=20480 内存填充命令一次填充20G,用于分析内存紧张问题
adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1" 查看当前界面的Fragment,Settings中用的比较多
adb shell dumpsys 
dumpsys window 
dumpsys cpuinfo 
dumpsys meminfo 
dumpsys package <package_name>
dumpsys activity   dumpsys activity | grep "mResume"     
dump系统信息,常见的有以下几种查询WMS服务相关信息查询CPU情况查询内存情况查看应用的详细信息查询AMS服务相关信息过滤关键字查找当前Activity