当前位置: 首页 > 编程日记 > 正文

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.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

相关文章:

盛大游戏卷入“沙巴克”商标之争

4月12日上午消息&#xff0c;沸沸扬扬的“沙巴克”商标之争再次升级&#xff0c;盛大游戏(微博)也被卷入其中。美国咖啡连锁企业星巴克以“商标侵权”为由将国家商标评审委告上法庭&#xff0c;认为其批准的“沙巴克”商标和“星巴克”近似&#xff0c;要求法庭复审。[/p][p23,…

iOS开发经验总结

在iOS开发中经常需要使用的或不常用的知识点的总结&#xff0c;几年的收藏和积累&#xff08;踩过的坑&#xff09;。 一、 iPhone Size 二、 给navigation Bar 设置 title 颜色 123UIColor *whiteColor [UIColor whiteColor];NSDictionary *dic [NSDictionary dictionaryWit…

焦虑的 BAT、不安的编程语言,揭秘程序员技术圈生存现状!

【编者按】在迭代不休的技术圈中&#xff0c;仅在过去的一个月期间&#xff0c;我们见证了有史以来第一张黑洞照片的诞生&#xff1b;经历了为让人义愤填膺的 996&#xff1b;思考了作为程序员的年龄之槛&#xff1b;膜拜了技术大神的成长历程&#xff1b;追逐了如编程语言、人…

【Qt】Qt再学习(六):Qt中JSON保存和加载的示例

1、简介 该示例演示如何保存和加载JSON格式文件&#xff0c;涉及到的类有&#xff1a;QJsonDocument, QJsonObject and QJsonArray. 2、说明 2.1 QJsonDocument QJsonDocument类提供了一种读取和写入JSON文档的方法。 使用QJsonDocument::fromJson()将JSON文档从其基于文本…

H3C ER3260通过Console口重装软件修复路由器

公司在用的H3C ER3260路由器突然罢工&#xff0c;所有LAN、WAN口均无反应&#xff0c;但加电正常&#xff0c;初步判断硬件应该是好的&#xff0c;联系维修要价500&#xff0c;新买一个2000&#xff0c;于是决定自己修下看。 通过配置线连接Console口恢复出厂设置&#xff0c;不…

【Qt】Qt再学习(七):QLocalServer、QLocalSocket

1、QLocalServer QLocalServer类提供基于本地套接字的服务器。 简单的使用方法:首先创建本地服务器并监听 QLocalServer* server = new QLocalServer(this);server->listen("HelloWorld");当有客户端连接时,触发QLocalServer::newConnection信号,在槽函数中处…

百度宣布:搜索业务总裁向海龙离职,另回购10亿美元股份

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;5 月 17 日&#xff0c;百度公布 2019 年第一季度未经审计的财务报告。本季度百度营收 241 亿元&#xff08;约合35.9亿美元&#xff09;&#xff0c;同比增长15%&#xff0c;不计入此前宣布的资产剥离交易…

Oracle SQL高级编程——分析函数(窗口函数)全面讲解

Oracle SQL高级编程——分析函数&#xff08;窗口函数&#xff09;全面讲解注&#xff1a;本文来源于&#xff1a;《Oracle SQL高级编程——分析函数&#xff08;窗口函数&#xff09;全面讲解》概述分析函数是以一定的方法在一个与当前行相关的结果子集中进行计算&#xff0c;…

学习html5系列之比较典型的div滥用

在做网站过程过比较典型的div滥用&#xff0c;在很多网站中都可看到如下比较典型的div滥用情况。 div滥用情况&#xff1a; 网站首页新闻中心网站案例产品中心在线招聘联系我们优化后可实现相同效果&#xff1a; 网站首页新闻中心建站套餐产品中心关于我们联系我们 最上面的代码…

【Qt】Qt再学习(八):Media Player(Qt实现多媒体播放器)

1、简介 Media Player演示了一个简单的多媒体播放器,该播放器可以使用各种编解码器播放音频和/或视频文件。 涉及到的类有 QMediaPlayer、QMediaPlaylist、QVideoWidget、QVideoProbe、QAudioProbe 2、QMediaPlayer QMediaPlayer是一个媒体播放的高级类。它可以用来播放诸如…

