Android开机时间系统优化

1. 删除无用的系统应用

1.1. 可删除的系统应用网络参考

1.2. 自己整理的本系统可以删除的应用如下所示:

1.  /system/app 目录: 
CalendarImporter 
EngineerMode 
HyCustomReceiver 
MtkBt(蓝牙相关) 
OmacpAtciService 
CertInstaller 
Exchange2 
SoundRecorderAutoDialer 
DataTransfer 
FWUpgrade 
LiveWallpapers 
MtkWeatherProvider 
PackageInstaller 
SystemUpdateBSPTelephonyDevTool 
DeskClock 
FWUpgradeProvider 
LiveWallpapersPicker 
MtkWeatherWidget 
PhaseBeam 
SystemUpdateAssistantBatteryWarning 
Development 
FileManager 
LocationEM2 
Music PicoTts 
UserDictionaryProviderBluetooth 
DeviceTestApp 
Galaxy4 
MusicFX 
PrintSpooler 
VisualizationWallpapersDocumentsUI 
Gallery2 
MTKLoggerCalculator  
HTMLViewer 
MTKThermalManager 
NlpService 
QuickSearchBoxCalendar 
Email 
HoloSpiralWallpaper 
NoiseField 
SchedulePowerOnOff
2.  /system/priv-app/ 目录: 
BackupRestoreConfirmation 
GooglePinyin 
WiFiTestCalendarProvider 
DownloadProvider 
Tag 
mobileinfo 
Launcher3 
FmRadio 
RaindiAppstore 
Shell

1.33 修改下面文件中的 PRODUCT_PACKAGES 字段的内容,将不需要的内置应用的名称删除,这样可以缩短 scan packages 的过程。

build/target/product/core.mk
build/target/product/full_base.mk
build/target/product/full_base_telephony.mk
build/target/product/generic_no_telephony.mk

同时,可以删除 packages 文件中的不必要的 app 源码,这样可以缩短编译时间。修改完之后,重新 make snod 编译 system.img 镜像即可。

优化效果:开机时间缩短10秒左右。

2. kernel 优化

2.1 在kernel中修改log默认等级

优化效果: 开机时间缩短8s左右。

kernel-3.10/include/linux/printk.h

修改 static inline void console_verbose(void) 函数中的 console_loglevel 的值,从默认的15改成2, 然后重新编译内核

2.2 修改config文件

优化效果:和精简版本进行对比diff的地方不多,修改完之后几乎没有提升速度
在 kernel-3.10 目录运行:

ARCH=arm64 scripts/kconfig/merge_config.sh arch/arm/configs/ap7350_65u_l1_debug_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg

在本目录下生成 .config 文件,此文件是具有极简的 defconfig,用这个文件和系统的defconfig文件进行对比,进行删减。(可以使用 scripts 目录中的 diffconfig 文件查看两个文件的不同)

3. service 精简

优化效果 :网上其他人说去除动画会提升很多,但是我们的系统效果不明显,1s左右。
修改:

system/core/rootdir/init.rc

去掉开机动画服务 service bootanim
也可以 adb shell 删除动画:

/system/bin/bootanimation

4. doex 优化

优化效果:这个部分系统中已经进行了优化,没有起到优化作用。
ODEX优化
系统已经进行在builde/target/board/里面进行了odex优化

5 preloader 优化

优化效果:没有什么效果。
优化 ZygoteInit 的类预加载 preloaderClasses 和资源预加载 preloaderResources 机制

  • 删除不必要的classes(没有进行尝试,不知道具体删除哪些class)
  • 删除preloader加载的res文件(尝试将所有preloader里面的res文件删除,刷机之后出现不断重启,没有成功)

6、查看系统启动时间的命令

查看精简启动过程:

adb logcat –b events | grep boot
// user space 开始时间
07-06 22:18:00.136 I/boot_progress_start(  407): 15528 
//Zygote 进程preload 开始时间 32bit zygote
07-06 22:18:03.846 I/boot_progress_preload_start(  407): 19238
//Zygote 进程preload 开始时间64bit zygote
07-06 22:18:04.551 I/boot_progress_preload_start(  408): 19943
//Zygote 进程preload 结束时间32bit zygot
07-06 22:18:06.313 I/boot_progress_preload_end(  407): 21705
//Zygote 进程preload 结束时间64bit zygote
07-06 22:18:06.356 I/boot_progress_preload_end(  408): 21747
//System server 开始运行时间
07-06 22:18:06.462 I/boot_progress_system_run( 2182): 21853
//Package Scan 开始
07-06 22:18:06.784 I/boot_progress_pms_start( 2182): 22176
//System 目录开始scan
07-06 22:18:06.899 I/boot_progress_pms_system_scan_start(2182): 22290
//data 目录开始scan
07-06 22:18:38.644 I/boot_progress_pms_data_scan_start(2182): 54036
//package scan 结束时间
07-06 22:18:38.660 I/boot_progress_pms_scan_end( 2182):54052
//package manager ready
07-06 22:18:38.882 I/boot_progress_pms_ready( 2182): 54274
//Activity manager ready,这个事件之后便会启动home Activity。
07-06 22:21:40.221 I/boot_progress_ams_ready( 2182): 235613
//HomeActivity 启动完毕,系统将检查目前所有的window是否画完,如果所有的window(包括wallpaper, Keyguard 等)都已经画好,系统会设置属性service.bootanim.exit值为1.并且trigger下面的event。
07-06 22:21:52.740 I/boot_progress_enable_screen( 2182):248132
Boot_progress_enable_screen表示系统启动完成。

在本项目中因为launcher应用启动速度占用了时间较长,导致ams_ready到enable_screen的时间较长。
查看具体启动过程:abd shell “cat /proc/bootprof”

补充说明:

刷机中遇到的问题
问题:

  • 将preloaderResource删除之后系统不能启动,无法在开发者模式里面将“oem解锁”打开,导致在fastboot oem unlock 时不能成功,从而不能刷入新的系统;
  • 解决办法:
    将fastboot oem unlock改成fastboot oem lock,成功解锁。
    原文作者:ouxiyueran
    原文地址: https://www.jianshu.com/p/30fdf86c3462
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