android日志抓取

2023-05-16

目录说明

                                                                                                        
00_mtk_dump         --  mtk dump文件                                                                               
01_qcom_dump        --  qcom dump文件                                                                              
02_data_log         --  data/log目录下的内容    
		*hilog     --  流水日志   一般根据发生事件查看
		*eventlog  --  生命周期
         *rillogcat --  移动数据日志
         *JankCachedLog  -- CPU占用率和内存使用率
         *charge-log -- 是否是充电环境
03_log_partition    --  log分区下的文件                                                                            
04_system_log       --  Android 系统log,包括anr、tombstone、lowmem、apanic、wtf等 
		*anr       --  应用无响应日志
		*dropbox   --  根据应用包名打印自身相关的日志
05_modem_log        --  modem 运行过程中产生的log,从cp-log、diag_logs导出                                         
06_hwzd_logs        --  hwzd log                                                                                   
07_RunningTest_log  --  RunningT log,包括/data/data/com.huawei.runningtestii/shared_prefs、                       
                        /data/log/rt下的内容在data-log里面                                                         
08_MMI_log          --  MMI测试log,包括/data/data/com.huawei.mmitest/log目录下的内容                              
09_sdcard_log       --  sdcard目录下文件                                                                           
10_sec_storage_data --  安全相关的log                                                                              
11_aee_exp          --  mtk可靠性相关的minidump文件                                                                
11_dumplog          --  qcom可靠性相关的minidump文件                                                               
12_mtk_pstore       --  mtk pstore日志                                                                             
13_vendor_log       --  data/vendor日志                                                                            
14_mtk_privatelog   --  mtk 私有相关日志                                                                           

hilog解析

START u0  
-------------------------------------------------------------------------------------------
(需要结合具体情况去分析):
1.先看卡顿的是什么应用,根据其包名,类名,进程id等分析
2.根据关键字:changing focus 查看焦点的切换
3.根据关键log: Top activity resumed| Resuming| Skip resume|Resume running| Moving to RESUMED| resumeTopActivityLocked: Resumed| Complete resume 查看生命周期
4.根据关键log: LOGLIMIT|thermal|blockmonitor|dex2oat|Choreographer|ActivityManager: Displayed|lowM 查看当前卡顿情况
5.根据关键log: InputReader|InputDispatcher|InputEvent 查看touch事件
1432 1621 I InputReader: UL_Input first down(551,2179) — 首次按下(inputReader线程,驱动读到第一个点的down事件)
1432 1620 I InputDispatcher: UL_Input touch(551,2179) in new Window{c0b558 u0 com.android.test/ com.android.test.TestActivity}, flag=0x81810120,region=[0,123][1080,2244],frame=[0,123][1080,2244],tSize=2,diff=false — 将事件分发给当前touch窗口(InputDispatcher线程,只在窗口变化后第一次点击打印一次)

6887 6887 I InputEvent: (551,2056)0 — down事件分发给应用的viewrootimpl(应用主线程)
1432 1621 I InputReader: UL_Input last up(551,2179) — 抬起(inputReader线程,驱动读到的最后一个点的up事件)
6887 6887 I InputEvent: (551,2056)1 — up事件分发给应用的viewrootimpl(应用主线程)
START u0
##### 启动flag的对应路径:frameworks/base/core/java/android/content/Intent.java
 // 创建新栈
public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;
 // 栈顶复用
public static final int FLAG_ACTIVITY_SINGLE_TOP = 0x20000000;
 // 不保存Activity的历史状态
public static final int FLAG_ACTIVITY_NO_HISTORY = 0x40000000;
 // 清空其activity上面的Activity
public static final int FLAG_ACTIVITY_CLEAR_TOP = 0x04000000;
 // 被启动的Activity如果已经在运行,那这个Activity会被调到栈顶
public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 0x00200000;
 // 任务重置时将任务中在此标记之后的Activity清空
public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 0x00080000;
 // 清理栈,一般与FLAG_ACTIVITY_NEW_TASK一起使用
public static final int FLAG_ACTIVITY_CLEAR_TASK = 0X00008000;
 // 可以进行多任务显示
public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 0x08000000;

案例:
ActivityTaskManager: START u0 {act=com.huawei.intent.action.PUSH_DELAY_NOTIFY flg=0x10008000 hwFlg=0x110 pkg=com.huawei.android.pushagent cmp=com.huawei.android.pushagent/com.huawei.android.pushselfshow.ui.HandleClickEventActivity (has extras)} from uid 10053
0x10008000是FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK,此时就会清理之前的栈全部信息,重新创建新栈。
桌面日志
Launcher onclick begin|Launcher onLongClick v|TaskView launchTask|onBackPressed zoomEnable|onNewIntent() DragLayer visibility|onOverviewToggle|FPSMonitor startScroll|ExitAppAnimationMananger getAnimationInfo success info|handleKeyguardDone
a. 点击桌面图标 Launcher onclick begin  看桌面是否响应点击事件
b. 长按桌面图标 Launcher onLongClick v 
c. 点击任务卡片 TaskView launchTask 
d. 点击返回键 onBackPressed zoomEnable 
---- HwLauncher: Launcher onBackPressed
---- HwLauncher: Launcher onBackPressed end   //已经在桌面,无法后退
e. 点击home键 onNewIntent() DragLayer visibility 
f. 点击recents键 onOverviewToggle ---- 
g. 滑动屏幕 FPSMonitor startScroll 
h. 滑进负一屏 Workspace :isScrollToHiBoard
i. 从应用退出回桌面
ExitAppAnimationMananger getAnimationInfo success info
j. 解锁进入桌面
handleKeyguardDone
k. 下拉状态栏
PanelBar: INTENT_STATUSBAR_VISIBLE_CHANGE sended, EXTRA_VISIBLE = true

