Android常用ADB调试命令汇总
1. 查看是否存在谷歌原生模糊
adb shell getprop ro.surface_flinger.supports_background_blur2. 跳过开机引导
adb root
adb shell settings put secure user_setup_complete 1
adb shell settings put global device_provisioned 1
adb reboot3. 查看手机中模糊配置所在位置
/system/build.prop文件 这里主要记录了系统的属性信息
adb root
adb pull system/build.prop .
code build.prop4. 查看CPU信息
adb shell
cat proc/cpuinfo CPU的具体信息就在该文本中
Hardware : MT6833P CPU型号
5. 更改终端标签页名称
输入如下命令: 所打开文件
vim ~/.bashrc
在打开的文件末尾追加上下面代码并保存 所添加的文本
function title() {`` ``if` `[[ -z ``"$ORIG"` `]]; then`` ``ORIG=$PS1`` ``fi`` ``TITLE=``"\[\e]2;$*\a\]"`` ``PS1=${ORIG}${TITLE}``}
重新打开终端,输入title自定义的名称
title L10-code
6. 刷机后跳过登录小米帐号命令
adb root
adb shell pm disable com.xiaomi.account7. 通过命令查看查看机器offset
可以参考文档:Vsync offsethttps://wiki.n.miui.com/display/~xuyingfeng/Vsync+offset
分高刷和低刷。
修改offset,只能通过修改app-phase和sf-phase,通过两者差值来修改offset。
前提条件:
需要设置VsyncConfiguration为PhaseOffsets
adb shell setprop debug.sf.use_phase_offsets_as_durations 0
需要将高通的offset配置给关闭。
adb shell setprop debug.sf.enable_advanced_sf_phase_offset 0
120hz设置offset为0(实际上是高刷都会修改,90,120)
adb shell setprop "debug.sf.high_fps_late_app_phase_offset_ns" 0;
adb shell setprop "debug.sf.high_fps_late_sf_phase_offset_ns" 0;
adb shell stop;adb shell start;
adb shell dumpsys SurfaceFlinger | grep -iE "app phase|app duration|VSYNC period"
60hz设置offset为0(默认就是0)(实际上是低刷都会修改,30,60)
adb shell setprop "debug.sf.early_phase_offset_ns" 0;
adb shell setprop "debug.sf.early_app_phase_offset_ns" 0;
adb shell stop;adb shell start;
adb shell dumpsys SurfaceFlinger | grep -iE "app phase|app duration|VSYNC period"8、快速填充手机内存的方法【小米适用】
https://wiki.n.miui.com/pages/viewpage.action?pageId=357250118
一、快速填充手机内存的方法,步骤如下:
1.将eatmem程序push进手机
adb push eatmem /data/local/tmp
2.修改eatmem执行权限
adb shell chmod 755 /data/local/tmp/eatmem
3.每次吃掉100MB
adb shell /data/local/tmp/eatmem 100 &
4.查看MemAvailable变化
adb shell cat /proc/meminfo | grep MemAvailable附件:eatmem

二、快速填充手机存储的方法
adb shell fallocate -l 1G /data/test,就会在data下面创建一个1G的test文件1. 内存信息
1.1 分析应用进程的内存占用情况:
1.1.1 分析应用进程详细内存占用分布情况:
adb shell dumpsys meminfo pid or pkgName1.1.2 分析应用进程虚拟内存占用情况:
对于32位的应用,虚拟内存占用超过4G时会出现Crash或白屏等稳定性问题。
adb shell showmap pid
adb shell pmap -x pid
adb shell "cat proc/pid/smaps" //记录着应用进程的全部虚拟内存占用详情
adb shell "cat proc/pid/status" VmSize // 表示应用进程占用的虚拟内存总大小Android系统中32位应用进程的虚拟内存地址空间分布如下图所示

