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

转载 2017年01月03日 09:55: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内核开发》系列已经写了八篇了,本文就结合前面的内容,给大家布置一个实战任务: 优化Andr...

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

Android内核开发:系统启动速度优化 2015-06-23 19:40:41 标签:启动 优化 速度 boot Android 原创作品,允许转载,转载时请务必以超链接形式标...

内核直接NFS挂载Android文件系统启动

(1)首先构建文件系统   采用根文件系统,然后将system和data覆盖根文件系统中的system和data(这俩在根文件系统中是空的) 采用我这篇 :  http://blog.cs...

内核直接NFS挂载Android文件系统启动

内核直接NFS挂载Android文件系统启动 版权声明:本文为博主原创文章,未经博主允许不得转载。 (1)首先构建文件系统   采用根文件系统,然后将system和data覆盖根...

Android 5.0内核和源代码学习(2)——源码下载和系统启动过程分析

一、Android源码下载 上一次简单介绍了Android系统的层次结构,这次开始动真格了——下载源码和分析源码! 那么,Android的源码从哪下?当然是谷歌官网,下载方法官网也讲得很详细,但是...

linux内核启动+Android系统启动过程详解

第一部分:Linux启动之/kernel/arch/arm/boot/compressed/ head.S分析

Android内核移植,以及从普通文件系统启动后手动挂载android文件系统

http://handao.blog.techweb.com.cn/archives/55.html最新 clone 下来的 Android Linux 内核是 2.6.27版本。与最开始发布(m5-...

影响系统启动速度的几个原因

  • 2011年10月24日 23:31
  • 26KB
  • 下载

android开发之源码级分析(系统启动流程 & Handler消息机制 & AsyncTask机制)

All in all,because just begun!
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android内核开发:系统启动速度优化
举报原因:
原因补充:

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