Android系统定制基础
Android双屏异显
深入分析AMS启动流程
WMS启动流程分析和介绍
Android系统启动流程详解
Android Framework学习路线
如何用Android手机抓取Systrace
Android Framework基础到深入篇
Android系统定制及adb日志调试方法
Android修改内核源码绕过防调试检测
Android Audio音频常见问题分析方法
Android8.0至Android13.0源码(AOSP)
KernelSU Android上基于内核的Root方案
Android Q打通应用层到HAL层(HIDL服务实现)
系统定制编译之Android.mk和Android.bp详解
Android系统定制或APP开发定位Crash的几种方法
Android APP应用工程师转Framework工程师(仅此一篇够了)
Android系统定制之Android.mk和Android.bp语法详解(精通版)
Android解锁步骤
adb shell settings put global device_provisioned 1
//boot to Home Screen
//go to setting -> system -> Developer options -> OEM unlocking
adb reboot bootloader
fastboot flashing unlock
//fastboot getvar unlocked
//press volume up key
fastboot reboot
adb root
adb disable-verity
adb reboot
adb root
adb remount
adb shell getprop "ro.boot.flash.locked" //返回值0表示已解锁,1表示未解锁
adb root;adb disable-verity;adb reboot //adb多条命令执行,可以用分号隔开
adb shell top | grep app_name //查看app_name的pid进程
adb shell pm clear 包名 //清除某个应用的缓存
adb shell ps | findstr "com" //查看所有以com开头的进程
adb shell pm list packages //查看手机里面所有包名
adb shell monkey -p 包名 100 //指定app产生随机事件100次
adb shell monkey -p 包名 -v -v 100 //指定app产生随机事件100次并发送详细的activity信息
adb shell dumpsys | findstr "mFocusedActivity" //将程序运行在前台,通过命令查看应用包名称
adb logcat | grep "AndroidRuntime" //过滤运行错误,过滤多个字符串,用"\|"分割开
adb logcat | grep "AndroidRuntime\|System.err"
logcat日志分析
adb logcat -b events
adb logcat -b events -d
logcat -b events -v threadtime
adb logcat -b main
adb logcat -b radio
adb logcat -b system
adb logcat | grep -iE "settingupdate|recovery|uncrypt" //打印系统级log
adb logcat -b events | grep am_ //过滤activity相关日志
打印activity堆栈
adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
adb shell dumpsys activity | grep clock
过滤已有文件的日志
grep -rn "搜索的内容" 路径
grep -rn "Parameter" /home/test/shell/*
logcat日志分析
(1).如果event中出现anr,搜索“am_anr”关键字
(2).如果是logcat log,搜索关键字“ANR”,接着需要看/data/anr下traces.txt文件的栈信息再进行分析
ActivityManager日志相关分析
(1).TagName分析
am_low_memory //位于AMS.killAllBackgroundProcesses或者AMS.appDiedLocked,记录当前Lru进程队列长度。
am_pss //位于AMS.recordPssSampleLocked()
am_meminfo //位于AMS.dumpApplicationMemoryUsage
am_proc_start //位于AMS.startProcessLocked,启动进程
am_proc_bound //位于AMS.attachApplicationLocked
am_kill //位于ProcessRecord.kill,杀掉进程
am_anr //位于AMS.appNotResponding
am_crash //位于AMS.handleApplicationCrashInner
am_wtf /位于AMS.handleApplicationWtf
am_activity_launch_time //位于ActivityRecord.reportLaunchTimeLocked(),后面两个参数分别是thisTime和 totalTime.
am_activity_fully_drawn_time //位于ActivityRecord.reportFullyDrawnLocked, 后面两个参数分别是thisTime和 totalTime
am_broadcast_discard_filter //位于BroadcastQueue.logBroadcastReceiverDiscardLocked
am_broadcast_discard_app //位于BroadcastQueue.logBroadcastReceiverDiscardLocked
adb logcat -b events | findstr “am_proc_died | am_proc_start” //查看进程的启动信息,每个进程的启动信息和死亡信息
(2).Activity生命周期相关分析
am_on_resume_called //位于AT.performResumeActivity
am_on_paused_called //位于AT.performPauseActivity, performDestroyActivity
am_resume_activity //位于AS.resumeTopActivityInnerLocked
am_pause_activity //位于AS.startPausingLocked
am_finish_activity //位于AS.finishActivityLocked, removeHistoryRecordsForAppLocked
am_destroy_activity //位于AS.destroyActivityLocked
am_focused_activity //位于AMS.setFocusedActivityLocked, clearFocusedActivity
am_restart_activity //位于ASS.realStartActivityLocked
am_create_activity //位于ASS.startActivityUncheckedLocked
am_new_intent //位于ASS.startActivityUncheckedLocked
am_task_to_front //位于AS.moveTaskToFrontLocked
(3).Window相关分析
wm_task_moved //位于TaskStack.positionTask()
Power分析
power_sleep_requested //位于PMS.goToSleepNoUpdateLocked
power_screen_state //位于Notifer.handleEarlyInteractiveChange, handleLateInteractiveChange
battery_level: [22,3660,34.8] //剩余电量22%, 电池电压3.66v, 电池温度34.8℃
power_screen_state: [0,3,0,0] //灭屏状态(0), 屏幕超时(3). 当然还有其他设备管理策略(1),其他理由都为用户行为(2)
power_screen_state: [1,0,0,0] //亮屏状态(1)
Activities分析
1).看焦点activity, 关键字am_focused_activity
2).进程启动历史, 关键字Start proc
3).确认设备是否抖动, 关键字am_proc_died和am_proc_start,检查是否在短时间内出现了大量的这样的log
adb shell dumpsys activity //查询AMS服务相关的信息
adb shell dumpsys window //查询WMS服务相关的信息
adb shell dumpsys activity s 包名 //查询某个App所有的Service状态
adb shell dumpsys activity b 包名 //查询某个App所有的广播状态
adb shell dumpsys activity a 包名 //查询某个App所有的Activity状态
adb shell dumpsys activity a 包名 //查询某个App的进程状态
adb shell dumpsys activity top //当前界面app状态
adb shell dumpsys activity oom //查看进程状态
Android音量设置流程及调试方法
dumpsys media.audio_policy //查询系统的流音量
Mixer设备查询
Mixer的一些设备状态对于定位Audio问题非常有帮助,这些设备里包括控制通路开关、音量、增益等;这些配置对于Audio是能够正常使用,起着至关重要的作用
Android系统内置了一些查询和设置命令
amix -c 0 //查询
amix -c 0 1 1 //设置
amix -c 0 //重新查询之后发现修改的配置已经生效
alsa_amixer -c 0 contents //和amix的使用方法类似,只是展现的格式有些差异
推荐阅读
Android adb常用命令
Android adb命令总结
玩转Android adb命令(adb降级)
Android系统开发过程快速查找定位代码的方法
检测车机中ADB远程调试控制Android系统攻击
Android ANR/Crash Log日志分析技巧总结(建议收藏)
Android系统定制/测试(Crash/ANR等Bug/性能分析必备技巧)