Android開機logo製做

製做Android的開機畫面

這裏所說的是android啓動的第一個界面,即kernel啓動後由init進程調用的顯示界面

手頭有塊idea6410開發板,是4.3寸TFT液晶屏(480*272分辨率)

首先須要製做一個480*272大小的圖片:在WINDOWS上用PS應該是最方便的。保存時使用「保存爲 Web 所用格式」,而後在彈開的窗口上,「預設」項選擇「PNG-24」,生成logo.png

接下來的工做,須要linux環境(windows上使用cygwin理論上也是可行的)
一、使用ImageMagick自帶的convert命令,進行raw格式轉換(convert -depth 8 logo.png rgb:slogo.raw)
注:imgageMagick安裝包,Ubuntu 執行sudo apt-get install p_w_picpathmagick  ,CentOS yum install -y p_w_picpathmagick

二、編譯一下android自帶的rgb2565工具,其路徑在$ANDROID_HOME/build/tools/rgb2565上(gcc -O2 -Wall -Wno-unused-parameter -o rgb2565 to565.c)

三、對raw文件進行rle565格式轉換(rgb2565 -rle < logo.raw > initlogo.rle)

到目前爲止,啓動須要顯示的圖像已經作好了,就是initlogo.rle,注意文件名必須是這個,若是想改文件名,須要修改 android/system/core/init/init.h中的宏:
#define INIT_IMAGE_FILE "/initlogo.rle"html



下面是給虛擬機中換開機畫面
下面須要將initlogo.rle加入的android文件系統中

4. 找到ramdisk.img文件(android/out/target/product/generic/ramdisk.img),將文件名改成 ramdisk.img.gz,而後使用下面的命令解壓:
gunzip ramdisk.img.gz
解壓後獲得 ramdisk.img,可能有人要問,怎麼文件名又改回去了?其實否則,使用file ramdisk.img查看一下就知道了:
解壓 前:ramdisk.img: gzip compressed data, from Unix
解壓後:ramdisk.img: ASCII cpio archive (SVR4 with no CRC)
跑題了,仍是說正事兒。

5. 使用cpio提取文件:
新建一個temp目錄:
mkdir temp
cd temp
cpio -i -F ../ramdisk.img

6. 導出文件列表:
cpio -i -t -F ../ramdisk.img > list      

注:list是一個文本文件,裏面存儲了ramdisk.img的文件結構,咱們須要在這個文件中加入initlogo.rle這一行,修改 後的 文件以下:
data

default.prop

dev

init

init.goldfish.rc

init.rc

initlogo.rle

proc

sbin

sbin/adbd

sys

system


7. 生成ramdisk.img
cpio -o -H newc -O ramdisk.img < list

注:根據list文件的描述,生成ramdisk.img文件

8. 用ramdisk.img覆蓋sdk目錄下的ramdisk.img(android-sdk-windows/platforms/android- 2.1/p_w_picpaths/ramdisk.img),最好先備份一下。

9. 啓動模擬器,就能夠看到咱們本身作的的開機界面了。linux

 

 

 

如下轉自:http://my.oschina.net/zhang3/blog/11637android

 

修改 Android 開機 LOGO

 

1. 製做 initlogo.rlewindows

# 使用ImageMagick自帶的convert命令,進行raw格式轉換



convert -depth 8 logo.png rgb:logo.raw







# android自帶的rgb2565工具,對raw文件進行rle565格式轉換 



$out/host/linux-x86/bin/rgb2565 -rle <logo.raw >initlogo.rle   







#而後將initlogo.rle拷貝到android系統根目錄,也就是root目錄底下 



cp initlogo.rle out/target/product/Demo/root/ 



2. 相關的實現代碼,摘自 Android 2.1 app

  1. // 啓動時載入圖像,若是沒有找 INIT_IMAGE_FILE 到這個文件名的圖片,   
  2. // 則打印 A N D R O I D 字樣。   
  3.  if ( load_565rle_p_w_picpath(INIT_IMAGE_FILE) ) {  
  4.  fd = open("/dev/tty0" , O_WRONLY);  
  5.  if  (fd >= 0) {  
  6.      const   char  *msg;  
  7.          msg = "/n"   
  8.      "/n"   
  9.      "/n"   
  10.      "/n"   
  11.      "/n"   
  12.      "/n"   
  13.      "/n"    // console is 40 cols x 30 lines   
  14.      "/n"   
  15.      "/n"   
  16.      "/n"   
  17.      "/n"   
  18.      "/n"   
  19.      "/n"   
  20.      "             A N D R O I D " ;  
  21.      write(fd, msg, strlen(msg));  
  22.      close(fd);  
  23.  }  
  24.  }  
  25. //"system/core/init/init.c" 1039 行 --86%--   
  1. // 啓動時載入圖像,若是沒有找 INIT_IMAGE_FILE 到這個文件名的圖片,  
  2. // 則打印 A N D R O I D 字樣。  
  3.  if( load_565rle_p_w_picpath(INIT_IMAGE_FILE) ) {  
  4.  fd = open("/dev/tty0", O_WRONLY);  
  5.  if (fd >= 0) {  
  6.      const char *msg;  
  7.          msg = "/n"  
  8.      "/n"  
  9.      "/n"  
  10.      "/n"  
  11.      "/n"  
  12.      "/n"  
  13.      "/n"  // console is 40 cols x 30 lines  
  14.      "/n"  
  15.      "/n"  
  16.      "/n"  
  17.      "/n"  
  18.      "/n"  
  19.      "/n"  
  20.      "             A N D R O I D ";  
  21.      write(fd, msg, strlen(msg));  
  22.      close(fd);  
  23.  }  
  24.  }  
  25. //"system/core/init/init.c" 1039 行 --86%--  

