Android 的開機動畫是由 Linux 本地守護程序 bootanimation 專門控制實現的,其代碼在 frameworks/base/cmds/bootanimation/ 目錄下。
修改開機動畫的方式有兩種:
1、蒙版圖片替換:
替換 frameworks/base/core/res/assets/images 目錄下的兩張圖片文件,android-logo-mask.png 和 android-logo-shine.png。
android-logo-mask.png 是鏤空蒙版圖片,android-logo-shine.png是鏤空蒙版后面的閃光圖片,兩張圖片通過疊加移動達到動畫效果。
(1)用 Photoshop 制作一張同樣分辨率和格式的圖片,要求背景為黑色,字體中間鏤空,命名為 android-logo-mask.png。制作圖片方法請找度娘。
(2)將制作好的圖片android-logo-mask.png 復制到 frameworks/base/core/res/assets/images 目錄下,替換掉以前的圖片。
$ cp -raf android-logo-mask.png frameworks/base/core/res/assets/images/ // 防止源碼不編譯圖片,需更新圖片時間戳 $ touch frameworks/base/core/res/assets/images/android-logo-mask.png
(3)重新編譯模塊
$ source build/envsetup.sh $ lunch rk3288-eng $ mmm frameworks/base/core/res/
(4)生成新的 system.img
$ make snod
(5)重新燒錄並查看效果。
2、逐幀動畫替換
創建 bootanimation.zip 文件,該壓縮包文件里存放有逐幀動畫和控制腳本,通過連續切換顯示圖片達到動畫的效果。
文件 | 說明 |
desc.txt | 動畫屬性描述文件 |
part0 | 第一階段動畫圖片目錄 |
part1 | 第二階段動畫圖片目錄 |
(1)將第一部分圖片按播放順序命名好,保存在 part0 的文件夾中,例如:001.jpg、002.jpg(有的資料和書籍上強調必須為png格式圖片,但是我在rk3288上測試,jpg格式也可以正常使用)
(2)將第二部分圖片按播放順序命名好,保存在 part1 的文件夾中,例如:001.jpg、002.jpg
(3)創建名稱為 desc.txt 的文檔,內容如下:
1366 768 15 p 1 0 part0 p 0 10 part1
圖片屬性 | 1366(圖片寬度) | 768(圖片高度) | 15(每秒顯示幀數) | 無 |
第一階段動畫屬性 | p(默認標志符) | 1(循環次數為1) | 0(進入該階段的間隔時間) | part0(該階段圖片的存放目錄) |
第二階段動畫屬性 | p(默認標志符) | 0(無限循環) | 10(進入該階段的間隔時間) | part1(該階段圖片的存放目錄) |
每秒顯示幀數:每秒顯示的圖片數量。
間隔時間:該階段結束后間隔多久進入下一階段顯示,單位為每張圖片的顯示時間。
(4)選中part0、part1和desc.txt進入自定義壓縮,壓縮文件格式為 zip,壓縮方式為存儲,命名為 bootanimation.zip。
(5)將壓縮包拷貝到 device/*/$(TARGET_DEVICE) 目錄下。例如:RK3288 的目錄在 device/rockchip/rk3288/bootanimation.zip
(6)修改 device/*/$(TARGET_DEVICE)/$(TARGET_DEVICE).mk 文件。例如:RK3288 是 device/rockchip/rk3288/rk3288.mk
// 在文件中添加,不使用逐幀動畫時,用 # 屏蔽此行即可 PRODUCT_COPY_FILES += device/rockchip/rk3288/bootanimation.zip:system/media/bootanimation.zip
(7)重新編譯生成 system.img
$ source build/envsetup.sh $ lunch rk3288-eng $ make snod
(8)重新燒錄並查看效果。
逐幀動畫的優先級比蒙版動畫的優先級高,當使用了逐幀動畫時,蒙版動畫就不播放了。