Android编译命令
make clobber
printconfig
croot
m 模块名
mmm 相对路径
cd 目录;mm
ADB
adb install xx.apk
adb uninstall 包名
screencap
dumpsys SurfaceFlinger --display-id
screencap -d $id -p /sdcard/s.png
adb pull /sdcard/s.png
投屏&录屏
.\scrcpy.exe --display 2
screenrecord --size 1920x1080 /sdcard/1.mp4
Wm
wm density 120 -d 0
wm size 1920x720 -d 2
指定图层合成方式
service call SurfaceFlinger 1008 i32 0
service call SurfaceFlinger 1008 i32 1
dumpsys SurfaceFlinger --hwclayers
AM
dumpsys package | grep MainActivity
am start -n com.android.webview/org.chromium.android_webview.devui.MainActivity --display 2
am start -n com.android.documentsui/.files.FilesActivity --display 3
am stack list
am display move-stack 1000039 3
选择使用drm card
setprop vendor.hwc.drm.device /dev/dri/card0
setprop vendor.hwc.drm.device /dev/dri/card1
setprop vendor.hwc.drm.device ""
Dumpsys
dumpsys SurfaceFlinger input display
dumpsys SurfaceFlinger --displays
dumpsys SurfaceFlinger | grep DisplayDevice
dumpsys SurfaceFlinger --hwclayers
dumpsys SurfaceFlinger --display-id
dumpsys gfxinfo
1.Janky Frames :超过 16 ms 的帧数 (超过 16 ms 不一定会卡顿,但是会增加卡顿情况出现的风险)
2.耗时帧统计:可以看到大部分帧的区间,以及最大耗时
3.Number High input latency = 30 说明主线程的负载是比较高的
Sdk版本
out/XXX/system/build.prop里面ro.build.version.sdk的值
打印调用栈
#1、添加头文件:
#include "utils/CallStack.h"
#2、在需要打印函数调用栈的函数中添加如下代码:
CallStack stack;
stack.update();
stack.log("LPM_DEBUG");
#3、在函数文件对应的Android.mk中:
LOCAL_SHARED_LIBRARIES := libutils
libutilscallstack
Gdb
adb root
adb remount
ps -A | grep composer
su
gdbserver :1244 --attach 437
adb -s 0.0.0.0:6520 forward tcp:1244 tcp:1244
set ANDROID_SERIAL=0.0.0.0:6520
gdbclient.py --port 1244 -p 437
b HwcDisplay::PresentDisplay
c
bt
gdbclient.py -p 7016 //attach到某个进程
gdbclient.py -n surfaceflinger //attach某个名字的进程
gdbclient.py -r /system/bin/ls /bin //运行并调试某个进程
Toybox
toybox vi