一次改变未来10年人生的机会

还记得陆奇在十问里说过马拉松和短跑的概念吗&#xff1f;你需要设计属于你自己的工作和生活节奏&#xff0c;一方面你可以保持高速&#xff0c;这个高速可以给你带来最大的效率。另一方面也需要可以应对突发变化&#xff0c;可以时不时的“冲刺”一下 &#xff08;比如偶尔过度…

SQL Server 2008之WaitFor

在SQL Server 2005以上版本中&#xff0c;在一个增强的WaitFor命令&#xff0c;其作用可以和一个job相当。但使用更加简捷。 看MSDN:http://msdn.microsoft.com/zh-cn/library/ms187331.aspx 语法为&#xff1a;WAITFOR { DELAY time_to_pass | TIME time_to_execute | …

“搞垮” 微博服务器?每天上亿条用户推送是如何做到的

记者 | 琥珀出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;想必国内绝大多数网民都有新浪微博的用户账号。据最新数据显示&#xff0c;2018 年第四季度财报&#xff0c;微博月活跃用户突破 4.62 亿&#xff0c;连续三年增长 7000 万 &#xff1b;微博垂直…

【Qt】Qt再学习(九):并发 QtConcurrent、QFuture、QFutureWatcher

1、QtConcurrent 该QtConcurrent命名空间提供高层次的API,使人们有可能不写使用低级线程原语的多线程程序,如互斥,读写锁,等待条件或信号。用QtConcurrent编写的程序会根据可用处理器内核的数量自动调整使用的线程数。这意味着,当将来在多核系统上部署时,今天编写的应用…

Git——如何将本地项目提交至远程仓库(第一次)

1.&#xff08;先进入项目文件夹&#xff09;通过命令 git init 把这个目录变成git可以管理的仓库。 git init 2.把文件添加到版本库中&#xff0c;使用命令 git add .添加到暂存区里面去&#xff0c;不要忘记后面的小数点“.”&#xff0c;意为添加文件夹下的所有文件(夹)。 g…

连接不上ftp解决方案

今天做linux下的ftp实验&#xff0c;总结一下解决连接不上ftp的解决方案&#xff1a;连接不上ftp解决方案&#xff1a;远程连接vsftp服务时&#xff0c;系统提示&#xff1a;用户没有权限访问。防火墙已经关闭&#xff0c;ftpusers和user_list文件已经删除了root用户。再使用命…

Python3破冰人工智能,你需要掌握一些数学方法

为什么要把数学建模与当今火热的人工智能放在一起&#xff1f;首先&#xff0c;数学建模在字面上可以分解成数学建模&#xff0c;即运用统计学、线性代数和积分学等数学知识&#xff0c;构建算法模型&#xff0c;通过模型来解决问题。数学建模往往是没有对与错&#xff0c;只有…

【Qt】QtCreator无法调试终端程序,启动报错SIGSTOP

1、问题描述 使用QtCreator调试终端程序时&#xff0c;因为收到信号SIGSTOP 而退出&#xff0c;无法调试程序。 2、解决方法 解决方式是&#xff0c;设置GDB不处理SIGSTOP &#xff0c; 在QtCreator中进入GDB命令设置窗口&#xff1a; Tools -> Options -> Debugger -…

Centos7 下 配置 rsync 以及 rsync+inotify 实时同步

Centos 7 下 配置 Rsync 以及 rsyncinotify 实时同步 rsync介绍 rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。 rsync的官方站点是htt…

网站排名下降的原因

做站长&#xff0c;都经常遇到网站被降权、排名下降、百度快照后退等问题&#xff0c;这些也是企业网站最常见的一些问题&#xff0c;企业网站为何会被降权&#xff0c;通常是什么原因造成的&#xff0c;下面我在这里分享下我在北大青鸟学到的一些知识&#xff0c;简单的和大家…

