[app]adb调试以及log获取分析

 

今天终于在工作中用到了adb,忘了一大半,多亏有之前的手写笔记和广大的网友

记录一下我遇到的问题和操作流程

前提条件:电脑安装好了adb工具,也已配置好环境变量

1、adb连接真机

手机进入开发者模式,允许usb调试

插线连接电脑,进入cmd命令行界面,输入adb devices

如果连接正常出现的是设备 后边跟devices

但是我的一直是unauthorized(未授权)

在网上找了半天,几乎试了所有方法,终于有一种对我有用,,,,

总结一下网上大家提到的一些方法

1.1 撤销USB调试授权

拔掉数据线,点击手机开发者模式里边的撤销usb调试授权,再插线连接

对我无用,,

1.2 重启adb服务

首先拔掉数据线!进入cmd命令行界面

adb kill-server

再adb start-server

重新插数据线,连接电脑

这种方法对很多人好像都适用,但是对我依旧无用,,

1.3 在.android文件夹下的adb_usb.ini文件添加设备id

.android文件一般是在C盘-users-Administrator或者其他用户文件夹下的

我就进去了这个文件,可是我根本就没有adb_usb.ini这个东西啊!!头疼!

然后我又看到有人说没有的话就新建一个

我就新增了一个adb_usb.ini,后缀名是.ini

设备id怎么来呢

右键我的电脑--属性--设备管理器

 

 

选择你的设备,双击

点击详细信息,属性选择硬件id

然后将0x12D1放进adb_usb.ini文件中(设备id前边都要加上0x)

 

然后重启adb,插拔数据线

很遗憾依旧对我没用!!!

之后又重启了电脑和手机无数次,,还是没用,,

1.4 删除.android文件夹下的adbkey和adbkey.pub

我又进入到.android文件夹,发现我只有adbkey,不管了,实在是没啥办法了,就删掉了adbkey文件,重启adb,插拔数据线!!

然后这时候,奇迹出现了!!!

手机终于弹出了下图这个!!

一定要是带RSA密钥的!!!勾选框框,点确定,输入adb devices,终于unauthorized变成device了,感天动地

 

 

我主要是卡在这一步了,只要连接上了,后边的都是常规操作了

2、抓取log文件

基本格式:adb logcat

常用命令:

adb logcat -v time #打印的日志包含时间

adb logcat -v time >D:\test.log #将打印的文件保存在D盘test.log文件中

adb kill-sever #关闭adb服务

adb start-sever #开启adb服务

adb logcat -v time *:E #打印级别为error的日志信息

adb logcat -help #打印adb帮助手册

3、log日志分析

3.1 logcat缓冲区

Radio:输入通信系统的log

System:输出系统组件的log

Events:输出event模块的log

Main:所有java层的log

3.2 日志组成部分

一般是由优先级:priority和标签tag(日志发起者)组成

priority:

V —— Verbose(最低,输出得最多)

D —— Debug 调试

I —— Info 信息

W —— Warning 警告

E —— Error 错误

F —— Fatal

S —— Silent(最高,啥也不输出)

3.3 logcat参数说明

--"-s"选项 : 设置输出日志*:s的标签, 只显示该标签的日志;

--"-f"选项 : 将日志输出到文件, 默认输出到标准输出流中, -f 参数执行不成功;

--"-r"选项 : 按照每千字节输出日志, 需要 -f 参数, 不过这个命令没有执行成功;

--"-n"选项 : 设置日志输出的最大数目, 需要 -r 参数, 这个执行 感觉 跟 adb logcat 效果一样;

--"-v"选项 : 设置日志的输出格式, 注意只能设置一项;

--"-c"选项 : 清空所有的日志缓存信息;

--"-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;

--"-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;

--"-g"选项 : 查看日志缓冲区信息;

--"-B"选项 : 以二进制形式输出日志;

一般来说,比较常用的为-v和-c

3.3.1 adb logcat -v

  • brief

为默认格式,格式如下:

<priority>/<tag>(<pid>): <message>

示例:

D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0

  • process

格式如下:

<priority>(<pid>) <message>

示例:

D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)

  • tag

格式如下:

<priority>/<tag>: <message>

示例:

D/HeadsetStateMachine: Disconnected process message: 10, size: 0

  • raw

格式如下:

<message>

示例:

Disconnected process message: 10, size: 0

  • time

格式如下:

<datetime> <priority>/<tag>(<pid>): <message>

示例:

08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0

  • threadtime(线程)

格式如下:

<datetime> <pid> <tid> <priority> <tag>: <message>

示例:

08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0

  • long

格式如下:

[ <datetime> <pid>:<tid> <priority>/<tag> ]

示例:

[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ] Disconnected process message: 10, size: 0

3.3.2 adb logcat -c

主要用来清除之前的日志缓存记录,没有参数

3.4 崩溃和未响应的日志

3.4.1 crash 崩溃(停止运行)

搜索关键字“fatal exception”,从该行开始一直到E结束即为崩溃日志

3.4.2 ANR(appliation not responding)未响应

搜索关键字“anr in”,从该行开始一直到E结束即为未响应的日志

posted @ 2020-07-27 14:58  是饺子啊  阅读(394)  评论(0)    收藏  举报