一.Android的启动步骤
1.启动Linux
2.载入Android
3.显示Android桌面
二.分析
Android载入开机动画的源代码文件是:
/opt/android4.3/frameworks/base/cmds/BootAnimation.cpp 关注当中的常量定义:#include "BootAnimation.h"#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"#define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"#define EXIT_PROP_NAME "service.bootanim.exit"
在status_t BootAnimation::readyToRun()里使用了它们:
从threadLoop里推断,在不同情况下,载入不同动画。当中:- android();是android字体闪动,它调用的是: “./frameworks/base/core/res/assets/images/android-logo-mask.png”和 “./frameworks/base/core/res/assets/images/android-logo-shine.png” 一张镂空的图,一张发光效果。
- movie()是bootanimation.zip bootanimation.zip包括:
目录part1
目录part2 … 可能有非常多个目录 desc.txt 目录里是png组成的动画 desc.txt格式:
480 | 250 | 15 | |
图片的宽 | 图片的高 | 每秒显示的帧数 | |
p | 1 | 0 | part0 |
标识符 | 循环的次数 | 阶段切换间隔时间 | 相应图片的目录 |
p | 0 | 10 | part1 |
标识符 | 循环的次数 | 阶段切换间隔时间 | 相应图片的目录 |
我直接下载了一个其它人做的动画
放到目录里/opt/android4.3/out/target/product/generic/system/media/下
回到根目录 ,运行
make snod
再启动虚拟机:
emulator效果: