Android開機畫面由四部分組成,第一部分在bootloader啓動時顯示;第二部分在Linux系統啓動時(就是那小企鵝);第三部分是在Android平臺啓動初始化時,出現“A N D R I O D”文字字樣畫面;第四部分是在平臺圖形系統啓動後,出現含閃爍的ANDROID字樣的動畫。
在bootloader階段,aboot_init函數中,調用了display_init完成顯示的初始化動作後,接着調用display_image_on_screen,在該函數中涉及開機畫面的顯示。原理比較簡單,開機畫面已被轉換爲可以直接用於顯示的RGB數據,存放在一個常量數組中,需要顯示時,定義顯示的區域,直接將這些數據拷貝到Buffer中。
這裏說一下如何將一般的圖片(jpg、png、bmp等)轉換得到bootloader開機畫面所需的顯示數據,其中有些細節需要注意的。
一、得到png文件
大多數格式的圖片,都可以通過photoshop轉換成png格式。注意的是,bootloader需要的png必須是256色且不帶alpha(透明度)通道的。首先,打開需要轉換的文件,比如android.jpg,然後選擇“文件”菜單下的“存儲爲Web和設備所用格式”,如下圖:
注意設置頁面右上角紅色框內的選項,必須選擇PNG-8格式,顏色爲256,不勾選透明度。設置完畢,保存爲png文件,如android.png。
二、轉換成raw文件
這裏要用到一個開源工具ImageMagick,可以到網上下載,有windows版本和Linux版本,其官方網站是www.imagemagick.org。但是,無論是windows還是Linux版本,格式轉換的操作都只支持命令行操作方式。使用下面的命令,得到可進一步利用的raw文件:
convert *.png –depth 8 rgb:*raw
比如上面的android.png,執行:
convert android.png –depth 8 rgb:android.raw
三、使用rgb2565
Android自帶了一個可將raw轉換成直接用於顯示的RGB數據的工具,在out/host/linux-x86/bin/目錄下。其使用格式爲:
./rgb2565 <*.raw> *.raw565
比如需要轉換android.raw,將android.raw拷貝到out/host/linux-x86/bin/,執行:
./rgb2565 <android.raw> android.raw565
所生成文件(如android.raw565)的後綴無關緊要,可以命名爲任何文字。得到的這個文件中的數據,已是可以直接在bootloader中使用的了。這個文件的字節數,應該是原始圖片像素的2倍,比如原始圖片大小是300 * 200的,那麼這裏得到的文件大小應該是120000字節。
四、轉換成數組
上面已提到,bootloader是將開機畫面存放在一個常量數組裏面的。第三步已得到可用於顯示的RGB數據了;Android還提供一個工具,方便的將這些數據轉換成char型數組,它就是xxd。比如,將上述的android.raw565轉換成數組格式存放到一個名爲android_logo.h的頭文件中,執行:
xxd -i android.raw565 > android_logo.h
至此,就可以在bootloader中使用這個logo的數組了。