本文转载自:http://blog.csdn.net/dddxxxx/article/details/54343976

参照文章:http://blog.csdn.net/a345017062/article/details/6222962http://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的开机画面和动画【转】的更多相关文章

  1. android源码中修改wifi热点默认始终开启

    在项目\frameworks\base\wifi\java\android\net\wifi\WifiStateMachine.java里面,有如下的代码,是设置wifi热点保持状态的:如下: pri ...

  2. android 源码 中修改系统字体大小

    在源码\android\frameworks\base\core\java\android\content\res \Configuration.java下有读取DEFAULT_FONTSCALE的值 ...

  3. android studio应用修改到android源码中作为内置应用

    1. 方法一:导入,编译(太麻烦,各种不兼容问题) android studio和eclipse的应用结构目录是不同的,但是在android源码中的应用基本上都是使用的eclipse目录结构(在/pa ...

  4. Android 网络框架之Retrofit2使用详解及从源码中解析原理

    就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全 ...

  5. wemall app商城源码中android按钮的三种响应事件

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码中android按 ...

  6. Android 源码中的设计模式

    最近看了一些android的源码,发现设计模式无处不在啊!感觉有点乱,于是决定要把设计模式好好梳理一下,于是有了这篇文章. 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因.如果一个类有多于 ...

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

  8. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  9. Eclipse与Android源码中ProGuard工具的使用

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

随机推荐

  1. 客户端通过base64上传bitmap服务器

    首先致谢:http://www.jb51.net/article/129743.htm 咱们不是代码的生产者,只是代码的搬运工. 场景描述:Android客户端需要上传头像等图片到服务器,经双方协商决 ...

  2. Server Tomcat v8.0 Server at localhost failed to start 问题解决方法?

    bi编程jsp  servlet 第一个程序: HelloServlet 运行错误 404: 十月 28, 2017 11:25:14 上午 org.apache.tomcat.util.digest ...

  3. Hive扩展功能(五)--HiveServer2服务高可用

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

  4. TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义

    http://blog.csdn.net/wudiyi815/article/details/8505726 TCP:SYN ACK FIN RST PSH URG简析   三次握手Three-way ...

  5. 视频cover占满

    /* 关键属性 */ object-fit: fill; //被替换的内容的大小,以填补该元素的内容框:对象的具体对象的大小是元素的使用宽度和高度. object-fit: contain;被替换的内 ...

  6. resize监听div的size变化

    具体实现分两类, ie9-10 默认支持div的resize事件,可以直接通过div.attachEvent('onresize', handler);的方式实现 其它浏览器 通过在div中添加一个内 ...

  7. linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号

    linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...

  8. The JVM Architecture Explained

    转自:https://dzone.com/articles/jvm-architecture-explained?oid=18544920 Every Java developer knows tha ...

  9. node.js开发环境配置

    node.js是什么 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  10. debian 7 安装

    1. 从 live cd 或者 dvd 进行安装,官方文档已经够用,可以将 live cd 写进 u 盘,也可以将 dvd 放到硬盘上通过 grub 引导启动安装,文档在这里. 2.安装过程中尽量选择 ...