Android定制:修改開機啟動畫面


轉自:https://blog.csdn.net/godiors_163/article/details/72529210

 

引言

Android系統在按下開機鍵之后就會進入啟動流程,這個過程本身需要一些時間,而面向用戶的往往是廠商定制的一些宣傳用的比較絢麗的啟動畫面。我們在定制自己的系統時,往往需要把這些畫面換成我們自己的,一方面可以添加自己的LOGO增加品牌曝光度,另外也可以添加一些特效讓用戶嘗嘗鮮。

源碼:非官方Android5.1源碼

描述

籠統來說,目前android開機畫面由三個部分(階段)組成,第一部分在bootloader啟動時顯示(靜態),第二部分在啟動kernel時顯示(靜態),第三部分在系統啟動時(bootanimation)顯示(動畫)。

1、第一個開機畫面: 
Bootloader啟動Linux內核時的啟動畫面(Linux小企鵝的畫面)。 
在默認情況下,這個畫面是不會出現的(Android 1.5及以上版本已經取消加載圖片),除非我們在編譯內核的時候,啟用以下兩個編譯選項: 
CONFIG_FRAMEBUFFER_CONSOLE、CONFIG_LOGO 
第一個編譯選項表示內核支持幀緩沖區控制台,它對應的配置菜單項為: 
Device Drivers —> Graphics support —> Console display driver support —> Framebuffer Console support。 
第二個編譯選項表示內核在啟動的過程中,需要顯示LOGO,它對應的配置菜單項為: 
Device Drivers —> Graphics support —> Bootup logo。

如有興趣可以查看內核源碼: 
<source>/kernel/goldfish/drivers/video/ 
<source>/kernel/goldfish/drivers/video/logo/ 
...

2、第二個開機畫面: 
Android系統 init 進程啟動過程中的畫面。 
第二個開機畫面的內容是由文件 initlogo.rle 來指定的,如果文件 initlogo.rle 文件不存在,或者在顯示它的過程中出現異常,那么 Android 就以文本的方式來顯示第二個開機畫面,即向編號為0的控制台(/dev/tty0)輸出“ANDROID”這7個字符。

如有興趣可以查看系統源碼: 
<source>/system/core/init/ 
<source>/system/core/init/init.c 
<source>/system/core/init/logo.c 
...

3、第三個開機畫面: 
應用程序 bootanimation 顯示的動畫。 
bootanimation 程序會檢查系統制定目錄下是否存在動畫文件(.zip文件),如果不存在,則顯示的第三個開機畫面是Android系統默認的開機動畫(明暗閃爍的 Android Logo),否則的話,第三個開機畫面就是由用戶自定義的開機動畫。

如有興趣可以查看系統源碼: 
<source>/frameworks/base/cmds/bootanimation/

方法

我們在定制過程中根據實際需要修改,對於開機啟動畫面,我們主要修改的是第三個畫面(動畫)。

1、修改默認的開機畫面 
Android系統默認的開機動畫是由兩張圖片android-logo-mask.pngandroid-logo-shine.png通過程序調用實現的動畫效果(明暗變化)。 
這兩張圖片保存在<android-source>/frameworks/base/core/res/assets/images中。

簡單替換的方法就是自定義png圖片,替換 android-logo-mask.png文件,並重新編譯:

$ mmm -B frameworks/base/core/res/

會生成新的<android-source>/out/target/product/xxx/system/framework/framework-res.apk文件,替換的圖片就在其中。

2、使用自定義的開機動畫 
系統源碼中有關開機動畫的文件定義了兩個宏:

#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip" #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"

因此我們只要制作名為bootanimation.zip的動畫文件,並放到上面其中之一的目錄下就好了。 
具體操作如下: 
(1) 制作bootanimation.zip動畫包 
1> 准備png圖片(大量圖片輪播成為動畫效果) 
2> 編寫動畫描述文件 desc.txt,內容格式如下: 
第一行的三個數字分別表示開機動畫在屏幕中的顯示寬度、高度以及幀速(fps)。 
剩余的每一行都用來描述一個動畫片斷,這些行必須要以字符“p”來開頭,后面緊跟着兩個數字以及一個文件目錄路徑名稱。 
第一個數字表示一個片斷的循環顯示次數,如果它的值等於0,那么就表示無限循環地顯示該動畫片斷。 
第二個數字表示每一個片斷在兩次循環顯示之間的時間間隔,這個時間間隔是以一個幀的時間為單位的。 
文件目錄下面保存的是一系列png文件,這些png文件會被依次顯示在屏幕中。

舉例說明:

600 480 24 // 開機動畫大小為寬600 高 480,動畫的顯示速度為24幀每秒。 p 1 0 part1 // part1目錄下png圖片顯示一次,循環間隔為0幀時間。 p 0 10 part2 // part2目錄下png圖片無限循環,循環間隔為10幀時間。

(2) 把做好的動畫包放入指定目錄

$ cp bootanimation.zip <source>/out/target/product/xxx/system/media/

(3) 重新生成 system.img 鏡像

后記

不同廠商提供的源碼可能有所不同,修改的時候根據實際情況修改。

如需進一步了解,下面有幾篇博文可供參考: 
1. Android系統的開機畫面顯示過程分析: 
http://blog.csdn.net/luoshengyang/article/details/7691321/ 
2. android logo:內核、android開機動畫 
http://blog.csdn.net/xubin341719/article/details/8267282


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM