首先看一段源码:
bool BootAnimation::threadLoop(){ bool result: //We have no bootanimation file, so we use the stock android logo animation. if(mZipFileName.isEmpty()){ result = android(); }else { result = movie(); } }
由上面一段代码可以发现,从aosp上下载的源码是没有bootanimation.zip文件的,即没有自定义的开机动画(只有android字体的标识),而且如果不在源码层面去添加修改自定义动画,可直接在设备上“/system/media/”文件夹下将animation.zip复制到此,重启即可实现替换掉android原生的开机动画。
那么,是否可以这样操作:将我们准备好的bootanimation.zip文件置于源码某处,然后在刷机时,将此zip文件同样刷到设备的/system/media/文件夹下面,是否就可以实现了?
因此,我是如此操作:
1.我的自定义开机动画压缩文件是:oneadd_bootanimation.zip,我将它放在SystemUI程序资源文件夹下:frameworks/base/packages/SystemUI/res/raw/oneadd_bootanimation.zip
2.在/build/target/product/media_system.mk文件下增加以下内容
PRODUCT_COPY_FILES += \ frameworks/base/packages/SystemUI/res/raw/oneadd_bootanimation.zip:system/media/bootanimation.zip
然后,m编译即可,查看out/target/product/redfin/system/media/文件夹下存在bootanimation.zip文件。
重新刷机后,开机启动查看,开机动画已成功替换。
后话:用chatgpt问了如何给android12源码添加自定义开机动画,他给我的回复是在/build/target/product/文件夹下找到core.mk文件并添加上面那一行(我查了下,andriod8的源码确实有这个文件,但从adnroid10开始就没有这个文件,反而添加了media_system.mk文件,所以感觉chatgpt给的答案也不一定是正确答案,它可能仅仅是从搜索引擎上去找到一些资料,但其实并不能保证完全正确,但可能思路还是不差的),但是我去源码找的时候根本就没有这个文件,只有core_64_bit.mk文件,然后我在此文件上添加了上面的那一行内容,但编译报错通不过,最后再找了找,发现后面有个media_system.mk的文件,想着试一试,最后编译通过,刷机验证开机动画效果符合预期。从这一点说明,可能各个android版本的源码可能各个文件会不一致,具体实际的开发中可能要自己多去试试,积累各个版本的经验。