Android系统定制及adb日志调试方法
2023-3-26 12:23:31 Author: 哆啦安全(查看原文) 阅读量:55 收藏

Android系统定制基础

Android双屏异显

深入分析AMS启动流程

WMS启动流程分析和介绍

Android系统启动流程详解

Android Framework学习路线

如何用Android手机抓取Systrace

Android Framework基础到深入篇

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 bootloaderfastboot flashing unlock//fastboot getvar unlocked//press volume up key
fastboot rebootadb rootadb disable-verityadb rebootadb rootadb 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 eventsadb logcat -b events -dlogcat -b events -v threadtimeadb logcat -b mainadb logcat -b radioadb logcat -b systemadb logcat | grep -iE "settingupdate|recovery|uncrypt" //打印系统级logadb 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.dumpApplicationMemoryUsageam_proc_start  //位于AMS.startProcessLocked,启动进程am_proc_bound  //位于AMS.attachApplicationLockedam_kill  //位于ProcessRecord.kill,杀掉进程am_anr  //位于AMS.appNotRespondingam_crash  //位于AMS.handleApplicationCrashInneram_wtf  /位于AMS.handleApplicationWtfam_activity_launch_time  //位于ActivityRecord.reportLaunchTimeLocked(),后面两个参数分别是thisTime和 totalTime.am_activity_fully_drawn_time  //位于ActivityRecord.reportFullyDrawnLocked, 后面两个参数分别是thisTime和 totalTimeam_broadcast_discard_filter  //位于BroadcastQueue.logBroadcastReceiverDiscardLockedam_broadcast_discard_app  //位于BroadcastQueue.logBroadcastReceiverDiscardLocked
adb logcat -b events | findstr “am_proc_died | am_proc_start” //查看进程的启动信息,每个进程的启动信息和死亡信息

(2).Activity生命周期相关分析

am_on_resume_called  //位于AT.performResumeActivityam_on_paused_called  //位于AT.performPauseActivity, performDestroyActivityam_resume_activity  //位于AS.resumeTopActivityInnerLockedam_pause_activity  //位于AS.startPausingLockedam_finish_activity  //位于AS.finishActivityLocked, removeHistoryRecordsForAppLockedam_destroy_activity  //位于AS.destroyActivityLockedam_focused_activity  //位于AMS.setFocusedActivityLocked, clearFocusedActivityam_restart_activity  //位于ASS.realStartActivityLockedam_create_activity  //位于ASS.startActivityUncheckedLockedam_new_intent  //位于ASS.startActivityUncheckedLockedam_task_to_front  //位于AS.moveTaskToFrontLocked

(3).Window相关分析

wm_task_moved  //位于TaskStack.positionTask()

Power分析

power_sleep_requested  //位于PMS.goToSleepNoUpdateLockedpower_screen_state  //位于Notifer.handleEarlyInteractiveChange, handleLateInteractiveChangebattery_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/性能分析必备技巧)


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NzUzNzk1Mw==&mid=2247495412&idx=1&sn=af9177ece8b682320699c4b06a41f4a8&chksm=ceb8abbaf9cf22acc98e70d4c3eb5446e7edcfe2f863dc06be3db2aebff369fb3a062093e5f2#rd
如有侵权请联系:admin#unsafe.sh