l.看应用调整栈到top是否晚于luancher,luancher的stackId=0;
positionChild stackId

q.桌面上云服务,云文件夹报错
HwLauncher:HiFolder hifolder service connect failed,error code 1010   

event-log解析

生命周期

am_proc_start|am_proc_bound|am_proc_died|am_kill|wm_create_task|wm_create_activity|wm_new_intent
-----------------------------------------------------------------------------------------------------------------------
wm_task_created|wm_create_activity|wm_on_create_called|wm_on_start_called|wm_on_resume_called|wm_stop_activity|wm_on_stop_called|wm_on_destroy_called|
可根据关键字: _called|_activity 过滤

wm_stack_created: 26 ——首次启动创建TaskStack,id是26
wm_task_created: [58,26] ——创建Task
am(wm)_focused_stack: [0,0,26,0,reuseOrNewTask] ——焦点栈从0栈切换到26栈
am(wm)_create_task: [0,58] ——创建TaskRecord
am(wm)_create_activity: ——此日志仅作为标记要开始执行activity生命周期的调度分发,实际创建ActivityRecord对象是在创建stack之前就完成了构造对象
am(wm)_pause_activity: ——发起pause上一个activity–ActivityManager_activity: Moving to PAUSING
am(wm)_restart_activity: ——activity首次启动有次日志,非首次启动无此日志,取而代之的是am_resume_activity
am(wm)_set_resumed_activity: ——焦点切换给要启动的activity,Activity切换时会切换窗口焦点(触发resume下一个应用,AMS触发) —— Changing focus
am(wm)_add_to_stopping:——activityPaused通知系统侧,并将已经pause的activity加到stopping列表
am(wm)_on_create_called ——activity执行完onCreate
am(wm)_on_start_called: ——activity执行完onStart
am(wm)_on_resume_called ——activity执行完onResume (am_set_resumed_activity–am_on_resume_called之间过程耗时在应用)
am(wm)_stop_activity ——发起stop上一个pause的页面
am(wm)_on_stop_called ——activity执行完onStop

特殊点打印

I screen_toggled: 0 灭屏
I screen_toggled: 2 解锁
I screen_toggled: 1 亮屏
I am_on_resume_called : 声明周期
I am_low_memory       : 系统内存不足
I am_destory_activity : 销毁 Activity
I am_anr              : ANR 以及原因
I am_kill             : 被杀以及原因
开机log分析
adb logcat -b event | grep boot_progress
发起finish的原因
在events的日志中查看finish的原因:
1.recent-task-trimmed-----多任务裁剪,超过多任务应用的上限,就会触发(当前桌面多任务限制:20),配置不显示在多任务 excludeFromRecents=true
2.app-request------应用自己发起的finish请求,属于应用自己的业务逻辑
3.remove-task------是在多任务界面上划移除操作,属于用户行为
4.remove-task-all-----是在多任务界面上点击小刷子操作,属于用户行为
5.remove-hidden-task-----先添加到hidden列表里面,只有回到桌面才会去触发这个(可以去添加FLAG_ACTIVITY_MULTIPLE_TASK,进行多任务显示,会在多任务中有多个卡片)
6.clear-task-all-----这个是添加了FLAG_ACTIVITY_CLEAR_TASK的flag,去清理之前的任务栈
7.clear-task-stack-----这个是添加了FLAG_ACTIVITY_CLEAR_TOP的flag,去清理栈顶的activity
8.force-stop-----这种force-stop的是调用接口forceStopPackage,强制停止的
1、  进程启动
日志含义:应用进程已经被启动
日志参数:
am_proc_start:User,PID,UID,Process Name,Type,Component
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
UID:被应用进程的UID
Process Name:被启动的进程名称
Type:启动进程的原因的组件类型:activity/service/broadcast/content provider
Component:起的进程的组件的名称,例如具体Activity的名称
参数特征:进程启动的参数中,缺少包名相关的内存,可以通过参数6的Component的/前面的部分判断是否属于统一PackageName

日志举例:
am_proc_start: 
[0,11478,10170,com.huawei.photos,pre-top-activity,{com.huawei.photos/com.huawei.gallery.app.GalleryMain}]
am_proc_start: [0,27726,10123,com.huawei.trustcircle,service,{com.huawei.trustcircle/com.huawei.trustcircle.AuthLifeCycleService}]
am_proc_start:[0,14486,10181,com.huawei.scenepack,content provider,{com.huawei.scenepack/com.huawei.scenepack.provider.AppletSettingsProvider}]
am_proc_start: [0,32017,1001,com.huawei.regservice,broadcast,{com.huawei.regservice/com.huawei.regservice.BluetoothChangeReceiver}] 

2、  进程绑定
日志含义:应用进程被绑定开始工作
am_proc_bound:User,PID,Process Name
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
Process Name:被启动的进程名称
参数特征:通过PID可以关联到进程启动日志
日志举例:
am_proc_bound: [0,27726,com.huawei.trustcircle]
 
