Android 源碼中修改開機畫面和動畫

轉自:https://blog.csdn.net/LOVE000520/article/details/52292509

Android系統開機顯示畫面分成兩個過程,第一個過程從按電源鍵到Frameworks啓動爲止。第二個過程從Frameworks啓動完成到Launcher程序啓動完成。

第一個過程顯示的畫面是一張圖,第二個過程顯示的是一個動畫。分別簡要記錄一下怎麼樣在源碼中修改這兩個地方。


1、修改開機畫面

找到源碼kernel\drivers\video\logo\目錄,在這個目錄下你會發現logo_linux_clut224.ppm文件,這個就是開機畫面的圖片,如要替換成自己的Logo,則把自己的Logo圖片(png格式)轉換成ppm格式,替換這個文件,同時刪除logo_linux_clut224.c logo_linux_clut224.o文件,重新編譯燒錄即可。

注:將png圖片改成.ppm格式。首先你要有個 和自己屏幕分辨率一樣 或者 小於屏幕分辨率的圖片,如logo_linux_clut224.png

    ①將png圖片轉成pnm

     pngtopnm logo_linux_clut224.png >logo_linux_clut224.pnm

    ②將pnm圖片的顏色數限制在224色

    pnmquant 224 logo_linux_clut224.pnm > logo_linux_clut224_backup.pnm(此處生成後的名字不可與前者相同,否則會報錯)

    ③將pnm圖片轉換成我們需要的ppm

    pnmtoplainpnm logo_linux_clut224_backup.pnm >logo_linux_clut224.ppm


2、修改開機動畫

在源碼跟目錄中,執行  find . -name "bootanimation.zip"   找到文件所在路徑,可以查看其中的Android.mk瞭解具體的編譯過程,下面先介紹一下如何製作開機動畫:


開機動畫主要是由一個zip格式的壓縮包組成,壓縮包裏面包含數張png格式的圖片,還有一個desc.txt的文本文檔,開機時按desc.txt裏面的指令,屏幕上會按文件名稱順序連續的播放一張張的圖片,


QQ截圖未命名.jpg 
就像播放原始的膠帶影片一樣,形成動畫。

具體這一部分圖片怎麼來,看個人喜好了,我是比較喜歡用flash製作好自己想要的動畫然後按幀導出,然後按數字順序給文件編號就可以了。

如果你不會flash製作也沒關係,推薦一個軟件:SWF2Video Pro ,鏈接我就不提供了,自己可以google搜索到,
這個軟件可以把flash按幀導出成png格式圖片。也就是說,只要有你喜歡的flash動畫,你都可以用這個軟件把畫面截取出來用來做你小石頭的開機動畫。其他格式導出png格式的軟件我就不一一說明了,大家有機會去搜索一下。
保存下來的png圖片記得要按順序編號命名。

下面重點講的是desc.txt這個文件裏面的命令。
desc.txt裏面的命令格式如下:

480 427 30
p 1 0 part0
p 0 0 part1

我逐一解釋一下:

480 427意思是說你開機動畫在屏幕先以多少的分辨率顯示,注意不要超過milestone屏幕480x854的分辨率,否則你的畫面就顯示不全了。

30 這個數字是代表着每秒播放的幀數,拿我這個開機畫面打個比方說,part0文件夾裏面共76個圖片,播放時間就是76/30=2.533333秒播放完畢,當然在手機裏面會有一定的延時,尤其是你的圖片文件比較大的情況下,手機想播快也快不起來,卡啊
以下部分是實現畫面重複位置的
p 1(代表着播放一次) 0(空指令)part0  */這句指令就代表這part0文件夾內的圖片只按名稱順序播放一次
p 0(重複播放)(空指令)part1 */這一句指令代表着part1文件夾內的圖片會循環反覆播放

還有一種是指令不常用,我也來解釋一下吧

p 0 10 part1  這裏面的那個10代表着播放完part1文件夾內的圖片一遍之後稍作停頓,然後再循環播放一遍,再停頓少許,再播放,再停頓稍許·········重複下去
p 1 10 part1  同理,這句代表着播放完part1文件夾內的圖片之後稍作停頓然後繼續執行嚇一條命令。

如果想作出一些特殊的效果,可以活用這些命令,然後分配不同的圖片在各個文件夾裏來實現各種重複與循環。

圖片準備好了,desc.txt裏面的命令準備好了,就可以把他們一起打包壓縮成zip格式了。
記住,是zip格式,而不是rar格式。另外壓縮的時候注意一點,壓縮的時候壓縮方式要選擇存儲,否則開機時手機會不認的。當然不至於變磚,只是開機的時候會黑着沒動畫一直到進入桌面爲止。看圖:

QQ截圖未命名2.jpg 
壓縮文件重命名爲
bootanimation.zip之後,放進源碼相應的目錄下重新編譯,查看out\target\product\la0910\system\media\路徑下的文件,即可發現已經修改成功,再燒錄程序進行驗證。
如果之前已經使用了其他的紅眼之類的非默認開機動畫,這裏會已經存在這個文件,只需覆蓋就好。


接下來介紹一下相關的代碼:


主要的控制代碼在/framework/base/cmds/bootanimation/BootAnimation.cpp中。這個文件定義了對動畫顯示規則的解析,所以,我們可以通過在bootanimation.zip中包含的描述文件來很簡單地定義動畫顯示。只要把開機動畫按一定規則做成bootanimation.zip壓縮包存放在系統的/oem/media/或/system/media/這兩個目錄下。開機時,系統檢測到這兩個目錄任意一個下面有名字爲bootanimation.zip的壓縮包的話,都會解壓並播放裏面定製的動畫。檢測順序是先檢測/oem/media/再檢測/system/media/。

另外,我們還可以用另外一種方式修改動畫,在/frameworks/base/core/res/assets/images/這個目錄中,默認情況下,BootAnimation.cpp中的動畫控制代碼會使用變量mAndroid裏面包含的兩張圖片來做爲顯示動畫。我們要做的就是直接做好圖片替換掉/frameworks/base/core/res/assets/images/中的兩個文件,最主要的還是要把握好圖片的分辨率。


如果只是要修改分辨率,那麼可以通過將其中的圖片修改分辨率後重新生成一個新的bootanimation.zip的方法,達到適配的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章