android开机优化

—framework层的启动优化

文章目录

  • android开机优化
  • 前言
  • 一、系统应用裁剪
  • 二、系统服务裁剪
    • 1.SyStemServer和SystemServiceRegistry修改
    • 2.ZygoteInit优化
    • 3.开机动画修改
    • 4.其他细节修改
  • 总结

前言

androd开机启动时间优化包括三个部分,uboot, kernel,framework启动优化
有些平台用preloader和lk代替了uboot启动,本质上差不多


一、系统应用裁剪

这部分相对来说最简单,就是做系统开发的时候,不需要的系统应用可以直接裁掉,再对应的脚本中删掉对应的编译模块就行,找找device目录下面的PRODUCT_PACKAGES关键字,不需要的屏蔽掉,
另外再build\target\product下面的mk文件中, 也有一些,如telephony_system.mk,可以找到类似的mk是再哪里添加编译的,直接去掉
如果有大量的app需要裁掉, 不进行编译,可以修改build/core/main.mk,在对应的项目中新建deviceDelete.mk然后像PRODUCT_PACKAGES一样定义DELETE_PACKAGE_LIST+=xxxxx;
DELETE_LIB_LIST+=xxxxx;
然后再对应项目的device.mk中,把deviceDelete.mk加入编译,如下
$(call inherit-product, device/mediateksample/项目名/deviceDelete.mk)

在core/product.mk中搜索_producr_var_list ,然后把DELETE_PACKAGE_LIST和DELETE_LIB_LIST加上;注意这点很重要
在build/core/main.mk中的
ALL_DEFAULT_INSTALLED_MODULES := $(modules_to_install)这个前面添加, 有些编译脚本不太一样,找到这种赋值类似的地方,在前面修改即可

   ifdef DELETE_PACKAGE_LISTmodules_to_install := $(filter-out $(foreach pkg, $(DELETE_PACKAGE_LIST), $(pkg) %/$(pkg).apk  %/$(pkg).odex  %/$(pkg).vdex), $(modules_to_install))  #sub_model := $(filter-out $(foreach pkg, $(DELETE_PACKAGE_LIST), $(pkg)), $(sub_model))#$(foreach d,$(DELETE_PACKAGE_LIST),$(info delete-list: $(d)))#$(foreach d,$(modules_to_install),$(info after-delete: $(d)))  endif#要删除的不只是apk的生成, 有一些jar或者lib so的生成也可以再这里去掉ifdef DELETE_LIB_LISTmodules_to_install := $(filter-out $(foreach pkg, $(DELETE_LIB_LIST), %/$(pkg) %/$(pkg).jar %/$(pkg).so), $(modules_to_install))#sub_model := $(filter-out $(foreach pkg, $(DELETE_PACKAGE_LIST), $(pkg)), $(sub_model))#$(foreach d,$(DELETE_LIB_LIST),$(info DELETE_LIB_LIST-list: $(d)))#$(foreach d,$(modules_to_install),$(info DELETE_LIB_LIST-after-delete: $(d)))  endif#下面这句是打印所有的进行编译的模块
$(foreach d,$(modules_to_install),$(info moudle after-delete: $(d)))

二、系统服务裁剪

1.SyStemServer和SystemServiceRegistry修改

这部分,其实就是在systemServer启动的时候,服务的加载,有一些不需要的服务,全部屏蔽掉,当然,裁掉之后对应的一些app 也要全部裁掉, 不然, 会报错,裁错了,开机会卡在开机动画那里或者一直重复开机动画,不要怕,adb抓log ,看哪里报错,修改屏蔽掉就可以,尽量一个个修改验证,单独mm编译framework/base/services/是可以的, 要先删除out\target\product\项目名\obj\JAVA_LIBRARIES\services_intermediates这个目录,有一些平台还需要删除static和share的中间文件
\STATIC_LIBRARIES\libservices.core_intermediates
SHARED_LIBRARIES\libservices_intermediates
一般删除这三个文件夹,然后mm重新编译, push 到/system/framework/service.jar,reboot重启就能验证,下面是一些可以直接关掉的服务
VibratorService 震动器服务
ClipboardService 粘贴板服务
FingerprintService 指纹
StartCountryDetectorService 检测国家地区的

