原始碼中修改Android的開機畫面和動畫
阿新 • • 發佈:2019-02-12
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裡面的指令,螢幕上會按檔名稱順序連續的播放一張張的圖片,
就像播放原始的膠帶影片一樣,形成動畫。
具體這一部分圖片怎麼來,看個人喜好了,我是比較喜歡用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(重複播放)0 (空指令)part1 */這一句指令代表著part1資料夾內的圖片會迴圈反覆播放
還有一種是指令不常用,我也來解釋一下吧
p 0 10 part1 這裡面的那個10代表著播放完part1資料夾內的圖片一遍之後稍作停頓,然後再迴圈播放一遍,再停頓少許,再播放,再停頓稍許·········重複下去
p 1 10 part1 同理,這句代表著播放完part1資料夾內的圖片之後稍作停頓然後繼續執行嚇一條命令。
如果想作出一些特殊的效果,可以活用這些命令,然後分配不同的圖片在各個資料夾裡來實現各種重複與迴圈。
圖片準備好了,desc.txt裡面的命令準備好了,就可以把他們一起打包壓縮成zip格式了。
記住,是zip格式,而不是rar格式。另外壓縮的時候注意一點,壓縮的時候壓縮方式要選擇儲存,否則開機時手機會不認的。當然不至於變磚,只是開機的時候會黑著沒動畫一直到進入桌面為止。看圖:
壓縮檔案重新命名為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/中的兩個檔案,最主要的還是要把握好圖片的解析度。
第一個過程顯示的畫面是一張圖,第二個過程顯示的是一個動畫。分別簡要記錄一下怎麼樣在原始碼中修改這兩個地方。
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裡面的指令,螢幕上會按檔名稱順序連續的播放一張張的圖片,
就像播放原始的膠帶影片一樣,形成動畫。
具體這一部分圖片怎麼來,看個人喜好了,我是比較喜歡用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(重複播放)0 (空指令)part1 */這一句指令代表著part1資料夾內的圖片會迴圈反覆播放
還有一種是指令不常用,我也來解釋一下吧
p 0 10 part1 這裡面的那個10代表著播放完part1資料夾內的圖片一遍之後稍作停頓,然後再迴圈播放一遍,再停頓少許,再播放,再停頓稍許·········重複下去
p 1 10 part1 同理,這句代表著播放完part1資料夾內的圖片之後稍作停頓然後繼續執行嚇一條命令。
如果想作出一些特殊的效果,可以活用這些命令,然後分配不同的圖片在各個資料夾裡來實現各種重複與迴圈。
圖片準備好了,desc.txt裡面的命令準備好了,就可以把他們一起打包壓縮成zip格式了。
記住,是zip格式,而不是rar格式。另外壓縮的時候注意一點,壓縮的時候壓縮方式要選擇儲存,否則開機時手機會不認的。當然不至於變磚,只是開機的時候會黑著沒動畫一直到進入桌面為止。看圖:
壓縮檔案重新命名為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的方法,達到適配的效果。
http://blog.csdn.net/dddxxxx/article/details/54343976