AOSP 替换 / 编译开机动画 学习笔记
一、核心概念区分
单编:仅编译指定模块,如 m bootanimation、m systemimage
全编:编译整个 Android 系统所有镜像(system、vendor、product 等),命令:make -j8
二、完整流程梳理
- 创建动画目录与帧文件夹
在源码目录下创建存放开机动画资源的目录结构:
bash
运行
mkdir -p vendor/bootanimation/{part0,part1}
- 编写 desc.txt 配置文件
步骤 1:打开 / 创建 desc.txt 文件
bash
运行
vim ~/code/vendor/bootanimation/desc.txt
步骤 2:编辑配置内容(适配 1440 x 2960 分辨率模拟器)
按 i 进入编辑模式,输入以下内容:
txt
1440 2960 30 # 宽 高 帧率
p 1 0 part0 # 第一部分:播放1次,无延迟
p 0 0 part1 # 第二部分:无限循环
步骤 3:保存并退出 Vim
按 Esc 键退出编辑模式,输入以下命令保存退出:
bash
运行
:wq
步骤 4:放入动画帧 + 打包 bootanimation.zip
将动画帧图片(命名为 001.png、002.png、003.png…)放入 part0/、part1/ 目录;
进入动画目录并打包(二选一,均为 0 级压缩,系统可识别):
方式 1(自定义命令):
bash
运行
cd ~/code/vendor/bootanimation
zip -r -X -Z store bootanimation.zip part/ desc.txt
方式 2(通用标准命令,更易记):
bash
运行
cd ~/code/vendor/bootanimation
zip -0qry bootanimation.zip desc.txt part0/ part1/
- 临时部署(ADB 推送,快速验证效果)
步骤 1:启动可读写分区的模拟器
bash
运行
emulator -writable-system # 关键:让/system分区可写
步骤 2:推送动画包并重启系统服务
bash
运行
cd ~/code/vendor/bootanimation/
adb root; adb remount; # 提权 + 重新挂载/system为可写
adb push bootanimation.zip /system/media/bootanimation.zip
adb shell stop; adb shell start # 重启系统服务,无需重启模拟器
- 源码集成(编译后永久生效)
步骤 1:配置 product.mk 文件
在对应的 product.mk 文件中添加拷贝规则:
makefile
PRODUCT_COPY_FILES +=
vendor/bootanimation/bootanimation.zip:system/media/bootanimation.zip
步骤 2:编译系统镜像
bash
运行
cd ~/code
source build/envsetup.sh
lunch sdk_phone_x86_64-eng
单编system镜像(推荐,耗时短)
m systemimage -j8
若需全编(耗时久):make -j8
步骤 3:刷入编译后的镜像
bash
运行
fastboot flash system out/target/product/sdk_phone_x86_64/system.img
fastboot reboot
三、通用扩展命令(适配开机动画定制全场景)
1. ADB常用命令(模拟器/设备调试)
| 命令 |
用途 |
adb shell wm size |
查看设备/模拟器分辨率(如你的1440x2960) |
adb shell ls /system/media/ |
查看系统中开机动画是否存在 |
| `adb logcat |
grep BootAnimation` |
查看开机动画日志(排查动画不显示问题) |
adb shell setprop service.bootanim.exit 0 |
重置开机动画退出标志(重新播放动画) |
adb shell setprop service.bootanim.exit 1 |
终止开机动画(无限循环时用) |
adb reboot |
重启设备/模拟器(验证开机动画) |
2. Ubuntu文件/目录操作(高频)
| 命令 |
用途 |
mkdir -p dir1/dir2 |
递归创建多级目录(不存在则建,存在不报错) |
cp -r 源目录 目标目录 |
递归复制目录(如复制动画帧到part0) |
rm -rf 目录/文件 |
强制删除目录/文件(慎用,如删除错误的zip) |
ls -l |
查看目录下文件详情(大小、权限) |
pwd |
查看当前所在路径(避免目录找错) |
mv 旧文件名 新文件名 |
重命名文件(如修正zip文件名) |
3. Zip打包/解压命令(开机动画专属)
| 命令 |
用途 |
zip -0qry boot.zip desc.txt part* |
标准打包(0级压缩,必用) |
zip -r -X -Z store boot.zip * |
等价于0级压缩(你的命令) |
unzip -l bootanimation.zip |
查看zip内文件(验证打包是否正确) |
unzip bootanimation.zip -d 目录 |
解压zip到指定目录(修改帧时用) |
4. Vim编辑命令(编写desc.txt/mk文件)
| 命令/操作 |
用途 |
vim 文件名 |
打开/创建文件 |
i |
进入编辑模式(输入内容) |
Esc |
退出编辑模式(回到命令模式) |
:wq |
保存并退出 |
:q! |
放弃修改,强制退出(输错内容时用) |
u |
撤销上一步输入(编辑模式输错时) |
:set nu |
显示行号(编辑mk文件时方便定位) |
5. 编译相关命令(AOSP源码)
| 命令 |
用途 |
source build/envsetup.sh |
加载编译环境(必执行) |
lunch |
列出可选编译目标(选模拟器型号) |
lunch 目标名 |
选择编译目标(如aosp_x86_64-eng) |
m 模块名 -j8 |
单编指定模块(如m bootanimation、m systemimage) |
make clean |
清理编译产物(编译出错时用) |
out/host/linux-x86/bin/emulator |
启动编译后的模拟器(验证镜像) |
四、通用化关键注意事项(必记)
-
压缩等级:bootanimation.zip必须用0级压缩(-0/-Z store),否则系统识别不到;
-
分辨率匹配:desc.txt的宽高必须和设备/模拟器一致(adb shell wm size 核对);
-
路径准确:
- 临时部署:推送路径优先
/system/media/bootanimation.zip;
- 源码集成:PRODUCT_COPY_FILES的源路径是源码中zip的路径,目标路径固定为system/media/;
-
模拟器启动:必须加
-writable-system 才能修改/system分区;
-
帧命名规则:必须连续数字(0001.png、0002.png…),否则动画播放错乱。