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这幅图像,程序会根据这幅 ...
随机推荐
- 需求:lr需要在一串数字中随机位置插入一个新数字的实现方式
效果如下: 需要用到sscanf()函数: 从一个字符串中读进与指定格式相符的数据. Action() { ],s2[],s3[]; int n=atoi(lr_eval_string(" ...
- JMeter学习笔记2-图形界面简单介绍
废话少说直接干活的给: 一.打开和运行JMeter,出现UI界面.如图下所示: 工具栏:常见操作的图标集合,有New(新建), Template(模板) ,Save(保存),Start(开始) ,St ...
- Spring Data Redis实现消息队列——发布/订阅模式
一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...
- day25 面向对象继承,多态,
这两天所学的都是面向对象,后面还有几天也是它,面向对象主要有三个大的模块,封装,继承,多态,(组合),昨天主要讲了面向对象的命名空间,还有组合的用法,今天是讲的继承还有继承里面所包括的钻石继承,以及多 ...
- 页面滚动到指定class样式位置
var winTop =$(window).scrollTop(); var top = document.getElementsByClassName('is-danger')[0].getBoun ...
- unity打aar包工具
需求: unity将游戏导出android工程之后,打成aar包的工具 第一种: 高版本的unity导出的android工程是android studio版的,那么打成aar的流程就是 1.build ...
- 轻松3步设置sublime text2/sublime text3的预览浏览器
转https://www.cnblogs.com/swii/p/5888494.html 1,打开sublime 依次选择 tools > build system > new build ...
- Docker 搭建 Tomcat + Mysql
Docker 搭建 Tomcat + Mysql 准备 虚拟机 虚拟机安装Docker 在纯净的Centos镜像上搭建 Centos镜像准备 虚拟机上拉取 Centos 镜像: docker pull ...
- Java反射之基础概念
0.实例准备 package com.blueStarWei.invoke; public class Student { private String name; public Student() ...
- ES搜索社区
好问题 1.比如我要索引的条目为“33分钟侦探”,我想在用户输入“3”.“33”.“三三”.“三十三”.“三十三分钟”等的情况下都命中该条目,请问有没有什么好的方式实现? PS:使用的是ansj分词器 ...