转自:https://blog.csdn.net/godiors_163/article/details/72529210

引言

Android系统在按下开机键之后就会进入启动流程,这个过程本身需要一些时间,而面向用户的往往是厂商定制的一些宣传用的比较绚丽的启动画面。我们在定制自己的系统时,往往需要把这些画面换成我们自己的,一方面可以添加自己的LOGO增加品牌曝光度,另外也可以添加一些特效让用户尝尝鲜。

源码:非官方Android5.1源码

描述

笼统来说,目前android开机画面由三个部分(阶段)组成,第一部分在bootloader启动时显示(静态),第二部分在启动kernel时显示(静态),第三部分在系统启动时(bootanimation)显示(动画)。

1、第一个开机画面: 
Bootloader启动Linux内核时的启动画面(Linux小企鹅的画面)。 
在默认情况下,这个画面是不会出现的(Android 1.5及以上版本已经取消加载图片),除非我们在编译内核的时候,启用以下两个编译选项: 
CONFIG_FRAMEBUFFER_CONSOLE、CONFIG_LOGO 
第一个编译选项表示内核支持帧缓冲区控制台,它对应的配置菜单项为: 
Device Drivers —> Graphics support —> Console display driver support —> Framebuffer Console support。 
第二个编译选项表示内核在启动的过程中,需要显示LOGO,它对应的配置菜单项为: 
Device Drivers —> Graphics support —> Bootup logo。

如有兴趣可以查看内核源码: 
<source>/kernel/goldfish/drivers/video/ 
<source>/kernel/goldfish/drivers/video/logo/ 
...

2、第二个开机画面: 
Android系统 init 进程启动过程中的画面。 
第二个开机画面的内容是由文件 initlogo.rle 来指定的,如果文件 initlogo.rle 文件不存在,或者在显示它的过程中出现异常,那么 Android 就以文本的方式来显示第二个开机画面,即向编号为0的控制台(/dev/tty0)输出“ANDROID”这7个字符。

如有兴趣可以查看系统源码: 
<source>/system/core/init/ 
<source>/system/core/init/init.c 
<source>/system/core/init/logo.c 
...

3、第三个开机画面: 
应用程序 bootanimation 显示的动画。 
bootanimation 程序会检查系统制定目录下是否存在动画文件(.zip文件),如果不存在,则显示的第三个开机画面是Android系统默认的开机动画(明暗闪烁的 Android Logo),否则的话,第三个开机画面就是由用户自定义的开机动画。

如有兴趣可以查看系统源码: 
<source>/frameworks/base/cmds/bootanimation/

方法

我们在定制过程中根据实际需要修改,对于开机启动画面,我们主要修改的是第三个画面(动画)。

1、修改默认的开机画面 
Android系统默认的开机动画是由两张图片android-logo-mask.pngandroid-logo-shine.png通过程序调用实现的动画效果(明暗变化)。 
这两张图片保存在<android-source>/frameworks/base/core/res/assets/images中。

简单替换的方法就是自定义png图片,替换 android-logo-mask.png文件,并重新编译:

$ mmm -B frameworks/base/core/res/

会生成新的<android-source>/out/target/product/xxx/system/framework/framework-res.apk文件,替换的图片就在其中。

2、使用自定义的开机动画 
系统源码中有关开机动画的文件定义了两个宏:

#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"
#define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"

因此我们只要制作名为bootanimation.zip的动画文件,并放到上面其中之一的目录下就好了。 
具体操作如下: 
(1) 制作bootanimation.zip动画包 
1> 准备png图片(大量图片轮播成为动画效果) 
2> 编写动画描述文件 desc.txt,内容格式如下: 
第一行的三个数字分别表示开机动画在屏幕中的显示宽度、高度以及帧速(fps)。 
剩余的每一行都用来描述一个动画片断,这些行必须要以字符“p”来开头,后面紧跟着两个数字以及一个文件目录路径名称。 
第一个数字表示一个片断的循环显示次数,如果它的值等于0,那么就表示无限循环地显示该动画片断。 
第二个数字表示每一个片断在两次循环显示之间的时间间隔,这个时间间隔是以一个帧的时间为单位的。 
文件目录下面保存的是一系列png文件,这些png文件会被依次显示在屏幕中。

举例说明:

600 480 24          // 开机动画大小为宽600 高 480,动画的显示速度为24帧每秒。
p 1 0 part1 // part1目录下png图片显示一次,循环间隔为0帧时间。
p 0 10 part2 // part2目录下png图片无限循环,循环间隔为10帧时间。

(2) 把做好的动画包放入指定目录

$ cp bootanimation.zip <source>/out/target/product/xxx/system/media/

(3) 重新生成 system.img 镜像

后记

不同厂商提供的源码可能有所不同,修改的时候根据实际情况修改。

如需进一步了解,下面有几篇博文可供参考: 
1. Android系统的开机画面显示过程分析: 
http://blog.csdn.net/luoshengyang/article/details/7691321/ 
2. android logo:内核、android开机动画 
http://blog.csdn.net/xubin341719/article/details/8267282

