在 Android 开源项目(AOSP 13)中,开机流程涉及多个阶段的画面显示,包括 bootloader 阶段、内核阶段、系统初始化阶段和开机动画阶段。以下是对
core/res/assets/images/android-logo-shine.png
、vendor/sprd/release/boot_logo_resource/bmp_file
和BootAnimation.zip
在开机流程中的作用、关系及显示顺序的详细解析。
1. 开机流程中的显示阶段
Android 设备的开机流程通常包括以下阶段的画面显示:
- U-Boot/LK(Little Kernel)阶段:设备启动时的第一个画面,由 bootloader(如 U-Boot 或 LK)加载,显示硬件相关的 logo(如设备制造商的品牌 logo)。
- Kernel 阶段:Linux 内核加载后显示的画面,通常是内核 logo(如 Tux 小企鹅或自定义的 kernel logo)。
- Android 初始化阶段 :Android 系统初始化(
init
进程启动后)时显示的静态画面,通常是 "A N D R O I D" 文字或自定义的静态 logo(如initlogo.rle
)。 - Android 开机动画阶段 :Android 图形系统(SurfaceFlinger)启动后,显示动态的开机动画,通常由
BootAnimation.zip
提供,或回退到默认的文字动画。
2. 图片与动画文件的作用
(1) core/res/assets/images/android-logo-shine.png
-
路径 :
frameworks/base/core/res/assets/images/android-logo-shine.png
-
作用 :此文件是 Android 系统初始化阶段(initlogo)或开机动画阶段(默认动画)的背景纹理图片,通常与
android-logo-mask.png
配合使用,形成 "A N D R O I D" 文字的动态闪光效果。android-logo-mask.png
是一个镂空蒙版图片,文字部分透明。android-logo-shine.png
是一个背景纹理图片,通过在蒙版后滚动显示,形成动态效果。
-
显示阶段 :在 Android 初始化阶段 (第3阶段)或 开机动画阶段 (第4阶段)使用,由
BootAnimation
类(位于frameworks/base/cmds/bootanimation/BootAnimation.cpp
)加载。 -
相关代码 :
bool BootAnimation::android() { initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png"); initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png"); }
-
显示时机 :当图形系统(SurfaceFlinger)启动时显示,通常作为默认开机动画(当
BootAnimation.zip
不可用时)。
(2) vendor/sprd/release/boot_logo_resource/bmp_file
- 路径 :
vendor/sprd/release/boot_logo_resource/bmp_file
- 作用 :此目录中的
bmp_file
(通常为 BMP 格式图片)由 Spreadtrum(展讯)平台提供,用于 U-Boot/LK 阶段 或 Kernel 阶段 的开机 logo 显示,通常是设备制造商的品牌 logo。- 这些图片通常被打包到
logo.bin
文件中,存储在vendor_boot
分区或 boot 分区,由 LK 或内核解析并显示。
- 这些图片通常被打包到
- 显示阶段 :在 U-Boot/LK 阶段 (第1阶段)或 Kernel 阶段 (第2阶段)显示,具体取决于设备配置(如
BOOT_LOGO
设置)。 - 相关配置 :
-
在
vendor/sprd
目录下的配置文件(如ProjectConfig.mk
)中,可指定BOOT_LOGO
的分辨率(如wuxga
),指向对应的 BMP 文件:BOOT_LOGO := wuxga
-
编译后,
bmp_file
被打包到logo.bin
,由 bootloader 或内核加载。
-
(3) BootAnimation.zip
- 路径 :通常位于
/system/media/bootanimation.zip
或/vendor/overlay/bootanimation.zip
。 - 作用 :
BootAnimation.zip
是一个包含动画帧(PNG 图片)和描述文件(desc.txt
)的压缩包,用于在 Android 开机动画阶段 (第4阶段)播放动态开机动画。由bootanimation
服务(frameworks/base/cmds/bootanimation
)加载和渲染。 - 执行流程 :
init
进程根据init.rc
脚本启动bootanimation
服务。- 服务加载
BootAnimation.zip
,根据desc.txt
配置播放 PNG 图片。 - 动画播放直到系统启动完成(Zygote 进程加载完成,SystemUI 启动),由
SystemServer
发出停止信号。
- 与默认动画的关系 :如果
BootAnimation.zip
存在,它会优先于默认的android-logo-shine.png
和android-logo-mask.png
动画显示;否则,系统回退到默认的文字闪光动画。
3. 图片与动画的关系和显示顺序
- 关系 :
android-logo-shine.png
是 AOSP 框架层的资源,用于系统初始化或默认开机动画,显示动态文字效果。vendor/sprd/release/boot_logo_resource/bmp_file
是 Spreadtrum 平台特定的资源,用于更早的 bootloader 或内核阶段,显示静态品牌 logo。BootAnimation.zip
是厂商或系统自定义的动态开机动画,优先级高于默认动画。- 这些资源分属不同开机阶段,功能上无直接依赖,但共同构成了开机过程中的视觉体验。
- 显示顺序 :
- U-Boot/LK 阶段 (第1阶段):显示
vendor/sprd/release/boot_logo_resource/bmp_file
中的 BMP 图片(如品牌 logo)。 - Kernel 阶段 (第2阶段):可能继续显示
bmp_file
(如配置为 kernel logo),或显示内核默认 logo(如logo_linux_clut224.ppm
)。 - Android 初始化阶段 (第3阶段):显示
initlogo.rle
(如果存在)或简单的 "A N D R O I D" 文字。 - Android 开机动画阶段 (第4阶段):优先播放
BootAnimation.zip
中的动态动画;若无,则显示android-logo-shine.png
和android-logo-mask.png
的默认动画。
- U-Boot/LK 阶段 (第1阶段):显示
4. 注意事项
- 设备差异 :具体图片和动画的显示可能因设备厂商(例如 Spreadtrum 平台)或 AOSP 配置而异。例如,
BOOT_LOGO
配置会影响 BMP 文件的选择。 - 自定义修改 :
- 修改
bmp_file
时,需确保图片为 24 位无压缩 BMP 格式,分辨率与设备匹配,并更新logo.bin
。 - 修改
BootAnimation.zip
时,需确保 PNG 图片格式正确,desc.txt
配置准确。 - 修改默认动画时,需更新
android-logo-shine.png
和android-logo-mask.png
,并确保源码时间戳更新以触发重新编译。
- 修改
- 调试方法 :可通过
adb logcat
查看bootanimation
服务的日志,或检查init.rc
和BootAnimation.cpp
的行为。
5. 总结
vendor/sprd/release/boot_logo_resource/bmp_file
:用于 U-Boot/LK 或 Kernel 阶段,显示静态品牌 logo。core/res/assets/images/android-logo-shine.png
:用于 Android 初始化或默认开机动画,显示文字闪光效果。BootAnimation.zip
:用于 Android 开机动画阶段,优先显示动态动画。- 显示顺序 :
bmp_file
(第1或第2阶段) →android-logo-shine.png
(第3或第4阶段,默认动画) →BootAnimation.zip
(第4阶段,优先)。
以上~~