- zygote :预加载类和资源。加载过多会影响开机时间。
- 查看
/sdcard/mtklog/bootprof
文件。 - 减少预加载的类和资源,确保没有冗余的资源图片。
- 查看
- 开机动画进程 :bootanimation 或 mtkbootanimation,走 android 流程比 movie 流程占用内存资源少,开机速度快。
- 开机动画分两种情况:
- 播放 mp3 时,mp3 文件不能过长,最好不要超过 system_server 启动时间。
- 不播放 mp3 时,不会影响开机时间。
- 开机动画分两种情况:
- SystemServer.java :系统服务优化,不需要的服务可以考虑阉割。
- 可以异步加载或阉割掉 DropBoxManagerService 和调试相关的部分。
- 排查其他 Service 是否可以去除。
- system_server 特定服务:非必要的服务可以放在 system_server 进程外启动。
- kernel init 时间长 :检查客户版本的 init.rc 文件相对 Driveronly 版本是否有添加新的 init,这些是否都是必须添加的。
- 在 uartlog 中,查找关键字
------------``[ cut here ]------------
,找到频繁打出的 call stack,排查客制化的点。
- 在 uartlog 中,查找关键字
- uartlog 中排查驱动设备初始化:检查驱动设备初始化是否完成或延时较长。
- dex2oat 导致的开机慢问题 :
- 刷机后第一次开机:在 sys_log.boot 中检查这两个 log 的时间,如果时间较长,打开 DEBUG_DEXOPT 的 log,进一步检查是哪个 apk 在进行 dex2oat。
- 非第一次开机 log:在 bootprof 文件中包含 PMS:performDexOpt,说明在编译时没有打开 dex2oat 选项。
- 若确认为 dex2oat 导致的问题,可以按照下面修改:
- 在
/device
和/build
目录下,修改下面的宏:- build/core/dex_preopt.mk
- WITH_DEXPREOPT := true
- WITH_DEXPREOPT_PIC := true
- DONT_DEXPREOPT_PREBUILTS := false(或注释掉)
- build/core/dex_preopt.mk
- 在
- persist APP 优化 :
- 尽量少把 APP 设置为 persist。
- 优化每个有源码的 persist APP,使其启动尽可能快。
- 精简 apk 包:
- 删除没有用到的图片、资源文件、jar 包文件和 so 文件。
- 预置自己的 APP,删除 drawable 包中重复的资源。
- 预置自己的 APP,删除多语言支持资源。
- apk 中只保留和系统适配的 so 文件。
- 在 Application 的 onCreate 方法中不要有耗时的代码段。
- 通过修改
--compiler-filter
为 speed、quick、speed-profile 来提高 apk 的启动速度。
- 定频定核 :调高 CPU 频率会带来一定的功耗。
- 以 6763 的 O1 版本代码为例:
- 在
/system/core/rootdir/init.rc
文件中添加以下代码:- on early-init
#mtk begin
write /proc/ppm/policy/ut_fix_core_num "4 4"
write /proc/ppm/policy/ut_fix_freq_idx "0 0"
#mtk end - on property:sys.boot_completed=1
bootchart stop
#mtk begin
write /proc/ppm/policy/ut_fix_core_num "-1 -1"
write /proc/ppm/policy/ut_fix_freq_idx "-1 -1"
#mtk end
- on early-init
- 在
- 以 6763 的 O1 版本代码为例:
- 客制化进程的启动速度:关注客制化进程的启动速度是否影响开机速度。
- PackageManagerService :
- 删除没有必要的 apk 包。
- 尝试将单线程 scan 分区里面的 apk 改为多线程异步 scan。
mtk android开机及重启速度优化
amlinsan2024-06-22 18:16
相关推荐
androidwork23 分钟前
Android 内存溢出(OOM)的 Kotlin 排查与优化指南xzkyd outpaper1 小时前
Android中PID与UID的区别和联系Developings1 小时前
Android logcat命令汇总吃着火锅x唱着歌1 小时前
PHP7内核剖析 学习笔记 第八章 命名空间君的名字2 小时前
怎么判断一个Android APP使用了React Native 这个跨端框架君的名字3 小时前
怎么判断一个Android APP使用了Electron 这个跨端框架君的名字4 小时前
怎么判断一个Android APP使用了Qt 这个跨端框架xzkyd outpaper5 小时前
Android中Framework用到了哪些跨进程通信方式珹洺6 小时前
计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度tmacfrank7 小时前
Android 网络全栈攻略(五)—— 从 OkHttp 拦截器来看 HTTP 协议二