Android定制:修改开机启动画面的更多相关文章

  1. 双系统修改启动项顺序&&&修改开机启动等待时间

    1. 双系统修改启动项顺序 更改/etc/grub.d目录 下的文件名是可行的          默认情况下Windows 7对应的文件名是30_os-prober,第一个linux系统对应的是10- ...

  2. Android App 开机启动画面和开机自动启动APP程序设置

    1.当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面 如腾讯微博 2.准备元素  需要开机启动的图片一张 3.新建Activity AlphaAnimation动画:控制对象alpha水平 ...

  3. Android添加全屏启动画面

    有的Android软件需要在启动的时候显示一个启动画面,可以是一张图或者一些设置什么呢,还有一个好处就是,可以趁机在后台加载数据.创建启动画面一般有两种方式:1.建立一个activity,展示启动画面 ...

  4. 修改开机启动等待时间(for Ubuntu12.10)

    Ubuntu的开机启动等待时间默认是10s,等待时间比较长,每次启动都得按一下回车,于是就想修改一下等待时间.我们可以找到Grub的配置文件(/boot/grub/grub.cfg),在其中进行个性化 ...

  5. Android如何获取开机启动项列表

    static final String BOOT_START_PERMISSION = "android.permission.RECEIVE_BOOT_COMPLETED"; p ...

  6. Android安全问题 抢先开机启动

    导读:我们以如何抢先开机启动为例,来说明接收无序广播的静态广播接收器的接收顺序 (注意,文本只是陈述结果,所以叫结果篇,之后的文章再给出源码分析) 首先先说一下android中的广播和广播接收器 广播 ...

  7. Hortonworks HDP Sandbox定制(配置)开机启动服务(组件)

    定制Hortonworks HDP开机启动服务能够这样做:本文原文出处: http://blog.csdn.net/bluishglc/article/details/42109253 严禁不论什么形 ...

  8. Android N 的开机启动流程概述

    原地址:https://blog.csdn.net/h655370/article/details/77727554 图片展示了Android的五层架构,从上到下依次是:应用层,应用框架层,库层,运行 ...

  9. Linux修改开机启动logo

    默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅 ...

随机推荐

  1. 【Arduino】开源开发板说明

    来自世界各地的新型微控制器层出不穷,这类开发板多数都是通过Arduino改进的版本,例如由Arduino所改良的Yún一样,主要是针对网状网路进行改进或升级了其它无线功能. 但一些开发板也有着其独到的 ...

  2. XXE (XML External Entity Injection) 外部实体注入漏洞案例分析

    ENTITY 实体 在一个甚至多个XML文档中频繁使用某一条数据,我们可以预先定义一个这条数据的“别名”,即一个ENTITY,然后在这些文档中需要该数据的地方调用它. XML定义了两种类型的ENTIT ...

  3. Mysql 查询实现成绩排名

    Mysql 查询实现成绩排名,相同分数名次相同,类似于rank()函数 近日系统要实现总分成绩排名,而且相同分数的学生排名要一样,在网上搜了一圈,没有找到合适的方法,只能靠自己实现了,这里提供两种方法 ...

  4. POJ 3090 Visible Lattice Points 【欧拉函数】

    <题目链接> 题目大意: 给出范围为(0, 0)到(n, n)的整点,你站在(0,0)处,问能够看见几个点. 解题分析:很明显,因为 N (1 ≤ N ≤ 1000) ,所以无论 N 为多 ...

  5. GYM 101755 K.Video Reviews 【贪心】+【二分】

    <题目链接> 题目大意: 一家公司想让n个人给他们的产品评论,所以依次去找这n个人,第i个人会评论当且仅当已经有ai个人评论或他确实对这个产品感兴趣,但是这n个人都不对这个产品感兴趣,问这 ...

  6. c++字符串string的操作

    #include <iostream> #include <cstring> #include <string> using namespace std; int ...

  7. React生命周期函数详解

    React生命周期函数 生命周期函数是指在某一个周期自动执行的函数. React中的生命周期执行过程 以下是React中的常用的生命周期函数,按个部分中按照自动执行顺序列出,这几个过程可能存在同时进行 ...

  8. [P1020]导弹拦截 (贪心/DP/二分/单调队列)

    一道很经典的题 这道题就是要求一个最长单调不升子序列和一个最长单调上升子序列. 先打了一个n2复杂度的 用DP #include<bits/stdc++.h> using namespac ...

  9. Drying [POJ3104] [二分答案]

    背景 每件衣服都有一定单位水分,在不适用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分,但是遗憾是只有1台烘干机,每台烘干机同时只能烘干1件衣服,请问要 ...

  10. Marked Ancestor [AOJ2170] [并查集]

    题意: 有一个树,有些节点染色,每次有两种操作,第一,统计该节点到离它最近的染色父亲结点的的号码(Q),第二,为某一个节点染色(M),求第一种操作和. 输入: 输入由多个数据集组成.每个数据集都有以下 ...