Android源码学习之开机动画

Android 开机动画的制作 最近项目需要对项目Android设备进行开机动画的替换,此项需求操作比较简单,但是也有一些细节需要注意,分享给有需求的极客们 开机动画的制作、替换流程。 阅读详情

1. Android 开机动画的基本机制

Android 的开机动画由 bootanimation 进程控制,它会读取 /system/media/bootanimation.zip 或 /product/media/bootanimation.zip,然后按照配置播放开机动画。

动画格式

Android 的开机动画是一个 ZIP 压缩包,里面包含多个帧图片,以及一个 desc.txt 配置文件。

存放路径

  • /system/media/bootanimation.zip
  • /product/media/bootanimation.zip
  • /oem/media/bootanimation.zip(某些设备)

系统会按照以上顺序查找,找到后即播放。

2. 制作开机动画

创建开机动画资源

开机动画是一组连续播放的帧动画,一般包含多个子文件夹,每个文件夹代表动画的一个阶段。

目录结构
bootanimation.zip
│── desc.txt
│── part0/
│   ├── 001.png
│   ├── 002.png
│   ├── ...
│── part1/
│   ├── 001.png
│   ├── 002.png
│   ├── ...
  • desc.txt:定义动画播放规则
  • part0/、part1/:存放帧图片,每个文件夹对应动画的不同阶段
desc.txt 配置

desc.txt 是动画的描述文件,定义了动画的播放规则。其格式如下:

第一行:定义动画的全局参数
WIDTH HEIGHT FPS
  • WIDTH:动画的宽度(像素)。
  • HEIGHT:动画的高度(像素)。
  • FPS:帧率(每秒播放的帧数,例如 60)。