@程序员,Python 3还有哪些未Get的潜藏技能?| 技术头条

作者 | Vinko Kodžoman翻译 | Monanfei编辑 | 阿司匹林&#xff0c;Rachel【导读】在 Python 3 推出后&#xff0c;人们开始逐步将基于Python 2 的代码迁移至 Python 3 。但在迁移过程中&#xff0c;很多代码都未能使用到 Python 3 提供的新功能。本文作者介绍了相关功能的介绍…

【Qt】QtCreator中配置clang-format

1、安装clang-format sudo apt install clang-format2、添加插件Beautifier 在QtCreator–>Help–>About Plugins…中添加插件Beautifer,添加后要重启QtCreator ClangCodeModel是否需要不清楚?反正我添加了 3、配置Clang Format 在Tools --> Options…–>Beau…

DVWA提示Unable to connect to the database.

因为数据库更换了默认端口&#xff0c;所以得在DVWA也进行相应的设置&#xff0c;但是设置的位置错了&#xff0c;导致一直连接不上数据库。 后面看到注释才发现是这个设置仅限PostgreSQL/PGSQL使用&#xff0c;至于Mysql更换端口以后直接设置在server地址后面即可。 刷新一下&…

LINQ to SQL语句之 Count/Sum/Min/Max/Avg

Count/Sum/Min/Max/Avg操作符 适用场景&#xff1a;统计数据吧&#xff0c;比如统计一些数据的个数&#xff0c;求和&#xff0c;最小值&#xff0c;最大值&#xff0c;平均数。 Count 说明&#xff1a;返回集合中的元素个数&#xff0c;返回INT类型&#xff1b;不延迟。生成SQ…

【Qt】Qt再学习(十):鼠标拖拽(dragdrop)QGraphicsItem示例

1、QGraphicsItem实现拖拽源 实现方法,继承QGraphicsItem,重载鼠标按下、移动、释放事件处理函数 class ColorItem : public QGraphicsItem {... protected:void mousePressEvent(QGraphicsSceneMouseEvent *event) override;void mouseMoveEvent(QGraphicsSceneMouseEvent…

Java并发 -- JMM

文章基于jdk1.7&#xff0c;通过学习《Java并发编程的艺术》&#xff0c;对Java内存模型的理解 并发编程模型的两个关键问题 线程之间如何通信线程之间如何同步上面所说的线程指的是并发执行的活动实体。 线程之间的通信机制有两种&#xff1a;共享内存和消息传递 在共享内存的…

开源!mathAI手写拍照自动能解高数题,还不快试试?

作者 | 红色石头转载自 AI有道&#xff08;id&#xff1a;redstonewill)让我们不妨先来盘点下从 2016 年起过去三年间 Google I/O 开发者大会亮相的重磅 AI 产品&#xff1a;深度好玩&#xff01;文章开始红色石头先在草稿纸上写一道高数微积分题目给大家看看如何求解&#xf…

黄聪:IE6下用控制图片最大显示尺寸

div img { max-width:600px; width:600px; width:expression(document.body.clientWidth>600?"600px":"auto");overflow:hidden; } ◎ max-width:600px; 在IE7、FF等其他非IE浏览器下最大宽度为600px。但在IE6中无效。 ◎ width:600px; 在所有浏览器中…

漫画:有趣的海盗问题 (完整版)

————— 第二天 —————海盗分金币问题&#xff1a;有5个海盗&#xff0c;获得了100枚金币&#xff0c;于是他们要商量一个方法来分配金币。商议方式如下&#xff1a;1. 由5个海盗轮流提出分配方案。2. 如果超过半数海盗&#xff08;包括提出者&#xff09;同意该方案&…

【Qt】error: undefined reference to `vtable for MainWindow‘

1、问题描述 在写一个demo时,想尽量简单,就把MainWindow类的定义和实现都写在main.cpp中,结果编译时报错: main.cpp:-1: error: undefined reference to `vtable for MainWindow :-1: error: collect2.exe: error: ld returned 1 exit status2、原因分析 错误信息vtable…