学员fw笔记:安卓8-13开机动画bootanim实战笔记
@
-
一、开机动画启动、结束流程 -
二、openGl基本绘制流程 -
三、修改绘制android()动画步骤 -
四、绘制movie()动画 -
desc描述文件 -
操作步骤 -
五、android和movie动画结束流程区别 -
android动画的checkExit() -
movie动画的checkExit()
非常感谢学员朋友秋双jack的在清明假期还努力坚持学习,还给大家分享关于自己学习bootanimation的实战学习笔记,大家记得为他点赞,感谢他的干货笔记分享。
一、开机动画启动、结束流程
-
init进程启动property服务,通过epoll监听动画开始; -
init进程启动SurfaceFlinger,SurfaceFlinger启动过程中通过property_set设置动画开始 -
epoll监听到后启动Bootanimation -
执行movie或者android动画,执行过程中持续检查”sys.boot_completed”,判断动画是否应该结束 -
FallbackHome启动后通过AMS->postFinishBooting设置”sys.boot_completed”,结束动画

二、openGl基本绘制流程
-
准备图片 -
准备纹理 -
绘制纹理 
三、修改绘制android()动画步骤
-
准备图片./base/core/res/assets/images/图片.png -
类中添加mClockFont定义 -
将动画启动固定为android() -
initFont() -
设置屏幕绘制区域updateRect、glScissor -
drawclock() -
关闭纹理资源
四、绘制movie()动画
desc描述文件
frameworks/base/cmds/bootanimation/Format.md
android13.0比android8.0多了一些选项:
FADE好像是设置退出时的淡出效果,收到后用N帧平滑淡出。PROGRESS是否在最后一part显示进度条?

操作步骤
android8.0步骤
-
准备desc文件和part图片,打包成bootanimation.zip
必须要以存储方式打包压缩
zip -r -X -Z store bootanimation part*/* desc.txt
-
将animation.zip放到 frameworks/base/cmds/bootanimation目录下 -
编译-实际编译时是在android.mk里面通过命令cp拷贝到system中 -
编译完成后在 /out/target/product/generic_x86_64/system/media目录下能看到有bootanimation.zip就成功了 无需修改代码
android13.0步骤
-
准备desc文件和part图片,打包成bootanimation.zip (必须要以存储方式打包)
必须要以存储方式打包压缩
zip -r -X -Z store bootanimation part*/* desc.txt
-
将bootanimation.zip放到 device/generic/common/bootanimation/下 -
我的device目标是 lunch sdk_phone_x86,所以可以修改./build/make/target/product/sdk_phone_x86.mk,在末尾加上
PRODUCT_COPY_FILES += \ device/generic/common/bootanimation/bootanimation.zip:system/media/bootanimation.zipPRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += system/media/bootanimation.zip
-
编译
五、android和movie动画结束流程区别
结束动画的流程对于movie和android来说是有区别的: 1.执行android时,有结束动画请求立刻就结束 2.执行movie时,主要判断当前part是否立刻结束,其实对于后面的part无论如何是要完全执行完的。并不是我最初理解的直接结束动画。
android动画的checkExit()

movie动画的checkExit()
Android13
如下的一个desc文件,动画执行完part0后,循环执行part1,直到shouldStopPlayingPart->checkExit()检测到wms设置动画退出。
108036060c 10 part0 #ffee00 c cc 00 part1 #ffee00 c cc 10 part2 #ffee00 c cc 11 part3 #ffee00 c cc 10 part4 #ffee00 c c
将part1剩余的部分执行完毕,再执行part2、part3、part4,动画结束。并不是我最初理解的直接结束,part2、part3、part4也不执行了。
type=c把后面的图片都播放完,才执行part2type=p立刻停止,执行part2
运行结果:

更多vip免费系统开发经典大厂面试题库获取,课程优惠购买成为vip学员进入vip群,积极讨论各种行业难点痛点疑难问题,答疑服务等。
请联系马哥:

夜雨聆风


如下的一个desc文件,动画执行完part0后,循环执行part1,直到shouldStopPlayingPart->checkExit()检测到wms设置动画退出。