也有一些 定制系统不需要的服务,可以裁剪掉,只是会报错,不要急,看log 一步步修改错误就行

BatteryService 电池服务,当电量不足时发广播
WallpaperManagerService 壁纸管理服务
每个平台在裁剪这些的时候,都会有一些坑, 比如MTK的裁掉壁纸服务,在他们的duraspeed中,
会用到壁纸服务,也不知道是为啥。。这么其特,这个是mtk直接源码里面的jar包, 最后生成duraspeed的apk,中文名叫快霸,为了使用时间长的时候,自己清理内存,加速优化的,我直接裁掉了这个apk,壁纸服务才能裁掉,不然启动不了
这部分自己看一下,还要一些是自己的定制系统用不到的服务, 屏蔽掉, 不启动,报错就修改代码
然后再SystemServiceRegistry中,关掉对应的manager,当然, 有一些会报错,继续修改

2.ZygoteInit优化

这里其实没有特别大的修改,下面这个屏蔽掉,直接加载systemserver,减少时间其实不明显
/* For child process */
if (pid == 0) {
//if (hasSecondZygote(abiList)) {
// waitForSecondaryZygote(socketName);
//}
zygoteServer.closeServerSocket();
return handleSystemServerProcess(parsedArgs);
}
下面的这个就比较神奇了,印象中android4.4的时候,再zygoteinit的preload方法中,是可以直接new thread进行class加载和resource加载的加速的,但是再8.0上,修改的时候才发现会问题,因为直接new thread会报错,提示你不能再zygoteinit中新建线程,很奇怪,看代码,
// Mark zygote start. This ensures that thread creation will throw
// an error.
ZygoteHooks.startZygoteNoThreadCreation();这里就禁止开线程,
ZygoteHooks.stopZygoteNoThreadCreation();这里就取消禁止,
我如果要并行加载class和resource资源,需要屏蔽这里,然后在 preload 用线程池,或者new thread来并行操作,
建议加上信号量的判断,不知道信号量的,自己百度,还可以用future类来保证运行顺序,这里不并行的话,preloader是在2S左右,并行的话,可以减少1S,测试过是可以,但是没有进行大量的测试,哪位同学修改之后的话,测试效果如何,可以留言说一下
也不知道8.0之后加上这个限制是什么原因,目前没有深入研究, 没有特别的需求可以不修改


3.开机动画修改

这个部分,其实每个平台的都不一样,以mtk的为例
首先,要清楚开机流程,开机动画启动的时候,后台实际上systemserver已经是启动的,所以开机动画不能太长,不然就是systemserver在等待动画完成,其次,动画的分辨率要合适,简单来说就是画质不要太高,避免加载时间长,同时消耗资源,另外开机声音,像mtk的就很坑,开机声音的播放需要等到mediaserver起来,然后通过mediaserver播放开机声音,等待起来要3-4s,这不是坑吗。。。 果断关闭开机声音, 当然,也可以, 直接去掉开机动画,如果需要的话,直接放一张图上去
在init.rc中start bootanim, 就是启动bootanim服务,文件在./system/etc/init/mtkbootanim.rc中,
这个是mtk自己修改的, 其他平台的名字可能不叫这个
关闭声音,关掉开机动画的话,有些有定义,具体实现看BootAnimation中的代码
比如mtk关闭声音可以修改persist.sys.mute.state=1就行
取消开机动画,可以直接在inir.rc中 ,去掉start bootanim

4.其他细节修改

out目录下的./vendor/etc/permissions/handheld_core_hardware.xml文件
找到对应项目中的整个文件,有些feature可以去掉
如 打印服务
桌面窗口组件
camera服务,有些不要的

init.rc 不启动不需要的服务。像cameraserver,一般不需要改
查看串口启动的log,一些不要的 .rc的文件,全部去掉,不运行

总结