1.1.3 分析进程的kgsl显示内存占用情况:
adb shell cat d/kgsl/proc/4131/mem >launcher_kgsl_mem.txt (其中:gl metrack GPU显示内存,egl metrack Surface显存)1.1.4 dump应用进程的内存快照(分析Java Heap内存泄漏问题):
adb shell am dumpheap pkgName然后使用Android SDK提供的相关脚本进行格式转换后,用MAT工具分析抓取到的hprof内存快照文件。
1.1.5 dump应用进程的内存快照(分析Native Heap内存泄漏问题):
1. adb shell setenforce 0
2. adb shell chmod 0777 /data/local/tmp
3. adb shell setprop libc.debug.malloc.program XXX
4. adb shell setprop libc.debug.malloc.options "backtrace_enable_on_signal leak_track"
5. adb shell kill -9 pid
6. adb shell kill -45 pid //enable backtrace
7. adb shell kill-47 pid //在/data/locat/tmp/目录下会生成名为 backtrace_heap.<pid>.txt
8. python development/scripts/native_heapdump_viewer.py --verbose --html backtrace_heap.1585.txt --symbols /out/target/product/qssi/symbols >backtrace _heap.html1.2 分析系统总体内存占用情况:
分析系统总体内存占用情况:
adb shell "cat proc/meminfo"分析所有进程内存占用分布情况:
adb shell procrank(结果排行是以PSS的大小而排序)分析所有进程内存占用分布情况且包括进程优先级信息:
adb shell dumpsys meminfo2. CPU和GPU信息
2.1 查看运行主频信息:
2.1.1 查看CPU主频信息:
查看CPU当前运行主频:
adb shell "cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_cur_freq"查看CPU可用主频信息:
adb shell "cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_available_frequencies"查看CPU最高主频:
adb shell "cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq"查看CPU可用的governor管理策略:
adb shell "cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_available_governors"查看CPU硬件真实主频:
adb shell "cat /sys/kernel/debug/clk/measure_only_apcs_goldplus_post_acd_clk/clk_measure"开启CPU perf性能模式:
码adb shell "echo performance >/sys/devices/system/cpu/cpufreq/policy0/scaling_governor"
adb shell "echo performance >/sys/devices/system/cpu/cpufreq/policy4/scaling_governor"
adb shell "echo performance >/sys/devices/system/cpu/cpufreq/policy7/scaling_governor"查看最近一段时间系统各进程的CPU占用分布情况:
adb shell dumpsys cpuinfo2.1.2 查看GPU主频信息:
查看GPU当前运行主频:
adb shell "cat /sys/class/kgsl/kgsl-3d0/gpuclk"查看GPU支持的运行主频:
adb shell "cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies"查看GPU支持的最高主频:
adb shell "cat /sys/class/kgsl/kgsl-3d0/max_gpuclk"查看GPU可用的governor管理策略:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_governors开启GPU perf性能模式(通过修改min_pwrlevel值来控制修改GPU的运行主频):
adb shell "echo 0 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel"监测GPU的运行负载和主频信息:
adb shell "while true; do sleep 1; cat /sys/class/kgsl/kgsl-3d0/gpu_busy_percentage; cat /sys/class/kgsl/kgsl-3d0/gpuclk; done;"3. 显示问题
3.1 界面显示异常问题:
查看window信息:
adb shell dumpsys window -a (mFocusedWindow 为焦点窗口)查看SurfaceFlinger侧的Layer图层信息:
adb shell dumpsys SurfaceFlinger查看activity堆栈信息:
adb shell dumpsys activity activities (结果中mResumedActivity为栈顶前台Activity)查看display信息:
adb shell dumpsys display3.2 显示性能掉帧卡顿问题:
查看应用绘制相关信息:
adb shell dumpsys gfxinfo pkgName应用界面流畅度评估:
1. 首先确定要测试的包名,到 App 界面准备好操作;
2. 执行2-3次 adb shell dumpsys gfxinfo tv.danmaku.bili framestats reset ,这一步的目的是清除历数据;
3. 开始操作(比如使用命令行左右滑动,或者自己用手指滑动);
4. 操作结束后,执行 adb shell dumpsys gfxinfo tv.danmaku.bili framestats 这时候会有一堆数据输出,我们只需要关注其中的一部分数据即可;
5. 重点关注:
Janky frames :超过 Vsync 周期的 Frame,不一定出现卡顿
95th percentile :95% 的值
HISTOGRAM : 原始数值
PROFILEDATA :每一帧的详细原始数据main日志中搜索如下日志:
adb shell logcat -s OpenGLRenderer (搜索关键字Davey,UI线程卡顿超过700ms,谷歌定位为“冻帧”卡顿,就会打印日志)3.3 屏幕刷新率问题:
获取屏幕刷新率信息(或者开发者选项开启显示屏幕刷新率):
adb shell dumpsys SurfaceFlinger --dispsync获取游戏应用上帧帧率:
adb shell dumpsys SurfaceFlinger --latency SurfaceView - com.tencent.tmgp.pubgmhd/com.epicgames.ue4.GameActivity#04. 应用启动问题
4.1 通用应用启动命令:
测量应用启动时长:
adb shell am start -W -n com.taobao.taobao/com.taobao.tao.TBMainActivity5. 应用稳定性问题
5.1 Crash崩溃问题:
查看Java crash问题原因:
adb shell logcat -s AndroidRuntime查看native crash问题原因:
addr2line -e xxx.so addr 根据native crash堆栈日志定位crash源代码具体位置(需要对应的符号表信息)5.2 ANR卡死问题分析:
获取运行时的trace信息:
adb shell kill -3 pid
adb pull data/anr/查看进程的各个线程的调用堆栈信息 :
adb shell debuggerd -b pid查看线程的状态的运行状态:
adb shell "ps -A -T pid"5.3 其它稳定性问题:
一、文件句柄fd泄漏导致的crash:
- 查看进程的打开文件的数量的上限:
adb shell "cat proc/pid/limits"- 查看当前已经打开的文件句柄信息:
adb shell
cd proc/pid/fd/二、监控线程开启数量(开启的线程过多会导致进程内存占用过大而出现OOM Crash):
adb shell "cat /proc/pid/status" (其中Threads 字段表示当前开启的线程数量)6. ART虚拟机调试机制
一、开启profiler或Jit的日志方法:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:profiler
adb shell start二、强制编译某个应用为机器码:
码adb shell cmd package compile -m speed -f com.taobao.taobao
adb shell pm compile -r bg-dexopt com.sina.weibo三、使用profman工具dump查看Jit中profiles生成的热点函数信息文件:
adb shell cmd package dump-profiles com.taobao.taobao
adb pull data/misc/profman/四、使用oatdump工具反编译查看oat文件:
adb shell oatdump --boot-image=/apex/com.android.art/javalib/boot.art:/system/framework/boot-framework.art --image=system/framework/arm64/boot-framework.art
adb shell oatdump --boot-image=/apex/com.android.art/javalib/boot.art:/system/framework/boot-framework.art --image=system/framework/arm64/boot-framework.art --app-image=/data/app/~~gZqoKJnYCwtZyvy_E7y-kw==/com.ss.android.ugc.aweme-acaqZRCDf8RSUjmXx-TuxQ==/oat/arm64/base.art --app-oat=/data/app/~~gZqoKJnYCwtZyvy_E7y-kw==/com.ss.android.ugc.aweme-acaqZRCDf8RSUjmXx-TuxQ==/oat/arm64/base.odex --header-only >output.txt7. 应用包信息
查看应用的package信息:
adb shell dumpsys package pkgName (可以查看应用的permission权限申请信息)打印系统安装的所有第三方包名:
adb shell pm list packages -3清理应用缓存数据:
adb shell pm clear pkgName8. input触控事件调试
dump查看系统input机制信息:
adb shell dumpsys input (可以获取EventHub、InputReader、InputDispacher、Global monitors以及当前触控焦点窗口FocusedWindows的信息)查看屏幕报点情况是否正常:
adb shell "getevent -ltr"9. 抓取systrace文件
一、查看Systrace支持的TAG:
adb shell atrace --list_categories二、查看系统trace机制的各种状态信息:
adb shell
cd /sys/kernel/debug/tracing四、抓取atrace文件命令:
开始抓:
adb shell atrace -c -b 32768 --async_start gfx input view webview wm am sm audio video binder_lock binder_driver camera hal res dalvik rs bionic power pm ss database network adb vibrator aidl sched freq idle disk sync -a com.android.systemui停止:
adb shell atrace -c -b 32768 --async_stop -z gfx input view webview wm am sm audio video binder_lock binder_driver camera hal res dalvik rs bionic power pm ss database network adb vibrator aidl sched freq idle disk sync -a com.android.systemui > atracedump.atrace10. selinux机制调试
一、动态开关selinux检查机制:
adb shell setenforce 0 //设置成permissive 模式 adb shell setenforce 1 //设置成enforce 模式二、查看进程的selinux权限组信息:
adb shell "ps -AZ |grep pid"三、修改selinux权限后,需要单独编译selinux_policy模块替换验证
11. 屏幕点亮速度分析
adb shell "logcat -s PowerManagerService |grep 'Screen on'"12. 应用安装速度分析
1. 分析apk文件拷贝的IO性能是否慢?
a.IO拷贝前注意使用如下命令释放磁盘缓存:adb shell "echo 3 > /proc/sys/vm/drop_caches";
b.是否存在fuse的影响?
c.安全检测逻辑的影响?
d.磁盘性能是否存在差异,安兔兔测试跑一下存储?确认是否是三星的存储器和WDC存储器的性能差异(重启手机后,运行命令:adb shell "logcat | grep scsi")?
e.通过adb shell logcat -s InstallStaging // 日志查看安装时的I/O拷贝时长。
2. dex2oat安装的cpuset配置和是否存在限频等:adb shell logcat -s dex2oat64
3. 查看设备UFS型号信息:adb shell "cat sys/devices/platform/soc/1d84000.ufshc/string_descriptors/product_name"
KLUEG8UHDC-B0E1 SUMSUMG 256G
KLUDG4UHDC-B0E1 SUMSUMG 128G
KLUFG8RHDB-B0E1 SUMSUMG 512G
SDINFDK4-256G SANDISK13. 系统Cgroup进程资源隔离机制调试
13.1 cpuset控制
一、查看设备上的cpuset场景分组信息,限制进程运行在哪个CPU核心:
adb shell
cd dev/cpuset/二、查看进程的cpuset配置信息:
adb shell "cat proc/pid/status"14. 打印代码调用堆栈的方法
一、Native的调试调用堆栈打印:
Linux Kernel
dump_stack()
WARN_ON(x)Native C++
#include "utils/CallStack.h"
android::CallStack cs(“haha”);Android.bp中加入:
shared_libs [
....
"libutilscallstack",
....
]Native C
extern "C" void dumping_callstack(void);
void dumping_callstack(void) {
android::CallStack cs("Jamie");
}二、Java调用堆栈打印:
android.os.Debug.getCallers(n)15. Power电源相关调试
去除电池挂载
adb shell dumpsys battery unplug查看电源信息以及系统电源锁持锁状况:
adb shell dumpsys power16.开机速度慢问题分析
一、bootchart的使用
a.生成数据文件和Log
1.adb shell touch /data/bootchart/enabled
2.adb shell "echo 120 > /data/bootchart/start"
3.adb reboot
b.压缩、导出:
1. adb shell
2.cd /data/bootchart/
3.tar -zcf boochart.tgz *
4.adb pull xxx xxx
5.exit
c.生成图表:
java -jar bootchart.jar bootchart.taz二、日志测量开机速度的方式:
adb shell "logcat -b events |grep -iE 'boot_progress|sf_stop|wm_boot'"17. 抓取bugreport日志
一、使用如下命令抓取bugreport日志(包含各类dumpsys信息、内存信息、各类日志信息等,还可用于分析功耗问题):
adb shell bugreportz -p二、使用chkbugreport工具jar包工具将日志转化为可视化网页:
java -jar chkbugreport.jar xxxx.txt其它
一、使用adb跑整机monkey命令:
adb shell monkey --throttle 500 --ignore-timeouts --ignore-crashes --ignore-native-crashes --ignore-security-exceptions --pct-syskeys 10 --pct-touch 45 --pct-motion 25 --pct-appswitch 20 -c android.intent.category.LAUNCHER -c android.intent.category.MONKEY -c android.intent.category.DEFAULT -v -v 500000二、设备解锁刷fastboot方法:
1. 开机进入开发者选项,使能OEM锁;
2. adb reboot bootloader ;
3. fastboot flashing unlock 音量下键 选择 UNLOCK选项,机器恢复 ;
4. 解锁成功,然后刷版本就可以了手机正常启动;
5. 进入fastboot模式:adb reboot bootloader ;
6. 查看是否有设备:fastboot devices
7. erase 擦除:fastboot erase dtbo
8. 刷入img:fastboot flash dtbo dtbo.img
9. 重启:fastboot reboot三、adb查看settings数据库各个字段值的命令:
adb shell settings list global/system
adb shell settings put global/system xxx value
adb shell settings get global/system xxx四、设备恢复出厂设置:
adb reboot recovery