转自: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. 基于Postman的API自动化测试

    https://segmentfault.com/a/1190000005055899 1. 安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2. 发送请求 ...

  2. C语言之指针变量

    菜单导航 1.指针变量 2.指针和数组 3.常量指针和指向常量的指针 4.指针和字符串的关系 5.数组越界造成的访问不属于自己的内存空间现象 6.引用数据类型和基本数据类型,形参和实参 7.字符串和字 ...

  3. 【原创】c# socket 粘包 其实。。。

    文章内容有错,请直接关闭~~~不要看了.丢人. private static Dictionary<string, Packet> cache = new Dictionary<st ...

  4. TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法

    [自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...

  5. 利用Flume将MySQL表数据准实时抽取到HDFS

    转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...

  6. IDEA控制台问题:java lang OutOfMemoryError:PermGen space

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域. OutOfMemoryError: PermGen space从表面上看就是内存溢出, ...

  7. Ubuntu + 坚果云

    下载 nautilus_nutstore_amd64.deb sudo dpkg -i nautilus_nutstore_amd64.deb # 运行后,会提示缺少依赖包 sudo apt-get ...

  8. 002.Kickstart部署之NFS架构

    一 准备 1.1 完整架构:Kickstart+DHCP+NFS+TFTP+PXE 1.2 组件应用 Kickstart服务端IP:172.24.8.12 DHCP:提供客户端IP,网关,镜像路径等: ...

  9. iOS应用 数据存储方式 (一)

    沙盒是每个应用程序的空间,每个应用程序只能访问自己的文件夹,不可以跨越,访问别的程序的文件夹,这个文件夹就是该应用程序的沙盒. 沙盒中包括以下几个文件夹: 1.应用程序包:(Layer)包含了所有资源 ...

  10. Linux 查看文件被那个进程写数据

    目录 背景 步骤 获取写文件的进程号 文件被那个进程使用,写数据不是用lsof可以找出来吗,但现实情况是lsof没找出来T_T 背景 centos7 在某一段时间监控报警磁盘使用率达99%,由于监控属 ...