Android 的开机动画是由 Linux 本地守护程序 bootanimation 专门控制实现的,其代码在 frameworks/base/cmds/bootanimation/ 目录下。
修改开机动画的方式有两种:
1、蒙版图片替换:
替换 frameworks/base/core/res/assets/images 目录下的两张图片文件,android-logo-mask.png 和 android-logo-shine.png。
android-logo-mask.png 是镂空蒙版图片,android-logo-shine.png是镂空蒙版后面的闪光图片,两张图片通过叠加移动达到动画效果。
(1)用 Photoshop 制作一张同样分辨率和格式的图片,要求背景为黑色,字体中间镂空,命名为 android-logo-mask.png。制作图片方法请找度娘。
(2)将制作好的图片android-logo-mask.png 复制到 frameworks/base/core/res/assets/images 目录下,替换掉以前的图片。
$ cp -raf android-logo-mask.png frameworks/base/core/res/assets/images/ // 防止源码不编译图片,需更新图片时间戳 $ touch frameworks/base/core/res/assets/images/android-logo-mask.png
(3)重新编译模块
$ source build/envsetup.sh $ lunch rk3288-eng $ mmm frameworks/base/core/res/
(4)生成新的 system.img
$ make snod
(5)重新烧录并查看效果。
2、逐帧动画替换
创建 bootanimation.zip 文件,该压缩包文件里存放有逐帧动画和控制脚本,通过连续切换显示图片达到动画的效果。
文件 | 说明 |
desc.txt | 动画属性描述文件 |
part0 | 第一阶段动画图片目录 |
part1 | 第二阶段动画图片目录 |
(1)将第一部分图片按播放顺序命名好,保存在 part0 的文件夹中,例如:001.jpg、002.jpg(有的资料和书籍上强调必须为png格式图片,但是我在rk3288上测试,jpg格式也可以正常使用)
(2)将第二部分图片按播放顺序命名好,保存在 part1 的文件夹中,例如:001.jpg、002.jpg
(3)创建名称为 desc.txt 的文档,内容如下:
1366 768 15 p 1 0 part0 p 0 10 part1
图片属性 | 1366(图片宽度) | 768(图片高度) | 15(每秒显示帧数) | 无 |
第一阶段动画属性 | p(默认标志符) | 1(循环次数为1) | 0(进入该阶段的间隔时间) | part0(该阶段图片的存放目录) |
第二阶段动画属性 | p(默认标志符) | 0(无限循环) | 10(进入该阶段的间隔时间) | part1(该阶段图片的存放目录) |
每秒显示帧数:每秒显示的图片数量。
间隔时间:该阶段结束后间隔多久进入下一阶段显示,单位为每张图片的显示时间。
(4)选中part0、part1和desc.txt进入自定义压缩,压缩文件格式为 zip,压缩方式为存储,命名为 bootanimation.zip。
(5)将压缩包拷贝到 device/*/$(TARGET_DEVICE) 目录下。例如:RK3288 的目录在 device/rockchip/rk3288/bootanimation.zip
(6)修改 device/*/$(TARGET_DEVICE)/$(TARGET_DEVICE).mk 文件。例如:RK3288 是 device/rockchip/rk3288/rk3288.mk
// 在文件中添加,不使用逐帧动画时,用 # 屏蔽此行即可 PRODUCT_COPY_FILES += device/rockchip/rk3288/bootanimation.zip:system/media/bootanimation.zip
(7)重新编译生成 system.img
$ source build/envsetup.sh $ lunch rk3288-eng $ make snod
(8)重新烧录并查看效果。
逐帧动画的优先级比蒙版动画的优先级高,当使用了逐帧动画时,蒙版动画就不播放了。