最近在做Android系统方面的定制,第一个接收的是做系统开机动画,对系统源码这方面
以前接触不多,查了很多资料终于搞定。分享下自己经历。
首先还是先来看源码。Android开机动画源码位于framework/base/cmds/bootanimation下。
这个程序编译后生成/syetem/bin/bootanimation,将/data/local/bootanimation.zip或/system/
media/bootanimation.zip里面的png图片以动画的形式播放出来。
打开frameworks/base/cmds/bootanimation/BootAnimation.cpp
在BootAnimation::threadLoop()中有一个判断语句
if (mAndroidAnimation) {
r = Android(); // 执行android字体闪动的图片
} else {
r = movie(); // 执行bootanimation.zip中提供的动画图片
}
BootAnimation::Android()会加载"images/android-logo-mask.png"和"images/android-logo-shine.png"
BootAnimation::movie()会加载bootanimation.zip中的内容
我们下载的源码里默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画面。
下面到正题,来说说自己定制开机动画的步骤。
首先要了解bootanimation.zip文件。
该文件由下面几个文件目录组成:
desc.txt 动画属性描述文件
part0 第一阶段动画图片的目录(动画是由一帧帧图片组成的)
part1 第二阶段动画图片的目录
...
partn
一般来说就两个文件夹part0、part1,两个文件夹里面放着编号号的png图片。
desc.txt文件内容格式如下:
720 1280 5
p 1 0 part0
p 0 0 part1
720为图片的宽,1280为图片的高,后面的那个5表示帧数,即每秒播放的图片张数。
p为描述符,后面的1表示播放一次,后面的0表示阶段切换时间,part0表示png资源路径。
p为描述符,后面的0表示本阶段无限循环(直到开机结束),再后面的0表示本阶段切换时间
,part1表示路径。
然后就是编译了
1 先cd到自己的bootanimation目录下执行压缩命令
zip -Z store bootanimation.zip part0/*PNG part1/*PNG desc.txt
或者 zip -0 bootanimation.zip part0/*PNG part1/*PNG desc.txt
注意不要压缩文件,直接选择存储方式压缩,要不然不能正确获取到png图片,开机时会一直黑屏
2 将压缩得到的zip文件放到/system/media/文件下。
3 先编译 mmm frameworks/base/cmds/bootanimation -B
4 再编译 mmm frameworks/base -B 最后将生成的framework.jar包push到机器即可。
有不清楚或者错误的地方,欢迎指正讨论。