1. 程式人生 > >DIY韌體系列教程——實現開機LOGO三屏動畫的完全替換

DIY韌體系列教程——實現開機LOGO三屏動畫的完全替換

本教程需要用到如下工具:
1,7Z壓縮工具
2,AddCrc32效驗工具
3,raw2rle轉換工具
4,WinHex16進位制編譯工具
5,Photoshop等影象修改工具
6,RKAndroidTool刷機工具


以上工具在本文最後提供下載!

正文開始:

本文以N3為基礎進行,N系列除解析度不同之外,其他一樣,而在繼續之前,您需要一定的圖片處理基礎和16進位制編譯基礎。

一,先了解N系列的開機動畫有哪些

     原道N系列的開機動畫分為三個螢幕,在開機後依次開始展示,分別如下,

     第一屏,靜態機型展示LOGO,如(N3 N5pro2等),該檔案位於kernel.img中

     第二屏,效能展示LOGO,(N系列GOOGLE智慧娛樂器), 該檔案位於boot.img中


     第三屏,動態展示LOGO,(不停閃動的動畫效果),該檔案位於system.img中


二,從簡入深開始修改

以下內容請在完全瞭解DIY韌體後才可以進行,不瞭解的請先去參考“N系列韌體DIY詳細教程”。

1,最容易修改的開機LOGO為第三屏: 

關於此LOGO的修改原本在IMP3論壇裡提及過,詳細請參考wairen11的Android開機動畫製作教程 :http://bbs.imp3.net/thread-1000459-1-1.html

在這裡僅僅簡單再描述一下:

韌體裡關於N系列用LOGO的檔案路徑為:\Temp\system\media\bootanimation.zip

利用7Z解壓工具,可以看到裡面為多張同分辨率(N3系列為480*272 而N5系列為800*480)的.PNG格式的圖片,原理很簡單,從第1張開始到第22張輪流播放,從而實現動畫效果,所以修改起來也很簡單,用
7Z替換法對應替換同分辨的圖片即可實現修改。(關於連續圖片的動態效果製作請自行學習PS等圖片處理軟體)



值得注意的是,在該\bootanimation.zip檔案中有一個desc.txt檔案,該檔案為動畫效果設定檔案,比如N3的該檔案開啟為後:
  1. 480 272 10
  2. p 0 0 android
複製程式碼 意思就是(注意顏色對應):
解析度為480*272 每秒播放10幀,無限播放 停頓

如果我們修改為:
  1. 480 288 15
  2. p 1 15  android
複製程式碼 即表示(注意顏色對應):
解析度為480*288 每秒播放15幀,播放1次 停頓15幀(1秒)

修改好後即可壓縮生成,注意壓縮一定要選擇
無壓縮率,無失真壓縮才行,或者使用文中提及的7Z替換法,何謂7Z替換法?7Z替換法就是用7Z開啟檔案,但是不解壓,而是直接將圖片或檔案拖入到視窗中進行壓縮替換,該替換法可以不破壞原檔案結構而實現檔案的替換。

以上,將修改好的bootanimation.zip對應替換原檔案後打包刷機即可實現第三屏的動畫替換!

另外,我們還可以直接將其刪除,刪除後將啟用安卓自帶的第三屏LOGO動畫,自帶的LOGO檔案位於\Temp\system\framework\framework-res.apk檔案中,我們同樣可以用7Z替換法對應替換framework-res.apk檔案中如下兩個檔案即可: 



  /framework-res/assets/images/android-logo-mask.png(前景圖片)
  /framework-res/assets/images/android-logo-shine.png(背景圖片)

替換修改好的圖片後打包刷機即可實現安卓自帶第三屏LOGO動畫的替換!

2,略微複雜的第二屏LOGO

    其檔案路徑為 \Temp\boot\initlogo.rle 

    該圖片格式比較特殊,所以需要用到一些如photoshop等一些圖片處理軟體。
    我們首先將要替換的圖片調整成相應解析度(N3系列為480*272 而N5系列為800*480),並另存為.raw格式,

   然後使用android編譯後的rgb2565工具將raw格式轉化為rle檔案,轉換命令如下:
  1. rgb2565 -rle < android_logo.raw >initlogo.rle
複製程式碼

轉換完成即可生成我們需要的開機lOGO檔案了。


不過為了方便,本人已經整合該工具包,現在只需要用將圖片另存為.raw格式後並命名為initlogo.raw放入raw2rle工具包中點選格式轉換即可生成initlogo.rle檔案。


具體步驟:

1,首先將解析度相同的圖片用PS等工具轉換為RAW格式