后续行:定义每个动画段的播放规则
TYPE COUNT PAUSE PATH [#RGBHEX CLOCK]
  • TYPE:动画段的类型:
    • p:可被暂停的动画段。
    • c:必须播放完成的动画段(一般不会用这个,会影响开机速度)。
  • COUNT:动画段的播放次数:
    • 0:无限循环,直到开机完成。
    • 1 或其他正整数:播放指定次数。
  • PAUSE:动画段结束后停留的帧数。
  • PATH:动画段对应的资源目录(如 part0)。
  • #RGBHEX(可选):背景颜色,格式为 #RRGGBB。
  • CLOCK(可选):显示当前时间的 Y 坐标(用于智能手表等设备)。
示例 desc.txt 文件
1080 360 60
c 1 0 part0 #ffee00
c 0 0 part1 #ffee00
c 1 0 part2 #ffee00
c 1 1 part3 #ffee00
c 1 0 part4 #ffee00
  • 动画分辨率为 1080x360,帧率为 60 FPS。
  • part0 播放 1 次,不暂停。
  • part1 无限循环,直到开机完成。
  • part2 播放 1 次,不暂停。
  • part3 播放 1 次,结束后停留 1 帧。
  • part4 播放 1 次,不暂停。

3. 打包为 ZIP 文件

将 desc.txt 和所有动画资源目录(如 part0, part1 等)打包为 bootanimation.zip。

zip -r -X -Z store bootanimation part*/* desc.txt

在这里插入图片描述
当前目录下执行上面命令即可。

  • -r:递归打包。
  • -X:不包含额外的文件属性。
  • -Z store:使用存储模式(不压缩,加快加载速度)。

4. 部署到 Android 设备

手动替换

将 bootanimation.zip 直接推送到设备(注意要用 userdebug 版本):

adb root
adb remount
adb push bootanimation.zip /system/media/bootanimation.zip
adb reboot

5. Framework 源码分析

bootanimation 的源码在 frameworks/base/cmds/bootanimation/,核心逻辑在 BootAnimation.cpp。

[BootAnimation.cpp] threadLoop() -> movie() -> playAnimation()
  • movie 中读取 zip 文件封装成 animation,然后初始化了一些变量和画布,并调用 playAnimation 方法。
  • playAnimation() 中递归读取 part,for 循环加载图片。

6. 定制厂商开机动画

在源码根目录创建 vendor 目录,用于存放厂商特定的东西。

== 如果是接手别人的项目,开机动画可能在源码中某个目录下创建的,一般也是自定义的文件夹 ==
接着创建 bootanimation 文件夹,用于专门存放开机动画
将上面制作好的动画压缩包放到该文件夹下
在 vendor 目录下,创建 vendor_product.mk文件,增加命令,拷贝动画 zip 到编译产物的 system/media ⽬录下:

PRODUCT_COPY_FILES += \
vendor/bootanimation/bootanimation.zip:system/media/bootanimation.zip

此时在编译工程中该编译文件,不会执行,因为没有任何地方引用,如果需要让 vendor_product.mk执行,就需要把它引入到另一个肯定会编译到的.mk 文件中 ,这时候就要用到:

$(call inherit-product, <file-path>) 

$(call inherit-product, <file-path>) 是 编译系统中的 Makefile 语法,它用于 在当前编译环境中引入另一个 .mk 文件,并执行其中的变量和命令。

这个肯定会编译到的文件,一般是配置设备属性的.mk 文件(不同版本系统 文件名可能不一样),将 $(call inherit-product, vendor/vendor_product.mk)放入到该文件内就行了。 比如在上篇文章中 lunch 的是 sdk_phone_x86_64-eng 就可以找到build/target/product/sdk_phone_x86_64.mk文件,在该文件中可以看到系统设置中显示的一些系统配置属性,然后将 vendor_product.mk 加进去即可,后面在编译的时候vendor_product.mk就能被找到并编译了。

在这里插入图片描述
如果编译过程中出现类似以下内容报错:

build/make/core/artifact_path_requirements.mk:26: warning:
build/make/target/product/sdk_phone_x86_64.mk produces files inside
build/make/target/product/generic_system.mks artifact path requirement.
Offending entries:
system/media/bootanimation.zip
In file included from build/make/core/main.mk:1342:
build/make/core/artifact_path_requirements.mk:26: error: Build failed.

是因为 违反了 make 规则,需要将以下内容增加到 vendor_product.mk:

PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
/system/media/bootanimation.zip

然后执行以下命令,编译镜像文件,注意先按上篇文章说的,在 out/target/product/emulator_x86_64/ 目录下搜索 .img 文件,全部删除!

source build/envsetup.sh

//选择上次编译过的机型
lunch sdk_phone_x86_64-eng

//启动模拟器
emulator -writable-system

就可以查看效果了:)

Android 开关机动画规范,安卓高级开发工程师面试题 片转存中…(img-HYoORyDb-1711855988843)][外链图片转存中…(img-saP33Sh1-1711855988843)][外链图片转存中…(img-9SoJpslH-1711855988844)]本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录。 阅读详情

相关推荐

【Android 12 AOSP学习】Android系统修改开机logo图片及开机动画还有遇到的问题

熟悉Android系统,对Android系统修改开机动画和修改过程中遇到的问题

etrospect的博客 9120

android 开机动画执行流程

android开机动画原理,进程启动流程,动画播放原理。

Lud的博客 3157

Android开机动画制作

首先,你需要将你的动画帧导出为单独的图像文件,例如PNG格式。你可以使用各种图形设计工具,如Adobe Photoshop或GIMP,来创建你的动画帧。确保你的设计符合你的品牌形象,并且在不同屏幕分辨率下有良好的可视效果。通过设计独特的开机动画,你可以增强你的应用程序的品牌形象,并为用户提供一个令人愉悦的启动体验。Android开机动画是在设备启动过程中显示的动画,为用户提供了一个视觉上的吸引力和品牌识别。在res目录下创建一个名为"anim"的目录,并在该目录下创建一个XML文件,用于定义你的动画。

KkvlCapture的博客 780

关于Android开机动画bootanimation.zip的制作详解

p 1 0 part01 解释:1是循环一次 0 间隔时间为0(单位为帧数)1280 800 15 解释:1280 800 是分辨率 15是帧数。p 0 0 part02 解释:0是无限循环 0 间隔时间为0。​ 例如:01.png,02.png,03.png。desc.txt:是一个文本文件,用于定义启动动画的相关规则和属性。part1:启动动画第一个部分。注:desc.txt 要以回车换行结束。desc.txt规则解释。

aa25012的博客 4290

[Android 13]开机动画原理分析

开机动画跑起来除了需要自身进程的启动外,还肯定以来显示系统的相关进程,即一定需要SurfaceFlinger的进程的合成和送显,所以这里需要启动SurfaceFlinger服务和bootanim服务,两者是在init.rc中启动。上面的构造方法中仅仅中只是获取了SF的session代理对象, 真正的加载逻辑在这个对象的第一次引用回调方法中(在前面的sp指针实例化时被回调)。的情况,这个名字也是很直白,开机动画的实现是图片逐帧动画,和电影的那种原理相同。获取对应的目标的rc文件,并将rc的内容。

qq_40731414的博客 6592

Android 5.1源码定制实战:从拉取编译到预置应用与避坑指南

Android系统定制与ROM开发,核心在于对AOSP源码的掌控能力。对于初学者或需要快速落地的行业项目,Android 5.1 Lollipop是一个理想的学习与实战起点:其代码量相对精简,沿用make与Android.mk经典构建体系,比新版本少一层Soong/Blueprint复杂度,更易理解系统镜像的生成原理。掌握从repo同步源码、配置JDK7环境、执行全量编译到输出system.img的完整链路,就能理解Android系统分区结构与构建逻辑。在此基础上,进一步实践预置第三方APK、替换开机动画等

weixin_30582943的博客 163

Android8 开机动画源码分析学习笔记(三)

那么在线程空闲的时候就会被调用。可以打印堆栈也可以直接用grep查询方法的调用,无论是哪种方法,都可以看到是frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java中调用了performEnableScreen方法。至此,可以总结开机动画结束的具体流程了。而WMS中的performEnableScreen方法会更改这个标志位,而这个方法是AMS调用的,调用时间为某一个Activity可用的时候。

g_i_a_o_giao的博客 845

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3352

Android8 开机动画源码分析学习笔记(四)

本文分析了Android 8开机动画(movie方法)的绘制流程,重点解析了zip资源文件的处理机制。主要包含:1) loadAnimation方法解析desc.txt文件定义动画参数;2) preLoadZip方法加载zip中的图片和音频资源;3) playAnimation方法通过OpenGL渲染动画帧和时钟。文章详细说明了bootanimation.zip的文件结构要求,包括必须包含part0/part1目录和desc.txt描述文件,其中desc.txt定义了动画宽高、帧率及各片段的播放属性(循环次

g_i_a_o_giao的博客 520

电网加密芯片全解析:分类与功能​

在电网数字化转型的浪潮中,数据安全和设备的身份认证变得愈发重要。加密芯片作为保障电网信息安全的核心部件,凭借独特的技术特性,在不同应用场景下发挥着关键作用,有力推动着智能电网的安全稳定发展。接下来,我们将对电网中常见的加密芯片展开分类介绍,并探讨其对应的功能。​。

1962

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 375

Android8 开机动画源码分析学习笔记(二)

本文分析了Android 8开机动画的源码实现过程。主要流程包括:1)init进程拉起bootanimation服务,执行BootAnimation的onFirstRef()方法;2)通过readyToRun()选择动画zip文件(加密/非加密);3)在threadLoop()中根据zip文件执行android()或movie()方法绘制动画。其中movie()方法会解析zip资源,通过playAnimation()逐帧渲染,并控制帧率实现平滑播放。整个过程涉及Binder通信、SurfaceFlinger

g_i_a_o_giao的博客 319

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 332

Android Framework学习教程-BootAnimation开机动画启动流程源码分析

课程答疑和新课信息:QQ交流群:422901085进行课程讨论 FrameWork入门课视频链接:https://edu.youkuaiyun.com/course/detail/30298 FrameWork实战课1视频链接:https://edu.youkuaiyun.com/course/detail/30275 专题博客系列: Android 8.1 zygote 启动过程源码 Android Framework实战视频–Zygote的fork进程篇 Android Framework实战视频–SystemServer启动

learnframework的博客 1707

国产大模型 coding plan 实战决策指南:GLM、Kimi、豆包、abab 四大模型分层选型与工程落地

大模型辅助编程(coding assistant)正从概念验证走向规模化工程落地,其核心已不再是‘能否生成代码’,而是‘如何在真实开发流程中精准赋能’。理解模型能力边界、匹配技术栈特征、构建分层工作流(L1行级补全/L2函数生成/L3模块重构),是实现稳定提效的关键。GLM系列以工程稳定性见长,适合代码审计与测试生成;Kimi-Max凭借200K超长上下文胜任深度重构与合规审查;豆包响应快、框架适配深,是IDE高频补全的理想选择;abab系列则在IoT固件等跨模态场景中展现独特价值。本文聚焦国产模型在金融、

weixin_32238157的博客 427

SAP 零售 FMS 物料主数据(一)

SAP 零售 FMS 物料主数据(一) SAP 对于鞋服行业最新的解决方案-FMS(相当于原来的AFS+Retail);更偏向与零售; 商品主数据与原来的AFS大不相同,取消了原来的Grid的网格概念,取而代之的是变式;商品主数据维护也偏向于Retail的维护模式;事物代码也不是MM01而是MM41 /MM46; 在维护商品主数据前,需要与商品部沟通定义各种商品相关的规范如编码规则,大中小类 ,颜色库,尺码库等,此处不赘述; 创建商品需要确定哪些物料是变式物料,哪些是常规不带特性的单一物料;这决定了在创建商

weixin_45518759的博客 5061

Android8 开机动画源码分析学习笔记 (一)

摘要:Android系统启动过程中,SurfaceFlinger服务启动流程分析:1) init进程解析surfaceflinger.rc配置文件启动SurfaceFlinger服务;2) main_surfaceflinger.cpp创建SurfaceFlinger对象并初始化,设置线程池、优先级等;3) SurfaceFlinger初始化过程包括创建VSync线程、渲染引擎、硬件合成器等核心组件;4) 通过StartPropertySetThread线程设置系统属性并触发bootanim开机动画服务启动

g_i_a_o_giao的博客 494

实战:批量抓取免费代理IP全流程(附自动验证+失效剔除,爬虫抗封必备)

本文分享了一套从免费代理IP中筛选可用高匿代理的实用方案。作者通过半年实践,总结出"批量抓取+精准验证+动态维护"的方法,能从2000条免费IP中筛选出30-50条可用代理,满足中小规模爬虫需求。 方案包含四个核心环节: 多源代理抓取:针对快代理、西刺代理等不同网站定制解析规则 三层验证机制:检查有效性、匿名度和响应速度 代理池自动维护:实时淘汰失效IP Scrapy整合实战:提供可直接复用的代码 文章特别指出免费代理的三大痛点:存活率低(80%10分钟内失效)、匿名性差(仅5%是高匿代

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1601

Android Framework学习视频(1)-BootAnimation开机动画启动流程源码分析

课程答疑和新课信息:QQ交流群:422901085进行课程讨论 FrameWork入门课视频链接:https://edu.youkuaiyun.com/course/detail/30298 FrameWork实战课1视频链接:https://edu.youkuaiyun.com/course/detail/30275 专题博客系列: Android 8.1 zygote 启动过程源码 Android Framework实战视频–Zygote的fork进程篇 Android Framework实战视频–SystemServer启动

liaosongmao1的专栏 715

FCTA/FCTB 前方交通穿行预警/制动系统技术规范

FCTA&FCTB前方交叉路口预警制动系统是针对十字路口和停车场等"鬼探头"场景设计的驾驶辅助系统。系统在自车速度0-40km/h范围内工作,通过角雷达和摄像头检测侧向来车.

未知艺术家的博客 739

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【好玩的AOSP】没有UI设计师如何自制Android开机动画

学习之余,想把原生AOSP的开机动画给更新替换下,换换口味。我们都知道,AOSP的默认开机动画是一个“ANDROID”的字样,配合一个渐变的底色动画。定制一个自己的开机动画,对于手机厂商来说,有利于宣传品牌,彰显企业文化。

weixin_43240212的博客 2032

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android Framework开机动画绘制分析及实战

4.3、Bootanimation.zip放到 packages/services/Car/car_product/car_ui_portrait/bootanimation/哈喽大家好我是Zzz今天带来的是Framework开机动画绘制分析及实战,还是分析源码为主希望喜欢,环境基于aosp13_r6。4.2、在build/target/product/handheld_system_ext.mk 中增加。c:代表Type这里的type有两种 一种是c只有在启动结束的时候会打断 p:不能被打断。

weixin_51139372的博客 1374

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android9.0开机动画流程学习

目录 1、源码获取与功能介绍 2、Android系统如何启动bootanimation 3、Bootanimation 3.1、初始化工作 3.2、android() 3.3、movie() 3.3、停止播放 4、待补充 1、源码获取与功能介绍 先看android9.0的开机动画的源代码,在Android OS 在线源代码网站:https://www.androidos.net.cn/sourcecode选择自己生产环境的android版本,就可以看到这个版本的所有源代码: ...

菜鸟博客 3166

【Android 12 AOSP学习】动态更换开机动画

通过使用Android10的一个新内容apex文件来实现动态替换系统开机动画

etrospect的博客 5524

android开机动画深入开发学习

disabledoneshot1️⃣定义一个服务名bootanim可执行文件来启动它。2️⃣含义这个 service 属于两个 classclass 是干嘛的?class 是service 分组机制class作用core最早启动的一批核心服务(SurfaceFlinger 也在这里)animation专门给动画用,系统 ready 后会整体 stop📌 Android 13 以后引入animationclass,方便在系统 ready 时统一关闭动画类服务。3️⃣含义进程运行的。

wangxinwei2000的博客 1235

基于Q的Android开机动画

背景 项目中需要处理Android的原生开机动画,一定条件下还需要做到静默重启(android系统启动进入到桌面前,屏幕保持完全没有亮度的状态)。因为项目是基于Android Q做的,顺势探索了一波开机动画的细节。 开机动画到底有几个 搜了一些资料,推荐一篇博客,原理讲的很细,汇总开机动画一共有三个: Android系统的开机画面显示过程分析 总结下: 1、Linux内核的启动画面,这个动画一般不显示。 2、第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。以小米手机为例,开机出现的第

archie_7的博客 2085
上一篇: Android12 系统源码编译及踩坑全攻略
下一篇: Android源码学习之Overlay
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值