3、  进程死亡
日志含义:应用进程死亡
am_proc_died:User,PID,Process Name,OomAdj,ProcState
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
Process Name:被启动的进程名称
OomAdj:死亡进程的OomAdj值
ProcState:死亡进程的ProcState值
参数特征:通过PID可以关联到唯一的进程启动日志
日志举例:
am_proc_died: [0,12661,com.huawei.calendar,995,19]
am_proc_died: [0,12900,com.android.settings,995,19]
am_proc_died: [0,12401,com.android.providers.calendar,985,19]
 
4、  杀死进程
日志含义:杀死应用进程
am_kill:User,PID,Process Name,OomAdj,Reason
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
Process Name:被杀的进程名称
OomAdj:杀死进程的OomAdj值
Reason:杀死进程的原因
参数特征:通过PID可以关联到唯一的进程启动日志
日志举例:
am_kill : [0,12661,com.huawei.calendar,995,empty for 1855s] 
am_kill : 
[0,17194,com.huawei.devicegroupmanage,915,stop com.huawei.devicegroupmanage due to from pid 17194by app]
am_kill : [0,31638,com.huawei.camera,965,empty for 1838s]

应用被杀的原因可以参考这个wiki:
http://3ms.huawei.com/km/blogs/details/6350003 

5、 生命周期日志关联关系
5.1日志含义:系统侧 创建任务task。
wm_create_task :User,Task ID
User:用户id
Task ID:创建的任务task ID
日志举例:
wm_create_task: [0,16123]

5.2日志含义:系统侧 创建activity与START u对应。
wm_create_activity:User,Token,Task ID,Component Name,Action,MIME Type,URI,Flags
User:用户id
Token:当前应用的Token对象
Task ID:任务task ID
Component Name:被启动应用的组件名称
Action:创建时Activity携带的Action参数名
MIME Type:通常为null,不用关注
URL:通常为null,不用关注
Flags:应用启动的flag,16进制转换为10进制的数,276824064对应的就是0x10800000
日志举例:
wm_create_activity: [0,154025448,16123,com.huawei.watch.home/.modules.watchface.picker.EditThemeCardActivity,NULL,NULL,NULL,276824064]

