Android内核开发:系统启动速度优化

转载 2017年01月03日 09:20:21
Android内核开发:系统启动速度优化
2015-06-23 19:40:41
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/1664754

在学习新知识的过程中,我一直很推荐结合实战任务去学习,只有经历实战,才能加深对理论知识的理解。《Android内核开发》系列已经写了八篇了,本文就结合前面的内容,给大家布置一个实战任务: 优化Android系统的启动速度。


这里我简单介绍一下优化的基本思路和涉及的文件,具体细节由大家自己在实践去摸索,提高自己Google能力和解决问题的能力。


Android系统的启动优化主要分为三大部分:


(1) Bootloader优化

(2) Linux Kernel的剪裁与优化

(3) Android OS部分的剪裁与优化


本文重点关注Android OS部分的启动优化,值得关注的优化点分别介绍如下:


1. 精简preload的classes和resource


前面介绍过,由于所有的Android应用程序都是从Zygote进程fork出来的,所以为了共享一些class和resourse资源,Zygote进程初始化过程中,会预先加载一些常用的java class和资源文件到进程的内存中,这样其他应用fork出来后就不用再次加载了,从而提高了应用的启动速度。


这个过程是可以精简和优化的,你可以减少一些classes和resource的加载,从而加快系统的启动速度。本过程涉及到的文件:


frameworks/base/preload-classes


frameworks/base/core/res/res/values/arrays.xml


2.  精简native service和java service


前面介绍过,Android OS的启动本质上就是启动一系列的本地服务和Java服务,Android系统的所有功能都是通过这些服务间接提供的。


这些服务有很多并不是必须启动的,根据业务需求可以去掉一些,本过程涉及到的文件:


system/core/rootdir/init.rc


frameworks/base/services/java/com/android/server/SystemServer.java


3.  精简预装的apk文件


系统启动过程中,会扫描系统指定目录下的所有apk文件,这个过程也是非常耗时的,预装的apk文件越少,系统启动速度也就越快,因此,精简预装apk也是优化系统启动速度最重要的手段之一。


要想减少预装的apk文件,则需要分析系统的build文件,将不需要的apk编译选项删除掉,本过程涉及到的文件:


build/target/product/xxxx.mk


device/<company>/<product>/xxxx.mk


vendor/..../xxxx.mk


4.  减少内核的log打印级别


过多的log打印消息会显著地增加系统启动的时间,log打印级别有多处可以调整,推荐修改init.rc文件中的loglevel来改变log打印级别。


system/core/rootdir/init.rc


5.  其他优化手段


上面介绍的都是最常用的优化手段,其实还有很多其他的方法,简单列举如下:


(1) 优化启动动画,降低帧率和图片尺寸


(2) 精简系统,减小boot.img文件大小,可以显著减少启动过程中加载和解压boot.img的时间


(3) 预先创建一些目录和文件,而不是在init过程中创建


(4) 其他……


6.  小结


这里我给出一位国外的高手优化的结果作为比较和参考(我的优化结果只提高了40%的启动速度,远没有达到他的效果):


wKiom1WJRXqRrLCVAAFlKtcg5Fg090.jpg


希望大家能在本博文下留言、微博私信或者发邮件给我,告诉我你优化前后的Android系统的启动速度。


关于Android系统的启动速度优化就介绍到这里了,真心希望初学者们能够动手去实践,在实践中逐渐掌握内核开发的基本流程和技巧,然后慢慢深入理解系统的基本原理和理论知识。有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。


本文出自 “Jhuster的专栏” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/1664754

相关文章推荐

Android 开机底层优化

总结本篇博文作为Android 开机优化的续篇,之前的博文在排查底层耗时比较粗糙。本篇作为补充,提供剖析底层耗时的方法...

Android 优化开机启动

Android开机启动慢,是一个众所周知的问题。优化方向: 1、在网上看的资料,对于开机启动来说,耗时最久的是preload classes和scan packages。所以第一个优化方向就是预加载...
  • myvest
  • myvest
  • 2016年06月23日 11:16
  • 2001

Android 启动性能优化 - kernel篇

题目有点大,其实kernel的启动性能调整和Android基本没什么关系,我想应该适用所有使用Linux的嵌入式设备 时间测量 说到性能调整,第一件该干的的事就是看下时间到底消耗在哪里...

Android持续优化 - 提高流畅度

http://www.cnblogs.com/purediy/p/3492865.html http://www.cnblogs.com/purediy/p/3492865.html ht...

Linux内核是如何启动android内核直到我们的helloword

首先 ,Linux  系统启动的最后一步将读取init.rc这个文件,这个文件我们一般的android手机,Linux内核就是通过这个文件来启动我们的android内核的。 init.rc路径: ...

Android内核解读-Android系统的开机启动过程

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/19302593前言当长按手机的power键,Android手机就会开机,那么A...

深入理解Android内核——Android启动分析

系统启动进程android设备的启动分为三个阶段:Boot Loader, Linux Kernel,Android 系统服务。Android系统实际上是运行在Linux Kernel之上的一系列系统...

Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据

jintian 为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。) 点击浏览器中的URL链接,启...

android内核剖析学习笔记:AMS(ActivityManagerService)内部原理和工作机制

一、ActivityManagerService提供的主要功能: (1)统一调度各应用程序的Activity (2)内存管理 (3)进程管理 二、...

Android的优化

1         General 1 编译release版本 2 除报错信息外,去除所有的打印信息,对于部分常规错误,也可以关闭打印信息 3 Config.java public stati...
  • new_abc
  • new_abc
  • 2012年11月23日 16:53
  • 7810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android内核开发:系统启动速度优化
举报原因:
原因补充:

(最多只允许输入30个字)