源码中修改Android的开机画面和动画【转】
本文转载自:http://blog.csdn.net/dddxxxx/article/details/54343976
参照文章:http://blog.csdn.net/a345017062/article/details/6222962、http://bbs.gfan.com/android-146253-1-1.html。
Android系统开机显示画面分成两个过程,第一个过程从按电源键到Frameworks启动为止。第二个过程从Frameworks启动完成到Launcher程序启动完成。
第一个过程显示的画面是一张图,第二个过程显示的是一个动画。分别简要记录一下怎么样在源码中修改这两个地方。
1、修改开机画面
找到源码kernel\drivers\video\logo\目录,在这个目录下你会发现logo_linux_clut224.ppm文件,这个就是开机画面的图片,如要替换成自己的Logo,则把自己的Logo图片(png格式)转换成ppm格式,替换这个文件,同时删除logo_linux_clut224.c logo_linux_clut224.o文件,重新编译烧录即可。
注:将png图片改成.ppm格式。首先你要有个 和自己屏幕分辨率一样 或者 小于屏幕分辨率的图片,如logo_linux_clut224.png
①将png图片转成pnm
pngtopnm logo_linux_clut224.png >logo_linux_clut224.pnm
②将pnm图片的颜色数限制在224色
pnmquant 224 logo_linux_clut224.pnm > logo_linux_clut224_backup.pnm(此处生成后的名字不可与前者相同,否则会报错)
③将pnm图片转换成我们需要的ppm
pnmtoplainpnm logo_linux_clut224_backup.pnm >logo_linux_clut224.ppm
2、修改开机动画
在源码跟目录中,执行 find . -name "bootanimation.zip" 找到文件所在路径,可以查看其中的Android.mk了解具体的编译过程,下面先介绍一下如何制作开机动画:
开机动画主要是由一个zip格式的压缩包组成,压缩包里面包含数张png格式的图片,还有一个desc.txt的文本文档,开机时按desc.txt里面的指令,屏幕上会按文件名称顺序连续的播放一张张的图片,
就像播放原始的胶带影片一样,形成动画。
具体这一部分图片怎么来,看个人喜好了,我是比较喜欢用flash制作好自己想要的动画然后按帧导出,然后按数字顺序给文件编号就可以了。
如果你不会flash制作也没关系,推荐一个软件:SWF2Video Pro ,链接我就不提供了,自己可以google搜索到,
这个软件可以把flash按帧导出成png格式图片。也就是说,只要有你喜欢的flash动画,你都可以用这个软件把画面截取出来用来做你小石头的开机动画。其他格式导出png格式的软件我就不一一说明了,大家有机会去搜索一下。
保存下来的png图片记得要按顺序编号命名。
下面重点讲的是desc.txt这个文件里面的命令。
desc.txt里面的命令格式如下:
480 427 30
p 1 0 part0
p 0 0 part1
我逐一解释一下:
480 427意思是说你开机动画在屏幕先以多少的分辨率显示,注意不要超过milestone屏幕480x854的分辨率,否则你的画面就显示不全了。
30 这个数字是代表着每秒播放的帧数,拿我这个开机画面打个比方说,part0文件夹里面共76个图片,播放时间就是76/30=2.533333秒播放完毕,当然在手机里面会有一定的延时,尤其是你的图片文件比较大的情况下,手机想播快也快不起来,卡啊
以下部分是实现画面重复位置的
p 1(代表着播放一次) 0(空指令)part0 */这句指令就代表这part0文件夹内的图片只按名称顺序播放一次
p 0(重复播放)0 (空指令)part1 */这一句指令代表着part1文件夹内的图片会循环反复播放
还有一种是指令不常用,我也来解释一下吧
p 0 10 part1 这里面的那个10代表着播放完part1文件夹内的图片一遍之后稍作停顿,然后再循环播放一遍,再停顿少许,再播放,再停顿稍许·········重复下去
p 1 10 part1 同理,这句代表着播放完part1文件夹内的图片之后稍作停顿然后继续执行吓一条命令。
如果想作出一些特殊的效果,可以活用这些命令,然后分配不同的图片在各个文件夹里来实现各种重复与循环。
图片准备好了,desc.txt里面的命令准备好了,就可以把他们一起打包压缩成zip格式了。
记住,是zip格式,而不是rar格式。另外压缩的时候注意一点,压缩的时候压缩方式要选择存储,否则开机时手机会不认的。当然不至于变砖,只是开机的时候会黑着没动画一直到进入桌面为止。看图:
压缩文件重命名为bootanimation.zip之后,放进源码相应的目录下重新编译,查看out\target\product\la0910\system\media\路径下的文件,即可发现已经修改成功,再烧录程序进行验证。
如果之前已经使用了其他的红眼之类的非默认开机动画,这里会已经存在这个文件,只需覆盖就好。
接下来介绍一下相关的代码:
主要的控制代码在/framework/base/cmds/bootanimation/BootAnimation.cpp中。这个文件定义了对动画显示规则的解析,所以,我们可以通过在bootanimation.zip中包含的描述文件来很简单地定义动画显示。只要把开机动画按一定规则做成bootanimation.zip压缩包存放在系统的/oem/media/或/system/media/这两个目录下。开机时,系统检测到这两个目录任意一个下面有名字为bootanimation.zip的压缩包的话,都会解压并播放里面定制的动画。检测顺序是先检测/oem/media/再检测/system/media/。
另外,我们还可以用另外一种方式修改动画,在/frameworks/base/core/res/assets/images/这个目录中,默认情况下,BootAnimation.cpp中的动画控制代码会使用变量mAndroid里面包含的两张图片来做为显示动画。我们要做的就是直接做好图片替换掉/frameworks/base/core/res/assets/images/中的两个文件,最主要的还是要把握好图片的分辨率。
如果只是要修改分辨率,那么可以通过将其中的图片修改分辨率后重新生成一个新的bootanimation.zip的方法,达到适配的效果。
源码中修改Android的开机画面和动画【转】的更多相关文章
- android源码中修改wifi热点默认始终开启
在项目\frameworks\base\wifi\java\android\net\wifi\WifiStateMachine.java里面,有如下的代码,是设置wifi热点保持状态的:如下: pri ...
- android 源码 中修改系统字体大小
在源码\android\frameworks\base\core\java\android\content\res \Configuration.java下有读取DEFAULT_FONTSCALE的值 ...
- android studio应用修改到android源码中作为内置应用
1. 方法一:导入,编译(太麻烦,各种不兼容问题) android studio和eclipse的应用结构目录是不同的,但是在android源码中的应用基本上都是使用的eclipse目录结构(在/pa ...
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全 ...
- wemall app商城源码中android按钮的三种响应事件
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码中android按 ...
- Android 源码中的设计模式
最近看了一些android的源码,发现设计模式无处不在啊!感觉有点乱,于是决定要把设计模式好好梳理一下,于是有了这篇文章. 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因.如果一个类有多于 ...
- Android系统篇之—-编写系统服务并且将其编译到系统源码中【转】
本文转载自:http://www.wjdiankong.cn/android%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B-%E7%BC%96%E5%86%99%E7%B3% ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...
- Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
随机推荐
- java攻城狮之路--复习JDBC(PrepareStatement)
PreparedStatement: 1.可以通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象 2.PreparedS ...
- python调用java API
JPype documentation JPype is an effort to allow python programs full access to java class libraries. ...
- (转) Arcgis4js实现链家找房的效果
http://blog.csdn.net/gisshixisheng/article/details/71009901 概述 买房的各位亲们不知是否留意过链家的"地图找房",这样的 ...
- [HDU5807] Keep In Touch
\(Keep\ In\ Touch\):保持联络 \(Informatik\ verbindet\ dich\ und\ mich.\) 信息将你我连结? 发现这个方程很容易列出来. \(f[i][j ...
- 三、Scrapy中选择器用法
官方示例源码<html> <head> <base href='http://example.com/' /> <title>Example web ...
- mysql中文乱码归纳总结
今天使用sqlalchemy往mysql数据库里插入数据的时候,发生了错误,因为字段包含中文,所以报错.在问题解决之后做一个总结. mysql中文乱码包括几个方面.mysql服务器层面.mysql ...
- RESTful API - 介绍
目录 RESTful API 介绍 RESTful介绍 RESTful API设计指南 API与用户的通信协议 域名 版本(Versioning) 路径(Endpoint) 浏览器请求方式(metho ...
- DSP28035的编程初步--GPIO操作
明白DSP编程的基本流程,熟悉DSP28035的GPIO的使用.代码执行流程:首先是系统时钟的选择.其次是PIE中断向量表的初始化.一些外设的初始化操作While(){}根据EXPERIMENTER’ ...
- PAT 1096. Consecutive Factors
Among all the factors of a positive integer N, there may exist several consecutive numbers. For exam ...
- Codeforces 912D - Fishes
传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...