Logcat 查看日志可选参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
可选的参数主要有:
1、all:查看所有缓冲区日志
2、default:查看 main、system、crash 三个类型日志信息
3、main:查看 main 类型日志
4、radio:查看 radio 类型日志
5、events:查看 events 类型日志
6、system:查看 system 类型日志
7、crash:查看 crash 类型日志

查看系统运行日志:
adb shell
logcat //开始抓取或者-s
logcat -c//清空日志
logcat -s tag//开始抓取日志 并筛选指定的tag日志

使用示例:
logcat -b main #查看 main 类型日志
logcat -b main,system #用来查看 main 和 system 类型日志
logcat -b all #查看所有日志

aosp中查看c++版本

1
2
3
4
5
6
7
8
9
10
//文件路径:build/soong/cc/config/global.go
//文件路径:build/soong/cc/config/clang.go
CStdVersion = "gnu99"
//编译 C 语言代码的标准,c99:表示使用 C99 标准进行编译,gnu99:表示与 GNU 编译器兼容的 C99 标准(GNU C99)
CppStdVersion = "gnu++17"
//编译C++ 标准的版本设置为 GNU C++ 17,C++ 标准版本设置为 C++17,其中的 gnu 表示与 GNU 编译器兼容的意思
ExperimentalCStdVersion = "gnu11"
//表示启用了实验性的 C 语言标准版本,并将其设置为 GNU C11
ExperimentalCppStdVersion = "gnu++2a"
//启用了实验性的 C++ 标准版本,并将其设置为 GNU C++2a

java代码跳转natice查找方式

1
全局查找:_加java类名

搜索/查找文件

1
2
3
4
5
cd到framework/system或其他目录,以getevent文件为例
find -name getevent*
或者
ls -l | grep getevent
grep getevent ./ -rn

查看所有进程的pid

1
2
ps -A (查看指定进程的pid:ps -A | grep " packageName")
//生死指定进程:kill pid

adb执行截屏或其他手势

1
adb shell input keyevent 120 调用截屏命令

打印日志调试(这种方法只能查找java层,无法查找到native调用java层的方法,native调用java使用grep搜索)

1
2
3
4
5
//查找某个地方从底层调用了哪些,加入下面代码,这种方式不会引起程序崩溃,可以获取到堆栈的调用顺序;
// 低版本,具体多少没做验证,如果打印不出来,用下面的方式
Log.i("tyl","oncreate:",new Exception());
// 高版本,通过异常直接打印堆栈
new Exception().printStackTrace();

native端打印堆栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C++ 中使用android::CallStack将所在线程的调用堆栈打印出来
基本用法:
1. 进入对应的cpp文件中,放开 #define LOG_NDEBUG 0 注释,且变成#define LOG_NDEBUG 1
2. 声明头文件
#include <utils/CallStack.h>
#include <utils/Log.h>

3. 调用方法
android::CallStack stack;
stack.update();
stack.log(debug); // 输出到logcat
4. mk或者bp文件中需要链接以下so库
libutils
libcutils

查看当前view对应的具体的是谁

1
2
3
4
5
//加上 | grep ResumedActivity 是筛选出当前最top的Activity
adb shell dumpsys activity activities | grep ResumedActivity
//结果: 当前包名com.example.test/.MainActivity
mResumedActivity: ActivityRecord{6eb3073 u0 com.example.test/.MainActivity t5}
ResumedActivity: ActivityRecord{6eb3073 u0 com.example.test/.MainActivity t5}

查找系统应用(launcher2)在哪些地方编译的

1
2
3
4
5
6
//cd到~/android-8.1.0_r1/build目录,grep "Launcher2" ./ -rn查找在哪里有用到,注意大小写
tyl@ubuntu:~/android-8.1.0_r1/build$ grep "Launcher2" ./ -rn
./make/target/product/core.mk:45: Launcher2 \ 如果查出有多个文件,则都需要打开对应路径添加应用名
//vim打开显示
vi ./make/target/product/core.mk
//打开后如下图,说明PRODUCT_PACKAGES 在这个里面也需要添加内置应用的文件夹名

input dumpsys,打印触摸事件日志到本地文件

1
2
# 给触摸事件保存到一个txt中
adb shell dumpsys input > input.txt (input.txt本地文件名)

adb shell am stack list查看设备上当前运行的应用程序和任务的信息以及点击坐标,它们之间的关系和顺序等;

AOSP常用编译和查找命令

command describe
m 等同于 make ,进行一次完整编译。
mm 在当前目录下编译所有模块,但不包括依赖项。
mmm [目录] 编译指定目录下的所有模块,但不包括依赖项。只编译指定模块:mmm [dir/:target1,target2]
mma 在当前目录下编译所有模块,包括依赖项。
mmma [目录] 编译指定目录下的所有模块,包括依赖项。
make clean 删除整个 out/ 目录。
make clobber 用于清除编译缓存。
make snod 当重新编译部分模块完成后,快速生成img文件。
cgrep 对C/C++文件执行 grep (只搜寻C/C++文件类型,也包括.h类型)。
jgrep 只对Java文件执行 grep (只搜寻Java文件类型)。
resgrep 只匹配 /res 目录下的 xml 文件。
sepgrep 只查找sepolicy文件。

adb shell dumpsys命令

1
2
3
4
5
6
7
8
9
命令用于获取Android设备上正在运行的系统服务信息。通过该命令,可以获取到各种设备状态、应用程序信息以及系统服务信息。
以下是一些常见的用法:
adb shell dumpsys:列出所有可用的服务名称。
adb shell dumpsys <service>:打印指定服务的信息,例如adb shell dumpsys window打印窗口管理服务的信息。
adb shell dumpsys activity:打印活动管理器服务的信息,包括活动栈、任务栈、任务信息等。
adb shell dumpsys battery:打印电池信息。
adb shell dumpsys wifi:打印Wi-Fi服务的信息。
adb shell dumpsys bluetooth:打印蓝牙服务的信息。
这只是一小部分常见的用法,adb shell dumpsys命令提供了许多其他服务的信息;

vscode搜索跳转行号:搜索栏 :加行数;

vscode搜索查询方法:搜索栏 @ 加方法名