3. 圖像文件名的指定ide

  1. // 圖像文件名宏的定義 INIT_IMAGE_FILE    
  2.   
  3. void  queue_all_property_triggers();  
  4.   
  5. #define INIT_IMAGE_FILE "/initlogo.rle"   
  6.   
  7. int  load_565rle_p_w_picpath(  char  *file_name );  
  8.   
  9.   
  10. // "system/core/init/init.h" 179 行 --100%--   

 

如下轉自:(http://xy0811.spaces.live.com/ ) 工具

 

1.      介紹
android
開機畫面由三部分組成,第一部分在 bootloader 啓動時顯示,第二部分在啓動 kernel 時顯示,第三部分在系統啓動時( bootanimation )顯示(動畫) oop

2.      bootloader 開機圖片 動畫

1)          通常使用 rle 格式圖片,不一樣的 android 系統不一樣此圖片可能放在不一樣位置,如下實例均以 G1 爲例, G1 放在 splash 分區中 ui

2)          製做 rle 格式開機圖片

a)           將圖片轉成 320x480 256 色,保存成不帶 Alpha 通道的 png 格式

b)          使用 convert 工具將 splash.png 轉換成8位色的 splash.raw
convert splash.png -depth 8 rgb:splash.raw
確認 splash.raw 大小爲 460800 字節

c)           使用 android 工具 rgb2565 改變圖像格式
out/host/linux-x86/bin/rgb2565 < splash.raw > splash.raw565
確認 splash.raw565 大小爲 307200 字節

3)          燒寫(以 G1 爲例)
Power+Camera 啓動到燒寫模式
fastboot flash splash1 splash.raw565

3.      kernel 開機圖片

1)          相關代碼
kernel/drivers/video/msm/msm_fb.c
G1 使用高通芯片組 MSM7201 芯片組)
它會讀出根目錄下的 xx.rle ,並顯示爲開機畫面, rle 作法同上

4.      bootanimation 開機動畫

1)          android 2.0 以前

a)           說明
使用 bootanimation 程序顯示開機畫面,如需修改開機畫面,須要修改源碼

b)          代碼
frameworks/base/cmds/bootanimation/*
frameworks/base/core/res/assets/p_w_picpaths/android-logo*

2)          android 2.0 及以後

a)           說明
使用 bootanimation 程序顯示開機畫面,如需修改開機畫面,不用修改代碼,只需按格式要求作 bootanimation.zip 包,放在系統的 /system/media 目錄中,或 /data/local 目錄中便可,兩個目錄下都存在時,優先使用 /data/local 下的

b)          代碼
frameworks/base/cmds/bootanimation/*
frameworks/base/core/res/assets/p_w_picpaths*

c)           製做動畫包

                                        i.               描述文件 desc.txt
480 427 30
p 1 0 part0 
p 0 10 part1 
整體說明: 480 爲寬度, 427 爲高度, 30 爲幀數,即每秒播放動畫 30

部分說明:第一項 p 爲標誌符,第二項爲循環次數 1 爲只播放 1 次,0爲無限循環,第三項爲兩次循環之間間隔的幀數,第四項爲對應的目錄名

                                       ii.               圖片
圖片放在 desc.txt 中目錄名指定的目錄中,目錄中按字符順序播放

                                     iii.               打包

²          windows
使用 winrar 找包,選擇 ZIP 格式,壓縮標準要選 儲存

²          linux
zip -0 -r ../bootanimation.zip ./*
linux
命令使用 -0 指定壓縮等級爲最低等級 stored ,即只歸檔不壓縮,不然可能因爲包格式問題引發動畫顯示爲黑屏

²          注意
打包不要帶上層目錄

5.      參考

1)          bootanimation 相關
http://blog.21ic.com/user1/2537/archives/2009/65606.html

2)          rle 文件製做
http://hi.baidu.com/kernel_linux/blog/item/9eff140f9d089c206159f3cb.html

3)          bootloader 啓動
http://blog.csdn.net/yili_xie/archive/2010/05/14/5592276.aspx

相關文章
相關標籤/搜索