当前位置: 首页 > news >正文

Android 开机流程中的图片与动画解析

在 Android 开源项目(AOSP 13)中,开机流程涉及多个阶段的画面显示,包括 bootloader 阶段、内核阶段、系统初始化阶段和开机动画阶段。以下是对 core/res/assets/images/android-logo-shine.pngvendor/sprd/release/boot_logo_resource/bmp_fileBootAnimation.zip 在开机流程中的作用、关系及显示顺序的详细解析。

1. 开机流程中的显示阶段

Android 设备的开机流程通常包括以下阶段的画面显示:

  1. U-Boot/LK(Little Kernel)阶段:设备启动时的第一个画面,由 bootloader(如 U-Boot 或 LK)加载,显示硬件相关的 logo(如设备制造商的品牌 logo)。
  2. Kernel 阶段:Linux 内核加载后显示的画面,通常是内核 logo(如 Tux 小企鹅或自定义的 kernel logo)。
  3. Android 初始化阶段:Android 系统初始化(init 进程启动后)时显示的静态画面,通常是 “A N D R O I D” 文字或自定义的静态 logo(如 initlogo.rle)。
  4. 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)加载和渲染。
  • 执行流程
    1. init 进程根据 init.rc 脚本启动 bootanimation 服务。
    2. 服务加载 BootAnimation.zip,根据 desc.txt 配置播放 PNG 图片。
    3. 动画播放直到系统启动完成(Zygote 进程加载完成,SystemUI 启动),由 SystemServer 发出停止信号。
  • 与默认动画的关系:如果 BootAnimation.zip 存在,它会优先于默认的 android-logo-shine.pngandroid-logo-mask.png 动画显示;否则,系统回退到默认的文字闪光动画。

3. 图片与动画的关系和显示顺序

  • 关系
    • android-logo-shine.png 是 AOSP 框架层的资源,用于系统初始化或默认开机动画,显示动态文字效果。
    • vendor/sprd/release/boot_logo_resource/bmp_file 是 Spreadtrum 平台特定的资源,用于更早的 bootloader 或内核阶段,显示静态品牌 logo。
    • BootAnimation.zip 是厂商或系统自定义的动态开机动画,优先级高于默认动画。
    • 这些资源分属不同开机阶段,功能上无直接依赖,但共同构成了开机过程中的视觉体验。
  • 显示顺序
    1. U-Boot/LK 阶段(第1阶段):显示 vendor/sprd/release/boot_logo_resource/bmp_file 中的 BMP 图片(如品牌 logo)。
    2. Kernel 阶段(第2阶段):可能继续显示 bmp_file(如配置为 kernel logo),或显示内核默认 logo(如 logo_linux_clut224.ppm)。
    3. Android 初始化阶段(第3阶段):显示 initlogo.rle(如果存在)或简单的 “A N D R O I D” 文字。
    4. Android 开机动画阶段(第4阶段):优先播放 BootAnimation.zip 中的动态动画;若无,则显示 android-logo-shine.pngandroid-logo-mask.png 的默认动画。

4. 注意事项

  • 设备差异:具体图片和动画的显示可能因设备厂商(例如 Spreadtrum 平台)或 AOSP 配置而异。例如,BOOT_LOGO 配置会影响 BMP 文件的选择。
  • 自定义修改
    • 修改 bmp_file 时,需确保图片为 24 位无压缩 BMP 格式,分辨率与设备匹配,并更新 logo.bin
    • 修改 BootAnimation.zip 时,需确保 PNG 图片格式正确,desc.txt 配置准确。
    • 修改默认动画时,需更新 android-logo-shine.pngandroid-logo-mask.png,并确保源码时间戳更新以触发重新编译。
  • 调试方法:可通过 adb logcat 查看 bootanimation 服务的日志,或检查 init.rcBootAnimation.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阶段,优先)。

以上~~

http://www.dtcms.com/a/286160.html

相关文章:

  • leetcode:冗余连接 II[并查集检查环][节点入度]
  • Android 之 audiotrack
  • 协作机器人操作与编程-PE系统示教编程和脚本讲解(直播回放)
  • 多模态大模型重构人机交互,全感官时代已来
  • PPIO × Lemon AI:一键解锁全流程自动化开发能力
  • Rust交叉编译自动化实战
  • 服务器内存满了怎么清理缓存?
  • 【DPDK】高性能网络测试工具Testpmd使用指南
  • ARINC818航空总线机载视频处理系统设计
  • 第一篇htmlcss详细讲解
  • 铁路基础设施无人机巡检技术及管理平台
  • 基于R、Python的Copula变量相关性分析及AI大模型应用
  • Altera Quartus:BAT批处理实现一键sof文件转换为jic文件
  • Altera Quartus:编译完成后自动生成pof文件
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十二课——图像直方图统计的FPGA实现
  • 28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast
  • 开源Docmost知识库管理工具
  • Win11安装Docker,并使用Docker安装RabbitMQ
  • 智能算法优化储能系统充放电策略
  • 基于R语言piecewiseSEM结构方程模型在生态环境领域实践技术应用
  • 指定阿里镜像原理
  • 创建线程的方式有哪些?相比继承Thread类,实现Runable接口的好处是什么?
  • 线上 CPU 过高怎么排查
  • mac系统安装、启动Jenkins,创建pytest接口自动化任务
  • 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
  • 力扣面试150(33/150)
  • 事务处理与AOP(web后端笔记第四期)
  • linux 脚本解释
  • 数据库防止数组字符串序列化
  • 后端参数校验