android bootanim 进程启动:

frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp
SurfaceFlinger::readyToRun()
==> property_set("ctl.start", "bootanim"); // start boot animation
启动脚本:
system/core/rootdir/init.rc:327:service bootanim /system/bin/bootanimation

bootanim进程源码位置:
frameworks/base/cmds/bootanimation/Android.mk:30:LOCAL_MODULE:= bootanimation
frameworks/base/cmds/bootanimation/BootAnimation.cpp

主要过程分析:
BootAnimation::readyToRun()
==> 程序会尝试打开/data/local/bootanimation.zip和/system/media/bootanimation.zip文件
如果2个文件都不存在,那么mAndroidAnimation将为true
mAndroidAnimation = false;
status_t err = mZip.open("/data/local/bootanimation.zip");
if (err != NO_ERROR) {
err = mZip.open("/system/media/bootanimation.zip");
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}

于是最终将在下面threadLoop()函数中
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中的内容

而bootanimation.zip中内容格式为
bootanimation.zip
|-- desc.txt
|-- part0
`-- part1
其中desc.txt为描述文件
480 427 30
p 1 0 part0
p 0 0 part1

120和180分别对应图像宽、高像素数,30表示将按照30fps速度播放图片[gliethttp]
p表示part,也就是含有png图片的目录为part0(part1)

desc.txt文件分析:
480427 30
宽 高 帧数
p 1 0 part0
标志符 循环次数 阶段切换间隔时间 对应目录名
p 0 10 part1
标志符 循环次数 阶段切换间隔时间对应目录名

标志符:
必须是: p

循环次数:
0 : 表示本阶段无限循环

阶段切换间隔时间:
单位是一个帧的持续时间,比如帧数是30,那么帧的持续时间就是1秒/30 = 33.3毫秒。
阶段切换间隔时间期间开机动画进程进入休眠,把CPU时间让给初始化系统 使用。
也就是间隔长启动 会快,但会影响动画效果。

part0和part1目录内包含的是两个动画的系列图片,图片为PNG格式。

系列图片文件的加载刷新按文件名的名称排序。

然后part0,part1目录下内容结构为
|-- desc.txt
|-- part0
| `-- bootanim_static_0000.png
`-- part1
|-- bootanim_0000.png
|-- bootanim_0001.png
|-- bootanim_0002.png
|-- bootanim_0003.png
|-- bootanim_0004.png
|-- bootanim_0005.png
|-- bootanim_0006.png
`-- bootanim_0007.png

最后我们来压缩

对于linux下的压缩方法为:(加入-0的意思是indicates no compression (store all files))
zip -0 -r ../bootanimation.zip *

对于windows的压缩方法为:
1.“右键”==>“新建”==>Winzip File 然重命名为bootanimation.zip最后打开
2. 将desc.txt,part0,part1拖拽到bootanimation.zip中
3. 选择"Compression / Let me choose the specific compression method / Zip: No Compression"

将bootanimation.zip放到/system/media/目录下即可

以上--

更多相关文章

  1. Android中读取assets文件夹中的子文件夹内容
  2. Android生成与解析xml文件
  3. Android 通过代码设置着色图片
  4. Android 遍历文件夹下的所有文件
  5. android添加图片到本地,无法即使刷新的解决方法
  6. Android 实现图片加水印
  7. Android 程序崩溃自动生成Crash文件
  8. android仿探探图片拖拽功能
  9. android 图片放大缩小

随机推荐

  1. (4.2.15.1)【android开源工具】安卓图表引
  2. 使用android 调用震动的例子
  3. android中ListView控件&&onItemClick点击
  4. android加密、签名相关
  5. AndroidStudio中配置AndroidAnnotations
  6. 解决h264readInt()值太大 以及 SPS和PPS
  7. 阅读《Android 从入门到精通》(32)——Bund
  8. android intent收集汇总
  9. 《第一行代码--Android》 Git时间
  10. android studio 弹窗中文乱码