Android开机时间优化

一:Android开机流程

    开机时间过长会使用户体验很差,所以优化开机时间是项很关键的工作。想优化开机时间,了解清楚开机流程是很有必要的,下图为比较简洁的开机流程图。

1. BootLoader识别到开机事件进行开机,初始化一些外设,播放logo

2. kernel加载硬件有关的驱动,启动userspace第一个进程-init进程

3. init进程解析init.rc文件,创建、挂载分区,启动zygote进程

4. zygote进程启动systemserver,fork其他进程

5. systemserver启动系统服务、核心服务、其他服务,包括AMS、PMS、WMS等

6. Launcher启动

本文旨在优化Android启动的过程,对bootloader、kernel等部分暂不涉及。

二:开机日志的获取

  使用user版本,抓取mtklog或者adb logcat -b all > boot.txt抓取开机日志。

三:开机日志的分析

  如果是mtklog,在event log中搜索boot_progress。如果是adb抓取的logcat,同样在boot.txt文件中搜索boot_progress。每行最后的数字代表该阶段的耗时,单位是毫秒。

08-24 20:42:57.811 810 810 I boot_progress_start: 6082
08-24 20:42:58.854 810 810 I boot_progress_preload_start: 7125
08-24 20:42:59.966 810 810 I boot_progress_preload_end: 8237
08-24 20:43:00.587 1385 1385 I boot_progress_system_run: 8858
08-24 20:43:01.368 1385 1385 I boot_progress_pms_start: 9639
08-24 20:43:01.500 1385 1385 I boot_progress_pms_system_scan_start: 9771
08-24 20:43:01.861 1385 1385 I boot_progress_pms_data_scan_start: 10132
08-24 20:43:01.864 1385 1385 I boot_progress_pms_scan_end: 10134
08-24 20:43:01.965 1385 1385 I boot_progress_pms_ready: 10236
08-24 20:43:03.161 1385 1385 I boot_progress_ams_ready: 11432
08-24 20:43:04.100 1385 1497 I boot_progress_enable_screen: 12371
08-24 20:43:05.542 1385 1497 I wm_boot_animation_done: 13813

boot_progress解读

阶段描述
boot_progress_startkernel启动完成,系统进入userspace
boot_progress_preload_startzygote启动
boot_progress_preload_endzygote结束
boot_progress_system_runsystemserver开始启动系统服务
boot_progress_pms_startPMS开始扫描安装的应用
boot_progress_pms_system_scan_startPMS开始扫描system分区下应用
boot_progress_pms_data_scan_startPMS开始扫描data分区下应用
boot_progress_pms_scan_endPMS扫描结束
boot_progress_pms_readyPMS就绪
boot_progress_ams_readyAMS就绪
boot_progress_enable_screenAMS启动完成,开始激活屏幕
sf_stop_bootanim系统将要结束开机动画
wm_boot_animation_done开机动画结束

一般和对比机对比,哪个阶段耗时较多,再针对性的分析优化。

四:常规优化措施

4.1 日志中是否有大量avc: denied,如果有则添加相应的selinux权限。

4.2 日志中是否有大量[kworke]打印,如果有则修改kernel log level

    4.2.1 mtk项目

device/mediatek/mt*/init.mt*.rc文件中添加

on property:ro.build.type=user
    write /proc/sys/kernel/printk "1 4 1 7"

    4.2.2 高通项目

device/qcom/common/rootdir/etc/init.qcom.sh文件中修改

buildvariant=`getprop ro.build.type`
case "$buildvariant" in
    "userdebug" | "eng")
        #set default loglevel to KERN_INFO
        echo "4 6 1 7" > /proc/sys/kernel/printk
        ;;
    *)
        #set default loglevel to KERN_WARNING
-        echo "4 4 1 4" > /proc/sys/kernel/printk

+        echo "1 4 1 4" > /proc/sys/kernel/printk
        ;;

4.3 dex2oat优化耗时

  系统第一次开机,会对应用做dex优化,体现在日志里就是boot_progress_ams_ready的时间很长,继续搜索dex2oat32: dex2oat took,可以看到是哪些应用做dex优化耗时较久。

  解决方案:

      1) 裁剪应用,减少预置应用数量;

      2) 在编译时做dex优化,用空间换时间。在build/make/core/dex_preopt.mk文件中添加

            DONT_DEXPREOPT_PREBUILTS := false

      3) 搜索如下日志,看应用dex2oat是32还是64位指令集。out=/data/dalvik-cache/arm64 代表是64位的,out=/data/dalvik-cache/arm 代表是32位的。

installd: Running /apex/com.android.art/bin/dex2oat32 in=YouTube.apk out=/data/dalvik-cache/arm64/product@app@YouTube@YouTube.apk@classes.dex

        对于64bit的芯片,若apk只有32bit的lib或者只能作为32bit运行,请在预置apk时在android.mk中添加下边的TAG标记此apk为32bit:LOCAL_MULTILIB :=32;开机之后既提取arm又提取arm64的apk,请设定LOCAL_MULTILIB :=both

    4) check 系统Service的启动时间,看是否有耗时较多的,针对性的处理

    5) 开机过程提频,利用的ppm机制。 在device下面项目对应的init.project.rc文件中增加如下修改

