1. adb shell wm size
Physical size: 1600x480
2. adb shell wm density
Physical density: 160
3:打开window 动态调试开关
dumpsys window -d enable a
AMS log开关命令:adb shell dumpsys activity log x on
user版本请如下打开AMS log开关:
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
static boolean DEBUG_ALL = false; //置为true
4:readelf -t fingerprint.default.so 读取elf文件段信息
readelf --string-dump=".sunwave.version" fingerprint.default.so 从版本段获取版本信息
5:打开与关闭mtklog
adb shell am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name start --ei cmd_target 7
adb shell am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name stop --ei cmd_target 7
userdebug 抓systrace, 需要打开mtklog
adb shell aee -d coreon
adb shell aee -d directon
adb reboot
启动mtklog am start com.mediatek.mtklogger/.MainActivity
启动sprd log am start com.sprd.engineermode/.EngineerModeActivity
外销开机向导是有紧急拨号盘的,进入紧急拨号盘按*#812#可以跳过开机向导,状态栏以及导航键也可以正常使用
am start com.oppo.logkit/.main.OppoLogkitLoggingActivity
*#800#
*#8778# 打开恢复出厂设置
7、参考settings数据库
settings list system|grep bri
8、关闭odex 编译
build/core/dex_preopt.mk
# The default value for LOCAL_DEX_PREOPT
ifeq ($(TARGET_BUILD_VARIANT),eng)
DEX_PREOPT_DEFAULT ?= false
else
DEX_PREOPT_DEFAULT ?= true
endif
9、打印函数调用堆栈
// Binder.clearCallingIdentity();
Slog.d(TAG, "_callingPid=" + Binder.getCallingPid() + ", " + "callingUid=" + Binder.getCallingUid());
//Binder.getCallingPid();
// Binder.getCallingUid();
// Binder.clearCallingIdentity();
// Binder.restoreCallingIdentity();
Throwable throwable = new Throwable();
StackTraceElement[] stackElements = throwable.getStackTrace();
if (null != stackElements) {
for (int i = 0; i < stackElements.length; i++) {
String szMethodName = stackElements[i].getMethodName();
Slog.d(TAG, "dual parsePackageSplitNames: szMethodName = " + szMethodName);
}
}
Slog.wtf(TAG, "showBouncer ", new Throwable());
Slog.d(TAG,"passwordToHash = " + password + ", caller = " + Debug.getCallers(9));
10、查看event 事件
getevent -l /dev/input/event4
11、列出系统有图标应用
cmd package query-activities -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x00000010
12、截屏
adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png
13、Ext4 文件挂载
simg2img $1 $1.ext4
mkdir tmp
sudo mount -t ext4 -o loop $1.ext4 tmp
mount –o remount,rw custpack
14、
adb shell
while true;do date >> /sdcard/mtklog/dumpsys_meminfo.txt;dumpsys meminfo >> /sdcard/mtklog/dumpsys_meminfo.txt;sleep 5;done
14、设置屏幕背光不熄灭的方法
设置屏幕背光不熄灭的方法_jaygodlike的博客-优快云博客
15、根据pid 获取进程名
再ams 中增加binder 接口再调用
public String[] getPackagesFromPid(int pid) {
ProcessRecord pr = null;
synchronized (mPidsSelfLocked) {
pr = mPidsSelfLocked.get(pid);
}
return (pr != null) ? pr.getPackageList() : null;
}
14、
netstat -ano | findstr 5037
tasklist | findstr 6560
taskkill /f /t /im process_name
taskkill /f /pid 2612
setprop service.adb.tcp.port 5555
adb nodaemon server ####查看5037 是否被占用
15、
打开测试机状态栏上秒的功能
adb shell pm enable com.android.systemui/com.android.systemui.tuner.TunerActivity
adb shell am start -n com.android.systemui/com.android.systemui.tuner.TunerActivity
16、手机解锁:
adb reboot bootloader
fastboot flashing unlock
fastboot reboot
adb root
adb disable-verity
adb reboot
adb root
adb remount
17、内存
android 内存管理
prorank
memtest 坏点检测、内存填充
malloc_debug
memleak c/c++ 内存泄漏
踩内存 asan
Java的四种引用
强引用,永远都不会被回收的内存,程序宁愿跑出oom也不回回收
软引用,当内存不足时会进行回收(实际回收时会对内存分类标记,GC第一次运行会按优先级回收弱引用和虚引用,这时若内存还是不足,则GC会再执行一次,将软引用回收)
弱引用,GC一开始工作就回回收
虚引用,任何时候都有可能被回收
java 静态域持有对象的应用、java 内部非静态类持有外部类引用,导致对象泄漏
内存优化:开机内存 =》 压缩(zram)、启动控制、应用占用内存
运行时内存 =》 内存压缩、内存泄漏(java/native)、内存碎片管理
1、zram
2、unmovable
3、java heap 参数
4、lmk uevent事件上报(lmk native 泄漏不会杀,这样就可以java统计占内存高给到底层杀掉对应native service)
5、微信加载dex 文件
内存异常
用户态内核态内存异常种类
应用内存泄漏、系统内存泄漏
1、使用未初始化内存
栈上变量、全局变量、局部静态变量没有初始化
2、使用释放的内存如uaf
已经释放堆内存、返回的局部变量、内存踩踏、null、内核中已经释放的内存(page、vmalloc、slab 等)
3、越界
栈溢出、堆溢出、全局变量buffer 溢出、数组越界、数据类型强制转换导致越界访问
4、内存泄漏
进程内存泄漏:Native heap 内存泄漏,如malloc 、new 、brk 、mmap;java heap 泄漏
系统内存泄漏:slab 内存泄漏、vmalloc内存泄漏、alloc_page 内存泄漏
oom 虚拟内存、物理内存
内存异常检测:
未初始化内存、使用释放的内存、越界访问类型:
用户态:uasan、hwasan、gwp-asan(native内存,集成到app)
内核态:kasan、slub_debug
内存泄漏:
用户态 1、 LeakCannary/AndroidProfile、mat
2、malloc_debug、mmap_debug(native)
内核态slub_debug、slubtrace
vmallocinfo
page_owner(stackdepot)
kmemleak
内存管理关键技术
内存管理性能评估
内存优化
内存分配
ION cache pool 、mempool 短时间分配次数多,分配慢,3阶内存使用vmalloc
内存碎片
kernel stack ,2阶内存,不可以移动页污染大内存快;可移动页移动耗时;
减少大内存分配次数,专用slab
内存压缩、内存回收
在一步kswapd 和 同步direct_reclaim 时会触发shrink_node 进行匿名、shmem 压缩到zram
kswapd 场景更深度的内存压缩,direct_reclaim 更快的回收,多回收文件页,kswap回收匿名也较文件页慢
文件缓存
在低内存时手机卡顿,trace 上面很多blockio 在wait_on_page_bit_common,这个时候filecache 被回收了,需要重新加载,从而文件‘颠簸’
后台查杀
malloc_debug 日志解析
google提供了development/scripts/native_heapdump_viewer.py脚本对kill -47抓起的数据进行解析(由于涉及到addr2line等工具和数据,需要测试机器对应版本的编译结果支持)
18、
Snapdragon Profiler - Qualcomm Developer Network
18、
input 传递
https://mp.weixin.qq.com/s/8WR6YfnJrQmRWTbY4s0b7Q
LatencyTracker.cpp
19、知识库
https://androidperformance.com/2018/05/07/Android-performance-optimization-skills-and-tools/
19、高通开源代码网站
有许多厂商的源码库会放在CodeAUrora上 ,例如NXP
codeaurora · GitHub Topics · GitHub
目前在下面git 上
20、linux torvalds github
linux/mm at master · torvalds/linux (github.com)
https://github.com/torvalds/linux/blob/master/mm
18、android 网址
https://developer.android.google.cn -----各个android 版本介绍
Android 开源项目 | Android Open Source Project
https://source.android.com ------源码
19、
google 提交case 查看:
http://code.google.com/p/android/issues/list
google patch 提交查看
https://android-review.googlesource.comj
20、
Android 经典
Linux 经典
数学函数
oppo-source · GitHub
apple
Optimizing ProMotion refresh rates for iPhone 13 Pro and iPad Pro | Apple Developer Documentation
流程图
frameboost3.0函数调用关系| ProcessOn免费在线作图,在线流程图,在线思维导图
Coverity sonar