常用命令

####

常用命令

  1. 查看当前view 的数量,和数据库地址
1
adb shell dumpsys meminfo com.duowan.gamevoice
  1. dump hprof 必须 是/data/local/tmp/目录
1
adb shell am dumpheap com.duowan.gamevoice /data/local/tmp/test001.hprof

拉取到电脑当前目录下

1
adb pull /data/local/tmp/test001.hprof

3.Mat 查看导出来的hprof 需要转换

转换之后Mat 就可以打开了

1
hprof-conv test001.hprof test001_new.hprof

4.查看当前activity数量

查看当前运行activity 栈

1
adb shell dumpsys activity activities

查看当前运行的activity

1
adb shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
1
2
3
4
5
6
7
8
9
10
11
12
13
adb shell dumpsys activity ----------查看ActvityManagerService 所有信息

adb shell dumpsys activity activities ----------查看Activity组件信息

adb shell dumpsys activity services ----------查看Service组件信息

adb shell dumpsys activity providers ----------产看ContentProvider组件信息

adb shell dumpsys activity broadcasts --------查看BraodcastReceiver信息

adb shell dumpsys activity intents--------------查看Intent信息

adb shell dumpsys activity processes---------查看进程信息

adb 查看当前系统的版本号

1
adb shell getprop ro.build.version.release

查看当前系统里面WakeLock的使用规则

1
adb shell dumpsys powe

获取数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
adb shell run-as com.duowan.gamevoice

cd databases

#进入数据库目录

cp 123.db /sdcard/123.db

#把数据库拷贝到sdcard

adb pull /sdcard/123.db

#把数据库从sdcard从获取到电脑

sqlite3 123.db 打开数据库查询

退出sqlite3

…> 的时候输入分号退出;

1
2
3
4
5
...> ;

Error: near "sql": syntax error

sqlite>

sqlite> 输入.exit或者.quit

1
2
3
sqlite> .quit

hexiang@hexiangdeMacBook-Pro gamevoice-android_1612804294492 %

如果想列出该数据库中的所有表,可:

1
.table

如果想查看这些表的结构:

1
select * from sqlite_master where type="table";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#写个脚本快速dump 出内存堆
rm -rf heap

adb shell rm /data/local/tmp/xx.hprof

PRO=$1

pid=`adb shell ps |grep $PRO |grep -v ":" |awk -F " " '{print $2}'`

echo $pid

adb shell am dumpheap $pid /data/local/tmp/xx.hprof

sleep 3

adb pull /data/local/tmp/xx.hprof

sleep 0.5

hprof-conv -z xx.hprof out.hprof

sleep 0.5

mkdir heap

mv out.hprof heap

rm xx.hprof
1
2
3
chmod +x dump_process_java_heap.sh

./dump_process_java_heap.sh duowan

Debug.startMethodTracing(“/sdcard/gameVoiceMethodTrace_app”);

getPackageInfo 是耗时任务

环境变量设置

1
vim ~/.zshrc

在~/.zshrc 文件中输入环境变量 ,或者加载环境变量,/etc/profile里面是一些export环境变量

export PATH=$PATH::::——:

1
source /etc/profile

查看某个库的依赖

1
./gradlew :gamevoice_client:dependencyInsight --configuration debugRuntimeClasspath --dependency stdlib

将当前目录及其子目录下所有文件后缀为 .c 的文件列出来

1
# find . -name "*.c"

将目前目录其其下子目录中所有一般文件列出

1
# find . -type f

将当前目录及其子目录下所有最近 20 天内更新过的文件列出:

1
# find . -ctime -20

systrace 生成html

1
systrace.py -a com.duowan.gamevoice view gfx sched am dalvik -t 15
1
2
3
systrace.py -a com.duowan.gamevoice sched freq idle am wm gfx view binder_driver hal dalvik camera input res -t 20

systrace.py -a com.duowan.gamevoice sched freq idle am wm gfx view binder_driver hal dalvik camera input res