on early-init
    ...

+    write /proc/ppm/policy/ut_fix_core_num 4
+    write /proc/ppm/policy/ut_fix_freq_idx 0

on property:sys.boot_completed=1
    ...

+    write /proc/ppm/policy/ut_fix_core_num -1
+    write /proc/ppm/policy/ut_fix_freq_idx -1

4.4 开机动画

  如果boot_progress_ams_ready时间差不多,wm_boot_animation_done耗时较久,大概率动画资源问题,可尝试减少开机动画张数看是否有优化。

4.5 精简servcies

  减少系统服务的数量,非必要服务直接裁剪或者延后启动

4.6 精简apk包

  1)删除没有用到的图片、资源文件、jar包、so库

  2)自研APP,如果设备只会加载drawable-xhdpi中的资源,在drawable包重复的资源可以直接删除

  3)自研APP,如果只有少量语言需求,把不需要的语言资源都删除

  4)apk中只保留和系统适配的so文件,比如:armv7和arm64的so文件只保留一个

后续有好的措施会持续更新

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: android 系统开机优化是为了提高手机开机速度和用户体验而进行的一系列优化措施。以下是一些常见的 android 系统开机优化方法: 1. 延迟应用启动:android 系统在开机时会延迟一些应用的启动,只加载系统核心应用和服务,而将其他应用推迟启动。这样可以加快开机速度,用户可以更快地使用手机。 2. 启动器优化android 系统的启动器负责显示桌面、应用图标等信息。优化启动器可以减少启动器的加载时间,提高用户切换桌面的响应速度。 3. 禁用不必要的预装应用:很多手机厂商在出厂时会预装一些应用,这些应用可能对用户来说是多余的。禁用不必要的预装应用可以减少开机时加载的应用数量,提高开机速度。 4. 清理缓存:android 系统在使用过程中会生成大量的缓存数据,这些数据占用了手机的存储空间,并且可能导致系统开机慢。定期清理缓存可以释放存储空间,并提高开机速度。 5. 系统更新:android 系统的更新通常包含一些性能优化和 bug 修复,及时更新系统可以提高开机速度和系统稳定性。 综上所述,android 系统开机优化是通过延迟应用启动、启动器优化、禁用不必要的预装应用、清理缓存和系统更新等方法来提高手机开机速度和用户体验。 ### 回答2: Android系统开机优化是指针对手机的开机过程进行优化,以提高系统启动速度和用户体验。主要涉及以下方面的优化措施: 1. 减少开机自启动应用:开机时系统会自动加载一些应用程序,但这些应用可能会消耗系统资源和影响开机速度。通过减少不必要的自启动应用,可以加快系统启动时间。 2. 禁用系统预装应用:大多数手机在出厂时都预装了一些应用,但这些应用不一定被用户所需要。通过禁用一些不常用或不必要的预装应用,可以加快系统启动速度。 3. 清理系统缓存:开机时,系统会加载许多缓存文件,清理这些无用的缓存文件可以提高系统的启动速度。 4. 更新系统和应用程序:及时更新系统和应用程序可以修复漏洞和优化性能,从而提高系统的启动速度。 5. 使用轻量级应用:一些应用程序可能比较庞大或占用较多内存,启动时需要更多时间。选择轻量级应用可以加快系统的启动速度。 6. 关闭动画效果:在开机过程中,系统会显示一些动画效果,这些效果虽然提升了用户体验,但也会增加系统的启动时间。关闭这些动画效果可以加快开机速度。 7. 清理垃圾文件:开机时,系统会扫描和加载许多垃圾文件,清理这些无用的文件可以提高系统的启动速度。 通过对以上方面的优化,可以加快Android系统的启动速度,提升用户的使用体验。 ### 回答3: Android系统开机优化是为了提高开机速度和用户体验,以下是一些常见的优化方法: 1. 系统预加载:Android系统会在开机过程中预加载一些常用的应用和组件,以加快后续启动的速度。 2. 减少开机自启动应用:应用在安装时可以选择是否开机自启动,用户可以根据需求调整自启动应用的数量,减少开机时的负担。 3. 应用冷启动优化:冷启动是指应用被启动时,启动过程中需要加载资源和初始化的时间。开发者可以通过优化应用启动流程、延迟加载资源等方式来减少冷启动时间。 4. 优化系统服务启动顺序:Android系统启动时需要依次启动各个系统服务,优化服务启动顺序可以减少等待时间,提高开机速度。 5. 禁用无用的系统应用:Android系统预装了很多应用,但用户并不一定都需要使用。可以通过禁用一些无用的系统应用来减少开机负担。 6. 压缩系统文件大小:压缩系统文件可以减少开机时系统读取的文件数量和大小,从而提高读取速度。 7. 使用更快的存储设备:更换为高速的存储设备(如固态硬盘)可以显著提高系统开机速度。 总之,Android系统开机优化可以通过预加载、减少自启动应用、冷启动优化优化服务启动顺序、禁用无用系统应用、压缩系统文件大小和使用更快的存储设备等方式来提高开机速度和用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值