5.3日志含义:与create_activity一样,也是启动应用,只是应用是以singleTop模式启动的activity。
wm_new_intent:User,Token,Task ID,Component Name,Action,MIME Type,URI,Flags
User:用户id
Token:当前应用的Token对象
Task ID:任务task ID
Component Name:被启动应用的组件名称
Action:创建时Activity携带的Action参数名
MIME Type:通常为null,不用关注
URL:通常为null,不用关注
Flags:应用启动的flag,16进制转换为10进制的数,276824320对应的就是0x10800100
日志举例:
wm_new_intent: [0,113826244,16107,com.huawei.watch.home/.activity.HomeMainActivity,android.intent.action.MAI

图层日志解析

关键字分析
\d Layers|powerMode|  - Output Layer|Timestamp:
 powerMode=On (2), activeConfig=0,    Composition Display State: ["THUNDERSOFT-PC"]
	Line 51594:    1 Layers
	Line 51595:   - Output Layer 0xb400007182ef4500(#0)
	Line 51608:    powerMode=On (2), activeConfig=1,    Composition Display State: [""]
	Line 51636:    3 Layers
	Line 51637:   - Output Layer 0xb400007172b04a00(StatusBar#0)
	Line 51650:   - Output Layer 0xb400007172b07400(NotificationShade#0)
	Line 51663:   - Output Layer 0xb400007172ad4c00(ColorFade#0)
	Line 52584: Timestamp: 11:33:22.111
	Line 53172:    powerMode=On (2), activeConfig=0,    Composition Display State: ["THUNDERSOFT-PC"]
	Line 53187:    1 Layers
	Line 53188:   - Output Layer 0xb400007182ef4500(#0)
	Line 53201:    powerMode=On (2), activeConfig=1,    Composition Display State: [""]
	Line 53229:    3 Layers
	Line 53230:   - Output Layer 0xb400007172b04a00(StatusBar#0)
	Line 53243:   - Output Layer 0xb400007172b07400(NotificationShade#0)
	Line 53256:   - Output Layer 0xb400007172ad4c00(ColorFade#0)
	Line 54177: Timestamp: 11:33:22.123
	Line 54765:    powerMode=On (2), activeConfig=0,    Composition Display State: ["THUNDERSOFT-PC"]
	Line 54780:    1 Layers
	Line 54781:   - Output Layer 0xb400007182ef4500(#0)

charge-log解析

充电日志分析(charge_log):关键字含义

电源常见日志分析:
1、 ss_VOL:当前电池电压
2、 ss_CUR:当前电池电流,为负表示电池在放电,为正表示电池在充电
3、 ss_ufSOC(cap):未经平滑的电量。
4、  ss_SOC:在ss_ufsoc基础上根据电池电压和电池内阻进行校准后的电量,再进过平滑处理。
5、  SOC:UI显示电量百分比,根据前10组ss_SOC电量求平均值。
6、  ss_RM:电池剩余电量
7、  ss_FCC: 电池满充电量
8、  ss_UUC: 电池不可用电量
9、  ss_CC: 电量计累计电量
10、 ss_OCV:电池开路电压
11、 fcc:充满电后,更新电池的满电量,以后都用该值计算电量百分比
12、 Ibus:充电器输出电流,mA
13、 Vbus:充电器输出电压,mV
14、 online:充电器是否在位
15、 type:充电器类型
注意:比较关注的是type,soc, cap, Ibus, Vbus


kmsgcat-log解析

内核日志分析(kmsgcat-log)—常用关键字搜索

1.  vbus_rise :等于0代表充电器拔出中断,等于1代表插入中断;
2.  chg_type:如下枚举类型,不同的只对应的含义:
3.  direct_charge:可显示直充的具体检测信息;
4.  USB_STATE:可查看USB的连接状态;
5.  USB_ICL:设置线上电流;
6.  thermal send input current:热限流 场景限流;
3.  常用的操作:
1.  读电池电流adb shell cat /sys/class/power_supply/battery/current_now
2.  读电池电压adb shell cat /sys/class/power_supply/battery/voltage_now
4.  收到拔出/插入中断的处理流程:(自己理解,如有误差,请指正)

硬件发出中断信息à底层驱动接收到中断,然后发送中断事件给FWK层àFWK层的USB部分收到中断,更新USB状态,再发送广播àFWK层的charge部分更新充电状态,在进行广播àsystemUI层收到事件,进行状态显示的更新。

硬件----
充电底层驱动---
FWK层的USB部分----
FWK层的charge部分----
systemUI层---

 问题分析过程:
1. 先了解问题发生时间点;
2. 查看对应时间点的charge_log中的显示信息是否正确;
3. 如果charge_log中的显示信息有问题,打开对应时间点的内核日志,搜索上面列举的关键字,查找具体的出错点。

日志的抓取方法

获取手机里日志

  • 【删除log
    adb shell rm -rf data/log/hilogs
    adb shell rm -rf data/log/dropbox
    adb shell rm -rf data/log/LogService
    
    【pull log
    adb pull data/log/hilogs/  .
    adb pull data/log/dropbox  .
    adb pull data/log/LogService .
    

商用手机log获取

方法1
1.进入手机后台工程菜单 打开AP                   *#*#2846579#*#*
2.进入手机开发者模式
3.进入设置开发者选项,打开USB调式和HCL log。         收集蓝牙HCI日志,如果不需要蓝牙日志,跳过该步骤。
4.复现问题
5.adb pull data/log/


方法2
1.获取问题收集sn号。
2.通过大数据网站搜索sn号;   只能中有dorbox

logcat获取

  • logcat获取

    • adb logcat > xxx.log
      adb logcat -b [main/system/event/radio...] > xxx.log
      默认adb logcat获取的是main log;
      
    • 通过在mainlog或者bugreport中搜索关键字am_anr,ANR in可以得到ANR发生的时间、对应的进程、原因描述等、
      CPU占用和iowait时间,有时也需要确定内存情况,可以通过在bugreport中查找mem info信息获取到;
      
    • 
      

bugreport获取

  • bugreport获取

    • adb bugreport
      该命令执行完成,会出现一个进度条,耐心等待到100%即可;
       有时候会由于adb版本较低,上述命令不能正常执行,可以执行如下命令,也可以得到所需文件;
      adb bugreport > bugreport.txt
      bugreport包含main、system、event、kernel**log**信息,还有设备的一些dump信息,内容较多、较完全;
      
    • 通过在mainlog或者bugreport中搜索关键字am_anr,ANR in可以得到ANR发生的时间、对应的进程、原因描述等、
      CPU占用和iowait时间,有时也需要确定内存情况,可以通过在bugreport中查找mem info信息获取到;
      

ANR获取

  • ANR获取

    • Android系统有自身的设计,在应用运行时出现无响应时,会将该信息记录保存到data/anr/目录下,即为所需的trace文件,
      所以获取该文件的方式也就特别简单,执行如下命令即可;
      adb pull /data/anr/
      上述命令执行完成,在当前目录会有anr文件夹,里面就是所以的文件;
      
  • 通过第一步已经查找到所在进程,接着在trace文件中找到对应进程的堆栈信息,方便更进一步定位问题;
    
    "main" prio=5 tid=1 Runnable 
      | group="main" sCount=0 dsCount=0 obj=0x73bcc7d0 self=0x7f20814c00 
      | sysTid=20176 nice=-10 cgrp=**default** sched=0/0 handle=0x7f251349b0 
      | state=R schedstat=( 0 0 0 ) utm=12 stm=3 core=5 HZ=100 
      | stack=0x7fdb75e000-0x7fdb760000 stackSize=8MB 
      | held mutexes= "mutator lock"(shared held) 
      *// java* *堆栈调用信息**,**可以查看调用的关系,定位到具体位置* 
      at ttt.push.InterceptorProxy.addMiuiApplication(InterceptorProxy.java:77) 
      at ttt.push.InterceptorProxy.create(InterceptorProxy.java:59) 
      at android.app.Activity.onCreate(Activity.java:1041) 
      at miui.app.Activity.onCreate(SourceFile:47) 
      at com.xxxx.moblie.ui.b.onCreate(SourceFile:172) 
      at com.xxxx.moblie.ui.MainActivity.onCreate(SourceFile:68) 
      at android.app.Activity.performCreate(Activity.java:7050) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2807) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2929) 
      at android.app.ActivityThread.-wrap11(ActivityThread.java:-1) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1618) 
      at android.os.Handler.dispatchMessage(Handler.java:105) 
      at android.os.Looper.loop(Looper.java:171) 
      at android.app.ActivityThread.main(ActivityThread.java:6699) 
      at java.lang.reflect.Method.invoke(Native method) 
      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
    

kernel log获取

  • kernel log获取

    • 有时为了有助于定位问题,需要获取内核log信息,可以通过如下方式获取;
      
      adb shell dmesg > dmesg.log // 需要 root 权限
       adb shell cat /proc/kmsg > /tmp/kernel.log // 需要 root 权限
      

图层日志获取

adb shell dumpsys SurfaceFlinger 
##  打开hilogs中layerlog打印权限
adb shell dumpsys SurfaceFlinger --sfLogFlag 0x1
adb shell dumpsys SurfaceFlinger --sfLogFlag 0x2
adb shell dumpsys SurfaceFlinger --sfLogFlag 0x3

##  dump手机应用图层(手机必须在root的情况下dump图层)
adb shell dumpsys SurfaceFlinger --file --no-limit --full-dump
// 复现之前执行一次(start)---》 开始复现--》复现之后再次执行一次(end)--》最后pull 出来
adb shell dumpsys SurfaceFlinger --file --no-limit --full-dump
adb pull /data/misc/wmtrace/dumpsys.txt

TCP dump

【TCP dump抓取步骤】必须用root的手机才能抓上
1.连接好手机。
2.点开Common.bat脚本,弹出命令窗口,输入6,点击回车。不要关闭窗口
3.然后开始复现问题。复现结束后,按ctrl+C,结束当前窗口
4.然后输入N.  就好了,会在当前路径生成一个.pcap文件 
@echo off

set ROOTDIR=%cd%
:START
:::echo "Please checkout the adb port of your Phone... ..."
:::adb wait-for-device

cd %ROOTDIR%
echo *                               *
echo *            Ver:0722           *
echo *                               *
echo **************START**************
echo 1,  "Get hilogs"
echo 2,  "Del hilogs"
echo 3,  "Get Screenshot"
echo 4,  "Get Vendor Country & Dev model"
echo 5,  "Check tombstones"
echo 6,  "Capture tcpdump"
echo 7,  "Capture Modem log"
echo 8,  "disable startup guide"
echo 9,  "Reboot device"
echo 10, "Disable VoLTE"
echo 11, "Enable VoLTE"
:::echo 12, "MODIFY_UPGRADE_SCRIPT"
echo 0,  "Exit"

set /p val="Please input:"
echo %val%

if %val%==1 ( goto GET_LOG )
if %val%==2 ( goto DEL_LOG )
if %val%==3 ( goto GET_SCREENSHOT )
if %val%==4 ( goto GET_VC_DM )
if %val%==5 ( goto GET_TOMBSTONES )
if %val%==6 ( goto CAPTURE_TCPDUMP )
if %val%==7 ( goto CAPTURE_MODEM_LOG )
if %val%==8 ( goto DISABLE_GUIDE )
if %val%==9 ( goto REBOOT_DEVICE )
if %val%==10 ( goto DISABLE_VOLTE )
if %val%==11 ( goto ENABLE_VOLTE )
if %val%==12 ( goto MODIFY_UPGRADE_SCRIPT )
if %val%==0 ( goto END ) else ( goto START )

:GET_LOG
echo ----------GET LOG----------
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set tm=%time:~3,2%
set ss=%time:~6,2%

if exist log ( cd log )
SET  LOGDIR=%mm%%dd%-%hh%%tm%%ss%
SET LOGDIR=%LOGDIR: =0%
ECHO "%LOGDIR%"
mkdir "%LOGDIR%"
cd "%LOGDIR%"
adb wait-for-device
adb pull /data/log/hilogs ./
adb pull /data/anr
adb pull data/system/dropbox
adb pull data/tombstones
adb pull /data/log/LogService
goto success


:DEL_LOG
echo ----------DEL_LOG----------
adb wait-for-device
adb shell "rm -rf /data/log/hilogs/*"
adb shell "rm -rf /data/log/hilogs/*"
adb shell "rm -rf /data/anr/*"
adb shell "rm -rf data/system/dropbox/*"
adb shell "rm -rf data/tombstones/*"
adb shell "rm -rf /data/log/LogService/*"
goto success


:GET_SCREENSHOT
echo ----------GET_SCREENSHOT----------
cd log
adb wait-for-device
adb pull /sdcard/Pictures/Screenshots
if not %ERRORLEVEL%==0 goto error
goto success


:GET_VC_DM
echo ----------GET_VC_DM----------
adb wait-for-device
adb shell "sed 's/ /\n/g' /proc/cmdline |grep vendorcountry"
adb shell "sed 's/ /\n/g' /proc/cmdline |grep devmodel"
if not %ERRORLEVEL%==0 goto error
goto success


:GET_TOMBSTONES
echo ----------GET_TOMBSTONES----------
adb shell "ls -l /data/tombstones"
if not %ERRORLEVEL%==0 goto error
goto success


:CAPTURE_TCPDUMP
echo ----------CAPTURE_TCPDUMP----------
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set tm=%time:~3,2%
set ss=%time:~6,2%

cd log
SET  LOGDIR=%mm%%dd%-%hh%%tm%%ss%
SET LOGDIR=%LOGDIR: =0%
mkdir "%LOGDIR%"
cd "%LOGDIR%"
SET  TCPLOGNAME=%LOGDIR%.pcap

echo Log Path: /sdcard/%TCPLOGNAME%
echo Please press N!
echo Please press N!
echo Please press N!
start /w /max cmd /c adb shell /hw_product/bin/tcpdump -s 0 -i any -w /sdcard/%TCPLOGNAME%
adb pull /sdcard/%TCPLOGNAME%
if not %ERRORLEVEL%==0 goto error
adb shell rm /sdcard/%TCPLOGNAME%
goto success


:CAPTURE_MODEM_LOG
echo ----------CAPTURE_MODEM_LOG----------
adb root adb shell rm -rf /data/vendor/log/modem
adb shell am broadcast -a com.huawei.lcagent.MODEM_SWITCH_OFF
adb shell am broadcast -a com.huawei.lcagent.MODEM_SWITCH_ON
echo Capturing Modem log ...
echo Press any key to stop Modem log
pause
adb shell am broadcast -a com.huawei.lcagent.MODEM_SWITCH_OFF

set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set tm=%time:~3,2%
set ss=%time:~6,2%

cd log
SET  LOGDIR=%mm%%dd%-%hh%%tm%%ss%
SET LOGDIR=%LOGDIR: =0%
mkdir "%LOGDIR%"
cd "%LOGDIR%"

adb pull /data/vendor/log/modem
if not %ERRORLEVEL%==0 goto error
goto success

:DISABLE_GUIDE
adb shell  pm disable com.huawei.hwstartupguide
if not %ERRORLEVEL%==0 goto error
goto success

:REBOOT_DEVICE
adb reboot
if not %ERRORLEVEL%==0 goto error
goto success

:ENABLE_VOLTE
::: show VOLTE icon -> carrier_volte_show_switch_bool = true
::: diable VoLTE    -> carrier_volte_available_bool = false
adb shell "sed -i 's#\"carrier_volte_available_bool\" value=\"false\"#\"carrier_volte_available_bool\" value=\"true\"#g' /data/user_de/0/com.android.phone/files/*"
if not %ERRORLEVEL%==0 goto error
goto success
:DISABLE_VOLTE
adb shell "sed -i 's#\"carrier_volte_available_bool\" value=\"true\"#\"carrier_volte_available_bool\" value=\"false\"#g' /data/user_de/0/com.android.phone/files/*"
if not %ERRORLEVEL%==0 goto error
goto success


:MODIFY_UPGRADE_SCRIPT
set /p scriptPath=请输入升级脚本

"C:\Program Files\Git\usr\bin\sed.exe" -i "s#fastboot reboot#cd ../BINs\r\ncall get_root.bat#g" %scriptPath%
if not %ERRORLEVEL%==0 goto error
goto success

:END
exit

:error
@echo Update FAIL!
@echo ===========================================
@echo       @@@@@@@   @@     @@@@   @@@@
@echo        @@  @@  @@@@     @@     @@
@echo        @@   @ @@  @@    @@     @@
@echo        @@     @@  @@    @@     @@
@echo        @@  @  @@  @@    @@     @@
@echo        @@@@@  @@  @@    @@     @@
@echo        @@  @  @@@@@@    @@     @@   @
@echo        @@     @@  @@    @@     @@  @@
@echo        @@     @@  @@    @@     @@  @@
@echo       @@@@    @@  @@   @@@@   @@@@@@@
@echo ===========================================
goto START

:success
@echo ===========================================
@echo                 @@@   @@@  @@
@echo                @@ @@   @@  @@
@echo               @@   @@  @@ @@
@echo               @@   @@  @@ @@
@echo               @@   @@  @@@@
@echo               @@   @@  @@ @@
@echo               @@   @@  @@ @@
@echo                @@ @@   @@  @@
@echo                 @@@   @@@  @@
@echo ===========================================
goto START


trace获取

1、手机上准备好要抓取的页面
2、运行命令进行抓取 python systrace.py 
-o : 指示输出文件的路径和名字 、-t : 抓取时间 、
-b : 指定 buffer 大小 、-a : 指定 app 包名
3、手机上开始操作
4、设置好时间,完成后生成.html 文件,此文件使用chorm打开(chrome://tracing/)(https://ui.perfetto.dev/#!/)
## 抓取命令
python systrace.py -b 30000 gfx input view wm am sm video camera hal app res dalvik rs bionic binder_driver power sched freq idle -o 7503.html
使用抓取命令中可能遇到的问题:
1.缺少python-six库
【报错场景】:
Traceback (most recent call last):
  File "systrace.py", line 48, in <module>
    from systrace import run_systrace
  File "/home/user/share/trace/systrace/catapult/systrace/systrace/run_systrace.py", line 43, in <module>
    from systrace import systrace_runner
  File "/home/user/share/trace/systrace/catapult/systrace/systrace/systrace_runner.py", line 11, in <module>
    from systrace import output_generator
  File "/home/user/share/trace/systrace/catapult/systrace/systrace/output_generator.py", line 15, in <module>
    from tracing.trace_data import trace_data
  File "/home/user/share/trace/systrace/catapult/tracing/tracing/trace_data/trace_data.py", line 17, in <module>
    import six
ImportError: No module named six
【解决方法】:安装 python-six 库
sudo apt install python-six    

高通日志

Dear customer,
1. Please upload your about.html and phone num.


2. Please reproduce the issue for below logs:
adb logcat > logcat.log
adb shell cat /proc/kmsg > kmsg.log
adb shell cat /d/tzdbg/qsee_log > qsee.log
adb shell cat /d/tzdbg/log > tzbsp.log

If device has no node "/d/tzdbg/", please try below command:
adb shell cat /proc/tzdbg/qsee_log > qsee.log
adb shell cat /proc/tzdbg/log > tzbsp.log

PS: Please zip the logs before you upload it.

Ta日志

使用adb shell cat /d/tzdbg/qsee_log > 存放路径    抓取ta log
步骤:输入adb shell cat /d/tzdbg/qsee_log > 存放路径------>复现问题------>问题复现后停止
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android日志抓取 的相关文章

  • 使用新语法应用 Android Gradle 插件

    如何使用新的 Gradle 插件语法应用 Android 插件 plugins id version 代替 buildscript dependencies classpath com android tools build gradle
  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • Android 应用程序在启动时打开应用程序信息屏幕,而不是启动主 Activity

    我不确定这是否是一个问题 但这是我第一次遇到这个问题 我正在开发一个应用程序 当我在进行一些编码后断开应用程序与 Android Studio 和 PC 的连接时 如果我尝试在手机上打开应用程序 它会启动app info屏幕 我们看到强制停
  • API29 上不推荐使用 setColorFilter

    我使用以下行来更改 VectorDrawable 的颜色 mydrawable getBackground setColorFilter color PorterDuff Mode SRC ATOP 这很好用 尽管它现在已被弃用 文档建议我
  • android中根据屏幕尺寸计算图像尺寸

    我正在尝试根据屏幕尺寸计算图像高度和宽度 我从后端获取 5 x 7 尺寸的图像 为了将像素乘以 72 进行转换 我有 360 X 504 尺寸的图像 对于 360 X 504 我的动态透明矩形区域将显示为 1 223 x 1 179 即 8
  • onScale 事件后触发奇怪的 onScroll 事件

    我有一个同时使用 SimpleOnScaleGestureListener 和 SimpleOnGestureListener 的应用程序 每当我进行捏缩放时 我都会得到预期的 onScale 但是当我抬起时 我会看到一个奇怪的 onScr
  • 不变违规:requireNativeComponent:在 UIManager 中找不到“RNSVGSvgViewAndroid”

    我对标题中提到的错误感到头疼 我正在使用react native gifted charts https www npmjs com package react native gifted charts v 1 0 3 https www
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • Android 版 jTwitter 授权错误

    我在我的 Android 应用程序中使用 jTwitter 库 直到前天一切都运转良好 但今天遇到异常 服务提供商响应错误 301 请帮助我 这是堆栈跟踪 02 21 21 07 27 258 E AndroidRuntime 4013 F
  • 使用 Android Firebase 堆栈推送通知

    我开发了使用 Firebase 接收推送通知的 Android 应用程序 我的代码基于 Firebase Google 官方文档 https firebase google com docs cloud messaging android
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • 像 WhatsApp 一样发送图片

    我做了一个聊天应用程序 我想添加照片 文件共享我的应用程序中的概念与 WhatsApp 相同 我已经使用该应用程序制作了Xmpp Openfire目前我正在使用此功能进行照片共享 但它并不完全可靠 public void sendFile
  • Android 中的列表视图分页

    我有一个列表视图 其中显示了 50 个元素 我决定对视图进行分页 以便视图的每个部分都有 10 个元素 然后单击 下一个 按钮以获取下一个 10 个元素 如何设置10个数据 我关注这篇文章http rakhi577 wordpress co
  • 如何构建自定义摄像机应用程序?

    我正在尝试开发一个自定义摄像机录像机 当我的设备在 Activity 的 beginRecording 中执行 start MediaRecorder 方法时 应用程序崩溃 我不知道出了什么问题 因为我遵循谷歌API指南 http deve
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • 由于“进程崩溃”,仪器运行失败。

    我想运行以下测试 package com xxx yyy import android content Context import androidx test InstrumentationRegistry import androidx
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做
  • Fragment 生命周期和在不存在的 Fragment 上调用 onCreate 的问题

    我正在 Android 中测试片段 并且片段生命周期有一些令人困惑的行为 我有一个活动 在横向和纵向模式下使用 xml 布局 我有一些代码可以访问在片段布局之一中定义的 EditText 对象 如果我以横向模式启动应用程序 一切都会正常 我

随机推荐

  • Android native反调试方式及使用IDA绕过反调试

    0x00 为了避免我们的so文件被动态分析 xff0c 我们通常在so中加入一些反调试代码 xff0c 常见的Android native反调试方法有以下几种 1 直接调用ptrace PTRACE TRACEME 0 0 0 xff0c
  • Android SO 加壳(加密)与脱壳思路

    0x01 常见的Android SO加壳 加密 思路 1 1 破坏Elf Header 将Elf32 Ehdr 中的e shoff e shnum e shstrndx e shentsize字段处理 xff0c 变为无效值 由于在链接过程
  • Android NDK中C++ STL库动态和静态链接

    0x00 本文参考 本文参考Android NDK中C 43 43 运行时库介绍 我们在开发NDK的时候 xff0c 经常需要使用C 43 43 STL库开发 xff0c 那么这些库是如何和我们的程序链接的呢 xff1f 0x01 C 43
  • 80386保护模式--GDT,LDT,TSS,调用门,特权级转移,附pmtest5代码详解

    教材选择一个操作系统的实现 xff0c 作者于渊 xff0c 看此书前最好了有汇编语言 xff0c 保护模式下的汇编 xff08 参考清华杨季文的80X86汇编语言程序设计教程 xff09 xff0c C语言 xff0c 计算机组成原理 x
  • 80386保护模式--描述符,附pm.inc代码详解

    描述符包括 xff0c 存储段描述符 xff08 代码段 xff0c 数据段 xff0c 堆栈段 xff09 xff0c 系统描述符 xff08 任务状态段TSS xff0c 局部描述符表LDT xff09 xff0c 门描述符 xff08
  • 80386保护模式--分页机制,附pmtest8代码详解

    一 分段机制 逻辑地址 分段机制 线性地址 分页机制 物理地址 xff0c 分页机制示意图如图1 页目录表中的每一项叫页目录项 xff1b 页表中的每一项叫页表项 图 1 页映射表结构 页目录表PDE xff0c 及页表PTE如图2
  • 80386保护模式--中断机制,附pmtest9代码详解

    一 80386 xff0c 内存 xff0c 8259A的连接如图1 图 1 二 编程8259A中断控制器 xff08 将ICW写入特定的寄存器 xff09 8259A是可编程中断控制器 xff0c 对它的设置并不复杂 xff0c 是通过向
  • Android--›系统源码下载之"指定模块源码的下载"(如:系统闹钟源码下载)

    网上大多数的文章都是介绍Android系统源码的下载 本文小清新 介绍Android系统中 单个模块源码的下载 其实repo下载的Android系统 就是通过下载多个小模块 然后拼起来的 简单介绍下Android源码下载方法 来自Andro
  • FAT12文件系统

    一 FAT12软盘格式 软盘格式如图1 xff1a 每个扇区是512字节 xff0c 512B 2880 61 1 44MB 图 1 软盘 xff08 1 44MB xff0c FAT12 xff09 1 引导扇区 占512字节 xff0c
  • X86/Win32函数调用规范研究

    一 函数调用总体框图如下 xff1a 二 C语言函数如下 xff1a int sum int x int y int s s 61 x 43 y return s int foo void int m 61 2 int n 61 3 int
  • ELF文件结构

    一 ELF文件结构如下图 xff1a 之所以要用ELF文件格式 xff0c 是因为这样可以用C语言和汇编语言混合写内核代码 二 ELF header及Program header详细介绍 nasm f elf o kernel o kern
  • int 13H int 10H int 15H

    一 int 13h中断 对于1 44MB的软盘来讲 xff0c 总共有两面 xff08 磁头号0和1 xff09 xff0c 每面有80个柱面 xff08 0 79 xff09 xff0c 每个柱面有18个扇区 软盘的容量的由来 xff1a
  • Orange's 进程

    解释一个操作系统的实现 chapter6 r中代码 程序流程如下 xff1a 1 把Loader中的GDT和esp挪到Kernel中 xff0c 初始化IDTPTR 2 初始化8259 xff0c 初始化IDT xff0c 初始化GDT中的
  • Orange's TTY

    一 TYY任务本质就是增加了一个进程 xff0c 并且运行在ring1 xff0c 且优先级调高了 并且设置了键盘中断用于接收键盘输入 xff0c 并将扫描码存放在缓冲区 task tyy也就是新加入的进程 xff0c 循环执行读写缓冲区
  • C语言指针强制类型转换

    一 举例说明 上图 对应函数调用为int printf const char fmt xff0c fmt为char 指针类型 xff0c 所以共占了32位字节 xff0c 但是 fmt执行的是一个字节 xff0c fmt 43 43 执行的
  • Orange's 进程间通信

    新增一个系统进程 xff0c 和TESTA进行通信 xff0c 通信的流程是这样的 xff0c 如果首先执行到系统进程 xff0c 发送消息 xff0c 那么会触发内中断到ring0级 xff0c 完成发送所需要的动作 xff0c 之后回到
  • IDEA找不到项目根路径问题【多模块情况】

    如果不对idea进行设置 则默认项目根路径是父项目根路径下 xff0c 即使父项目就是一个壳儿 从eclipse转过来又点不习惯 下面给出解决方法 在启动项找到Edit 这个配置 找到要启动的那个项目 xff0c 进行配置 解决 这时候这个
  • 使用wmic命令获得计算机硬件信息

    wmic的使用方法 wmic 硬件信息名称 get 属性名称 xff0c 属性名称2 代码示例 xff1a java获取CPU代码 public static String getCpuId throws IOException Proce
  • Kotlin--›Android Activity/Fragment转场动画极简使用方法

    Activity之间共享元素实现的转场动画 需要API gt 61 21才支持 但是 转场动画 在 support包里面提供了支持 所以没有API 21的限制 可以参考Transition转场动画的文章 https blog csdn ne
  • android日志抓取

    目录说明 00 mtk dump mtk dump文件 01 qcom dump qcom dump文件