只要带上sched 就可以看到自定义的beginSection

设置系统配置,开启systrace

1
2
3
//adb shell setprop log.tag.MyAppTag VERBOSE

adb shell setprop log.tag.YTraceCompat D

获取系统配置

1
adb shell getprop
1
`These categories are unavailable: ***说明当前设备不支持`这个类别或选项

查看当前设备所支持的类别或选项:

1
2
3
4
5
systrace.py --list-categoriedsew s34d sx2sedsxzc

-h | --help 显示帮助消息。

-l | --list-categories 列出您的已连接设备可用的跟踪类别。

查看当前应用的自定义事件如

TraceCompat.beginSection(“name”)

使用 app 生成的html就有自定义事件

1
systrace.py -a com.duowan.gamevoice app

或者

1
systrace.py -a com.duowan.gamevoice android
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
绿色:正在运行

线程正在完成与某个进程相关的工作或正在响应中断。

蓝色:可运行

线程可以运行但目前未进行调度。

白色:休眠

线程没有可执行的任务,可能是因为线程在遇到斥锁定时被阻止。

橙色:不可中断的休眠

线程在遇到 I/O 操作时被阻止或正在等待磁盘操作完成。

紫色:可中断的休眠

线程在遇到另一项内核操作(通常是内存管理)时被阻止。

dump 当前activity的信息

1
adb shell dumpsys activity com.duowan.gamevoice >> black2.txt

打开当前文件夹

1
open .

多个设备连接,adb shell指定设备执行命令

1
adb -s 8f7e64ba shell dumpsys meminfo

查看java 安卓目录

1
/usr/libexec/java_home -V

systrace.py -a com.duowan.gamevoice sched freq idle am wm gfx view binder_driver hal \

dalvik camera input res

使用

vim /etc/profile

1
2
3
export ANDROID_NDK_HOME=/Users/hexiang/ndk/android-ndk-r16b

export PATH=${PATH}:${ANDROID_NDK_HOME}

导出数据库db

1
adb exec-out run-as com.duowan.gamevoice tar c databases/ > databases.tar

cat *.txt |egrep -ia “send_failed:”

/GVJump/Jump/user/receive_gift_list?uid=123

exitChannelBroadcast

uid=3304541490

升级android sutdio ide 之后native debug 不了解决办法

1.新建个native 测试demo gradle 会提示,首选的ndk版本

如21.4.7075529

2.gradle 升级

1
classpath "com.android.tools.build:gradle:4.2.1"

查看activity 所有日志命令

1
adb -d logcat -b events -v time -d

查找文件

1
find . -type f -name "*.jar" | xargs grep "TODO"

分析性能好坏

可以使用 adb shell dumpsys gfxinfo ,使用方法如下

首先确定要测试的包名,到 App 界面准备好操作

执行2-3次 adb shell dumpsys gfxinfo com.miui.home framestats reset ,这一步的目的是清除历数据

开始操作(比如使用命令行左右滑动,或者自己用手指滑动)

操作结束后,执行 adb shell dumpsys gfxinfo com.miui.home framestats 这时候会有一堆数据输出,我们只需要关注其中的一部分数据即可

重点关注

Janky frames :超过 Vsync 周期的 Frame,不一定出现卡顿

95th percentile :95% 的值

HISTOGRAM : 原始数值

PROFILEDATA :每一帧的详细原始数据

进出启动查看

1
adb logcat -b events | egrep "am_proc_died|am_proc_start"

activity启动查看

1
adb logcat -b events | egrep -ia "activity

sudo xcode-select –switch /Users/hexiang/Downloads/Xcode.app/Contents/Developer

查看flutter 安装目录

1
flutter doctor -v

gfxinfo 还可以拿到渲染相关的内存和 View hierarchy 信息。在 Android 6.0 之后,gxfinfo 命令新增了 framestats 参数,可以拿到最近 120 帧每个绘制阶段的耗时信息。