android开机优化-framework相关推荐

  1. android 5.1.1开机优化(framework层)

    转自:http://blog.csdn.net/xxm282828/article/details/49095839 Android原生系统中对于开机这一块并未做深度的优化,由于领域的限制,这里仅仅对 ...

  2. android开机优化工具箱,【谷歌Android帝】dexopt(odex)优化方法,人人都是优化大师!!!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 什么是ODEX? ODEX是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除.这样做可 ...

  3. android开机优化服务,Android开机速度优化简单回顾

    Android的开机速度,基本上没人说快的,通常移植完系统后,马上要看的事情就是优化开机时间,以下是简单回忆以下以前做优化的那些事. 开机时间都花在哪? 优化开机时间,通常做的首先是那有有没有BUG, ...

  4. Android 开机优化

    原址 问题描述 开机时间相对参考机过慢,大约慢15s左右.Android 系统7.0. 问题分析 开机问题涉及的层次较多,大致有bootloader–>kernel–>Zygote–> ...

  5. android 进lanucher的广播,Android开机优化之调整Launcher的加载时间

    前言 如前面两篇文章所描述的, 我们对Android系统的开机时间优化有了一个比较全面的了解,以及一些常用的调试手段(bootchart等),在这篇文章中我们先来看看如下这个问题,首先看一张图: 如上 ...

  6. 【Android系统】Android开机时间分析

    参看博客: https://www.jianshu.com/p/30fdf86c3462?from=singlemessage                                      ...

  7. android 性能优化---(2) MTK 平台开机时间优化

    一.在工程模式开启MTKLogger, 开机后取日志bootprof  adb pull /storage/emulated/0/mtklog/mobilelog/APLog_2018_0309_10 ...

  8. Android开机启动性能优化

    Android 开机启动速度优化 一 在开机启动中,可以借助bootchart 工具分析android的启动过程.bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自 ...

  9. 浅谈Android开机启动速度优化(含应用程序启动速度优化)

    众所周知Android开机启动速度较慢,于是如何加快启动速度便成为一个值得讨论的问题. 在查阅过许多资料后(特别是Google Group的android-platform),我整理总结出下面几点基本 ...

  10. Android开机启动速度优化 app启动速度优化

    众所周知Android开机启动速度较慢,于是如何加快启动速度便成为一个值得讨论的问题.在查阅过许多资料后(特别是Google Group的android-platform),我整理总结出下面几点基本看 ...

最新文章

  1. 程序员们,今天就让她陪你们放松一下吧。她还有大宝剑哦。【原创】
  2. unity创建一个简单对象的开销_Unity下简单对象池的创建与使用
  3. Java并发编程笔记之ThreadLocal内存泄漏探究
  4. 面试官:说一下Jena推理
  5. “软下来”的苹果和小米能否拯救智能手机的焦虑? | 畅言
  6. 华为海思总裁凌晨邮件燃爆全国:多年备胎一夜转“正”,今后要科技自立
  7. 昔年浅谈做害虫消杀防护的用什么推广效果好?
  8. bzoj 4443: [Scoi2015]小凸玩矩阵(二分+二分匹配)
  9. mysql in和or扫描全表_MySQL对OR条件查询不支持优化,会进行全表扫描
  10. angular.isString()
  11. LeetCode系列之【12/13.罗马字符转整数(或相反)】C++ 经验总结
  12. 有道词典的本地/扩展/离线词库
  13. scrum 和敏捷介绍(概念、流程、自己的理解)
  14. 高中计算机八字标语,高中励志八字标语40句
  15. 机器学习简介及常用算法
  16. 组合电路中的竞争与冒险
  17. Hive第一天——Hive介绍以及简单使用
  18. Configure文件学习
  19. 牛投客- 股票与股权投资的区别是什么?
  20. 人脸检测SRN网络笔记

热门文章

  1. IEEE MAC地址分配
  2. 使用for循环打印出大写字母的ASCII码对照表(c语言实现)
  3. 地理分析方法论|地理探测器(Geo Detector)
  4. Adams— 系统级多体动力学仿真平台
  5. 哪些思维方式是你刻意训练过的?
  6. Java面试题全集(上)
  7. 麻省理工18年春软件构造课程阅读07“设计规格说明”
  8. Java的Jsoup爬虫
  9. 电脑桌面数字时钟c语言,DesktopDigitalClock(桌面数字时钟)
  10. 车路协同 智能路侧决策系统总体架构及应用