Ahao's Technical Blog Ahao's Technical Blog
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

阿豪讲Framework

不积跬步无以至千里
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础篇

  • 玩转AOSP篇

  • 学穿Binder篇

  • 基础组件篇

  • 系统启动过程分析

    • 001.Android 系统启动过程概述
    • 002.Android 系统启动之 Init 进程启动分析一
    • 003.Android 系统启动之 Init 进程启动分析二
    • 004.Android 系统启动之 Init 进程启动分析三
    • 005.Android 系统启动之 Init 进程启动分析四
    • 006.Android 系统启动之 Init 进程启动分析五
    • 007.Android 系统启动之 zygote 进程启动分析一
    • 008.Android 系统启动之 zygote 进程启动分析二
    • 009.Android 系统启动之 zygote 进程启动分析三
    • 010.Android 系统启动之应用进程启动分析
    • 011.Android 系统启动之 SystemServer 进程启动分析一
    • 012.Android 系统启动之 SystemServer 进程启动分析二
    • 013.Android 平台开机时间分析与优化
    • 014.Android 开机动画 BootAnimation 源码分析
    • 015.Android 平台自定义开机动画
      • 参考资料
    • 016.Android BootAnimation 添加视频播放功能
    • 017.Android 进程杀手 lmkd 源码分析一
  • Hal开发入门与实践

  • 显示系统

  • Framework
  • 系统启动过程分析
阿豪
2023-12-29
目录

015.Android 平台自定义开机动画

上一节源码分析中我们知道,BootAnimation 会从以下几个目录中加载动画文件:

  • /system/media/bootanimation-encrypted.zip (if getprop("vold.decrypt") = '1')
  • /system/media/bootanimation.zip
  • /oem/media/bootanimation.zip

知道了这个,自定义开机动画的流程就出来了:

  • 构造好 bootanimation.zip 文件
  • 将 bootanimation.zip 文件预制到以上目录

那么这里就有几个问题了:

  • bootanimation.zip 中需要有哪些文件?
  • 这些文件怎么组织?
  • 怎么描述动画的流程

这里给出一个 bootanimation.zip 未压缩时的结构示例:

bootanimation/
├── desc.txt
├── part0
│   └── 000.png
├── part1
│   └── 001.png
└── part2
    └── 002.png
1
2
3
4
5
6
7
8

其中 part0 part1 part2 表示动画的每一个阶段,根据动画的复杂程度,可能还有 part3 part4 part5 等等。

每个 part 中,都保存有至少一张 png 图片。

desc.txt 是动画的脚本文件,用于描述动画的每个阶段,我们通过一个示例来了解其格式:

1080 1920 60    # 宽x高=1080x192, fps=60帧
c 1 0 part0   # part0 只播放1次,但需全部图片都播放,不能打断
c 1 15 part1  # part1 只播放1次,但需全部图片都播放,不能打断,在播放结束时延迟15帧,即15/fps=1/60=1/4秒
p 0 0 part2   # part2 循环播放,直到系统启动完成,当 `service.bootanim.exit` 属性设置为 1 时,打断播放
1
2
3
4
  • 第一行:1080 1920 是动画区域的大小,单位是像素,60 是 60 帧每秒
  • 第二行:c 1 0 part0
    • 第一个参数 c 表示 service.bootanim.exit 属性设置为 1 时,动画不会被打断,第一个参数如果是 p,表示 service.bootanim.exit 属性设置为 1 时,动画会被打断
    • c 后面第 1 个参数:1 是播放一次, 0 表示无限循环直至开机完成。
    • c 后面第 2 个参数: 数字表示阶段(part)间隔时间,0 表示没有间隔时间
    • c 后面第 3 个参数:为对应的步骤文件夹
  • 后面几行和第二行类似

准备好以上的文件就可以打包了:

# 安装好 zip
sudo apt install zip
cd bootanimation/
zip -0qry -i \*.txt \*.png \*.wav @ ../bootanimation.zip *.txt part*
1
2
3
4

执行完以上命令后,就可以在 bootanimation 的同级目录找到 bootanimation.zip 文件了。

接着我们把 bootanimation.zip 动画文件预制到 /system/media/ 目录下:

把 bootanimation.zip 动画文件移动到 device/jelly/rice14 文件中。

在我们的自定义 Product 配置文件 device/jelly/rice14/rice14.mk 中添加如下内容

PRODUCT_COPY_FILES += \
     $(LOCAL_PATH)/bootanimation.zip:/system/media/bootanimation.zip

PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST +=\ 
    /system/media/bootanimation.zip
1
2
3
4
5

接着重新编译系统,启动虚拟机就可以看到自定义的开机界面了:

source build/envsetup.sh
lunch rice14-eng
m
emulator
1
2
3
4

# 参考资料

  • bootanimation format (opens new window)
  • 基于Android P,自定义Android开机动画的方法 (opens new window)
014.Android 开机动画 BootAnimation 源码分析
016.Android BootAnimation 添加视频播放功能

← 014.Android 开机动画 BootAnimation 源码分析 016.Android BootAnimation 添加视频播放功能→

最近更新
01
如何调试 SurfaceFlinger
10-05
02
SurfaceFlinger 概述
10-05
03
HWC 接口分析
10-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 AHao Framework | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式