1
adb shell dumpsys gfxinfo com.duowan.gamevoice framestats

Surface 都会有三个 Graphic Buffer,那如何查看 Graphic Buffer 占用的内存,系统是怎么样管理这部分的内存的呢

1
adb shell dumpsys SurfaceFlinger

dumpsys gfxinfo的信息详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Graphics info for pid 31148 [com.android.settings]: 表明当前dump的为设置界面的帧信息,pid为31148

Total frames rendered: 105 本次dump搜集了105帧的信息

Janky frames: 2 (1.90%) 105帧中有2帧的耗时超过了16ms,卡顿概率为1.9%

Number Missed Vsync: 0 垂直同步失败的帧

Number High input latency: 0 处理input时间超时的帧数

Number Slow UI thread: 2 因UI线程上的工作导致超时的帧数

Number Slow bitmap uploads: 0 因bitmap的加载耗时的帧数

Number Slow issue draw commands: 1 因绘制导致耗时的帧数

HISTOGRAM: 5ms=78 6ms=16 7ms=4 ... 直方图数据,表面耗时为0-5ms的帧数为78,耗时为5-6ms的帧数为16,同理类推

AGi 安装失败

Android GPU Inspector (AGI)

1
2
3
I20220106-103713027[server.ChildProcess-gapis][server.ChildProcess.runProcess] Killing gapis

W20220106-103713028[server.ChildProcess-gapis][server.ChildProcess.onExit] The gapis process exited with a non-zero exit value: -1

host 找不到映射本地ip

1
2
3
4
5
6
7
8
9
hexiang@hexiangdeMacBook-Pro ~ % /Applications/AGI.app/Contents/MacOS/gapis ; exit;

02:41:19.306 I: <gapis> Adding new device

02:41:19.306 I: <gapis> New scheduler for device: 8a60cfa8aad527f1ebf79cf9a1767881cfd5fa70

02:41:19.306 I: <gapis> New trace scheduler for device: 8a60cfa8aad527f1ebf79cf9a1767881cfd5fa70 hexiangdeMacBook-Pro.local

02:41:19.328 F: <gapis> Could not start grpc server at localhost:0: listen tcp: lookup localhost: no such host

下载个switchhost 软件配置下host

https://github.com/oldj/SwitchHosts

1
127.0.0.1 localhost

app_package=

abi=arm64v8a # Possible values: arm64v8a, armeabi-v7a, x86

adb shell settings put global enable_gpu_debug_layers 1

adb shell settings put global gpu_debug_app com.example.ponycui_home.svgaplayer

adb shell settings put global gpu_debug_layer_app com.google.android.gapid.armeabi-v7a

adb shell settings put global gpu_debug_layers VK_LAYER_KHRONOS_validation

systrace.py -a com.duowan.gamevoice sched am wm gfx view dalvik input res -t 20

mac安装了多个java版本

1
2
3
4
5
6
7
8
9
10
11
#查看安装了几个java

/usr/libexec/java_home -V

#查看当前java版本

java -version

#设置当前terminal 使用哪个java版本,设置路径就可以了

export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

jdk环境配置

1
2
3
4
5
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

崩溃异常辅助日志搜集

/system/bin/logcat 手机自己的日志工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查看崩溃日志缓冲区(默认)

/system/bin/logcat -b crash

#查看系统系统事件缓冲区消息

/system/bin/logcat -b events

#查看主要日志缓冲区(默认),不包含系统和崩溃日志消息。

/system/bin/logcat -b main

#查看系统日志缓冲区(默认)

/system/bin/logcat -b system

android debug 系统进程

debug系统进程需要root权限

下载模拟器需要下载不带google play 和google api的

下载 android xx.x 后面直接显示版本的,这个是自带root的

4befe29077ca05a21ea769d1482dc48e.png

62d9647d67561455a0a98383addd268f.png

查看所有进程内存情况

1
adb shell procrank