2,然後將檔案命名為initlogo.raw放入本工具包內

3,點選格式轉換即可生成initlogo.rle檔案





將生成的initlogo.rle對應替換原檔案後打包刷機即可實現第二屏LOGO替換。
3,最麻煩的第一屏LOGO的替換

   前面提及到,第一屏LOGO位於kernel.img中,而瑞芯微沒有對kernel.img開放原始碼而無法解包,所以針對這個第一屏替換比較繁瑣,我們要用到“UltraEdit32”或“WinHex”等16進位制工具來修改kernel.img檔案,lajidong在RK28韌體小組裡非常詳細的公佈了修改辦法,現在本人直接轉過來,值得注意的是,lajidong是針對RK2818方案其他機型的韌體作出的修改,所以N系列僅做參考,以自己的韌體引數為主。


三,針對第一屏的詳細修改教程(作者:lajidong)


1、將kernel.img重新命名為kernel.bak,用WinHex開啟kernel.bak,記下04~07偏移處資料,本例中是D8 91 4C 00,即16進位制數4C91D8;

 
2、選定kernel.bak最前面8個位元組,按Delete鍵刪除,詢問時選擇“YES”;
 

3、按下快捷鍵Alt+G,在彈出的對話方塊裡填入第1步記下的數字4C91D8,然後點“OK”,游標將跳轉到4C91D8處;
 


4、在4C91D8偏移處資料上彈出右鍵選單,選“Beginning of block”,或者直接按下快捷鍵Alt+1;
 


5、將滾動條拉到最後,在檔案最後一個位元組處彈出右鍵選單,選“End of block”,或者點選最後一個位元組後直接按下快捷鍵Alt+2;
 


6、按Delete鍵刪除,詢問時選擇“YES”;
 


7、查詢16進位制串0300000020030000E0010000,這裡姑且叫它特徵串;

 


8、在208A0偏移處查詢到了該特徵串,記下緊跟著該特徵串的那個位元組,本例中是D6,轉換到10進位制就是214,表示調色盤內顏色總數;特徵串偏移加上18(16進位制),即208A0+18=208B8處是調色盤起始地址,調色盤資料大小為顏色總數的3倍,本例中是D6*3=282(16進位制),因此調色盤資料的偏移為208B8到20B39,在這之後,4倍邊界處20B3C就是logo的畫素資料的起始地址,資料大小為800*480=384000(10進位制),因此畫素資料的偏移為20B3C到7E73B;

 


9、準備一張800x480解析度的圖片,用圖片編輯器將圖片垂直翻轉並轉換為索引模式,調色盤最大顏色數設定為上一步記下的214,然後把圖片儲存為未壓縮的BMP格式;  


10、用WinHex開啟上一步製作的BMP,注意檢視0A~0B偏移處資料,本例中是8E 03,即16進位制數38E,那麼從偏移38E到檔案結尾的所有資料就是該BMP的畫素資料

 

選定畫素資料,選擇“Edit”選單下的“Modify Data”項,按下圖設定給每個位元組加上16進位制數20,然後點“OK”,再把這些資料複製覆蓋到第8步畫素資料區(20B3C到7E73,注意資料是覆蓋而不是插入;
 


11、BMP中16進位制偏移36到38D內資料為調色盤資料,為了便於下一步操作,把調色盤資料複製到一個新檔案;
12、用WinHex開啟上一步建的調色盤資料檔案,選擇“Edit”選單下的“Modify Data”項,按下圖設定,選擇“32-bit byte swap”,然後點OK;

 


13、刪除調色盤資料檔案最前面的位元組“00”;
 

14、按下圖設定替換16進位制串;

 


15、把調色盤資料覆蓋到kernel.bak的調色盤資料區(208B8到20B39),同樣要注意資料是覆蓋而不是插入;


16、儲存kernel.bak;


17、在命令列下輸入AddCrc32 kernel.bak kernel.img,生成的kernel.img即可用於刷機;

 


四,關於修改測試的建議

針對修改後的動畫,大家完成後可以使用RKAndroidTool工具(擦除工具)進行單刷測試,以修改第2屏為列,

將解包的BOOT資料夾內的initlogo.rle檔案修改完成後對BOOT.IMG進行重新打包,然後使用擦除工具單獨勾選BOOT後執行即可。



其他2屏的動畫測試一樣,測試成功後就可以上傳自己的個性LOGO韌體了!

注意,取決於你修改的圖片大小,修改後的動畫可能會影響開機速度!

附本文所使用到的工具下載:

http://u.115.com/file/bhbxfag3