Android定制:修改开机启动画面
转自: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.png和android-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. 双系统修改启动项顺序 更改/etc/grub.d目录 下的文件名是可行的 默认情况下Windows 7对应的文件名是30_os-prober,第一个linux系统对应的是10- ...
- Android App 开机启动画面和开机自动启动APP程序设置
1.当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面 如腾讯微博 2.准备元素 需要开机启动的图片一张 3.新建Activity AlphaAnimation动画:控制对象alpha水平 ...
- Android添加全屏启动画面
有的Android软件需要在启动的时候显示一个启动画面,可以是一张图或者一些设置什么呢,还有一个好处就是,可以趁机在后台加载数据.创建启动画面一般有两种方式:1.建立一个activity,展示启动画面 ...
- 修改开机启动等待时间(for Ubuntu12.10)
Ubuntu的开机启动等待时间默认是10s,等待时间比较长,每次启动都得按一下回车,于是就想修改一下等待时间.我们可以找到Grub的配置文件(/boot/grub/grub.cfg),在其中进行个性化 ...
- Android如何获取开机启动项列表
static final String BOOT_START_PERMISSION = "android.permission.RECEIVE_BOOT_COMPLETED"; p ...
- Android安全问题 抢先开机启动
导读:我们以如何抢先开机启动为例,来说明接收无序广播的静态广播接收器的接收顺序 (注意,文本只是陈述结果,所以叫结果篇,之后的文章再给出源码分析) 首先先说一下android中的广播和广播接收器 广播 ...
- Hortonworks HDP Sandbox定制(配置)开机启动服务(组件)
定制Hortonworks HDP开机启动服务能够这样做:本文原文出处: http://blog.csdn.net/bluishglc/article/details/42109253 严禁不论什么形 ...
- Android N 的开机启动流程概述
原地址:https://blog.csdn.net/h655370/article/details/77727554 图片展示了Android的五层架构,从上到下依次是:应用层,应用框架层,库层,运行 ...
- Linux修改开机启动logo
默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅 ...
随机推荐
- 一次BurpSuite无法抓https包定位
- 解析eBay BASE模式、去哪儿及蘑菇街分布式架构
目录:问题分析概念解读Most Simple原理解读eBey.去哪儿.蘑菇街分布式事务案例分析 参考资料 1.问题解析 要想做架构,必须识别出问题,即是谁的问题,什么问题.明显的,分布式架构解决 ...
- 005 Numpy的基本操作
一:数组与标量,数组与数组之间的运算 1.数组与标量之间的计算 2.数组之间的加减乘除 3.元素级运算 二:.矩阵积 1.说明 这个的意思是第一个数组的列,必须和第二个数组的行的大小相同 2.运算 3 ...
- Mybatis下collections使用pageHelper进行分页
pageHelper在对mybatis一对多分页时造成查询总页数结果不对的情况. 可以做出如下修改: service层: public CommonResult worksList(String us ...
- Codeforces 208A-Dubstep(字符串)
Vasya works as a DJ in the best Berland nightclub, and he often uses dubstep music in his performanc ...
- Painting the Fence Gym - 101911E(构造)
There is a beautiful fence near Monocarp's house. The fence consists of nn planks numbered from left ...
- poj 3694 Network 【Tarjan】+【LCA】
<题目链接> 题目大意: 给一个无向图,该图只有一个连通分量.然后查询q次,q < 1000, 求每次查询就增加一条边,求剩余桥的个数. 解题分析: 普通的做法就是在每加一条边后,都 ...
- POJ 3122 Pie【二分答案】
<题目链接> 题目大意: 将n个半径不一但是高度为1的蛋糕分给 F+1个人,每个人分得蛋糕的体积应当相同,并且需要注意的是,每个人分得的整块蛋糕都只能从一个蛋糕上切下来,而不是从几个蛋糕上 ...
- [ 高危 ] mt网主站SQL注入
rank 75 金币 75 等价RMB 750 数据包样式如下 POST /ajax.php HOST: xxx.meituan.com Cookie: xxx id=123&job= ...
- Splay的初步学习
具体是啥,qwq 有时间再补吧,贴一下代码: #include<iostream> #include<cstdio> #include<cstring> #incl ...