Android系统定制及adb日志调试方法

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"
Android系统定制及adb日志调试方法_第1张图片

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相关日志

Android系统定制及adb日志调试方法_第2张图片

打印activity堆栈

adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
adb shell dumpsys activity | grep clock
Android系统定制及adb日志调试方法_第3张图片

过滤已有文件的日志

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” //查看进程的启动信息,每个进程的启动信息和死亡信息
Android系统定制及adb日志调试方法_第4张图片

(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音量设置流程及调试方法

Android系统定制及adb日志调试方法_第5张图片

dumpsys media.audio_policy //查询系统的流音量
Android系统定制及adb日志调试方法_第6张图片

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/性能分析必备技巧)

你可能感兴趣的:(Android系统,framework模块定制开发,Android系统定制开发)