標籤:

為手機定製ROM

為手機定製ROM 分類: Android 2013-07-28 15:41 1868人閱讀 評論(0) 收藏 舉報

一、修改化定製Android4.0系統

Android系統啟動時,先載入Linux內核,在Linux的framebuffer驅動里可以定製開機界面,Linux內核啟動成功後,掛載根文件系統,啟動Android系統,這個時候設備屏幕上開始出現滾動的Android動畫,等全部的Android服務啟動完畢之後,開始啟動Android的HOME界面,也就是桌面。

而在這個過程中,我們可以將開機界面和Android動畫全部定製為自己需要的效果。

在整個開機過程中,屏幕上會出現三次內容:

Linux啟動時畫面,通常是個黃嘴的小企鵝

Android系統本地啟動階段畫面,是「ANDROID」文字字樣

Android系統顯示系統啟動階段動畫,是滾動的ANDROID動畫

我們下面將三個過程中的屏幕內容都進行個性化設置。

1. 定製手機開機界面

根據前面文章介紹,我們要在Linux的framebuffer驅動里修改一些代碼,讓屏幕上出現我們自己的一個開機圖片,如下圖所示效果。

在Linux系統中,LCD顯示設備的驅動都是基於framebuffer的,framebuffer我們可以看成是Android的顯存,只要我們向該顯存里寫入數據,這些數據就可以顯示在LCD上。

根據不同的LCD所支持的顏色可以分為:16位色,24位色,32位色。

學過初中物理都知道,色彩由三元色:紅(R),綠(G),藍(B)組成。

16位色:一個像素點由16bit表示,佔兩個位元組,RGB組成分為:565或555二種

24位色:一個像素點由24bit表示,佔三個位元組,RGB每個顏色由8位組成。

32位色:一個像素點由32bit表示,佔四個位元組,除了RGB每個顏色8位外,還有8位的Alpha的透明度,共組成32位。

很明顯,位數越高,可顯示的色彩越豐富,相同像素的LCD佔用的顯存越大,現在手機和平板基本上都使用32位色的LCD。

Android模擬器里使用16位565格式顯示驅動。

既然如此,那麼出現在framebuffer里的應該是16位的具體顏色值,我們從怎麼知道一個圖片的RGB的值呢?

還好,我們使用一款叫Image2Lcd的軟體,可以將一個指定的bmp點陣圖格式圖片轉換成指定的RGB格式數據的數組中。

如下圖所示:

選擇好圖片,設置好寬度和高度及顏色位數,保存成一個頭文件mylogo.h,打開裡面內容如下:

[cpp] view plaincopy

  1. constunsignedchargImage_log[261120]={0X00,0X10,0XF0,0X00,0X88,0X00,0X01,0X1B,
  2. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  3. ..................................
  4. };

那麼我們可以直接將這個頭文件拷貝到內核目錄中,包含到驅動里,然後直接通過gImage_log數組名訪問圖片內容。 修改fb驅動文件:drivers/video/samsung/s3cfb.c在裡面添加一個繪製Logo圖片函數draw_logo,如下所示:

[cpp] view plaincopy

  1. #include"mylogo.h"
  2. staticintdraw_logo(structfb_info*fb)
  3. {
  4. intheight=(fb->var).yres;
  5. intwidth_=(fb->var).xres;
  6. printk("--------->h=%d,w=%d
    ",height,width);
  7. memcpy(fb->screen_base,gImage_log,height*width*2);
  8. return0;
  9. }

在s3cfb_probe函數里調用我們剛才添加的draw_logo函數:

[cpp] view plaincopy

  1. staticints3cfb_probe(structplatform_device*pdev)
  2. {............................
  3. draw_logo(fbdev->fb[pdata->default_win]);
  4. ............................
  5. }

重新編譯下載內核,就可以看到效果了!

2.定製Android啟動字樣

當Linux啟動完畢之後,開始掛載根文件系統ramdisk.img,通過命令行指定Linux運行Linux系統里的第一個用戶進程init:

init程序由system/core/init/目錄下的源碼編譯而成,其入口文件為:init.c,console_init_action函數就是用來打開console終端,然後在屏幕上列印「ANDROID」字樣的,如果想修改這個值,則直接將其內容修改了,重新編譯init程序,然後重新生成system.img即可,不過,一般是將其內容注釋掉。

[cpp] view plaincopy

  1. staticintconsole_init_action(intnargs,char**args)
  2. {
  3. fd=open(console_name,O_RDWR);
  4. if(fd>=0)
  5. have_console=1;
  6. close(fd);
  7. if(load_565rle_image(INIT_IMAGE_FILE)){
  8. fd=open("/dev/tty0",O_WRONLY);
  9. if(fd>=0){
  10. constchar*msg;
  11. msg="
    "
  12. "
    "
  13. "
    "
  14. "
    "
  15. "
    "
  16. "
    "
  17. "
    "//consoleis40colsx30lines
  18. "
    "
  19. "
    "
  20. "
    "
  21. "
    "
  22. "
    "
  23. "
    "
  24. "
    "
  25. "ANDROID";
  26. write(fd,msg,strlen(msg));
  27. close(fd);
  28. }
  29. }
  30. return0;
  31. }

3. 定製Android動畫Android系統過程中會滾動Android字樣的一個動畫,我們可以根據自己的需要,定製這個開機動畫,如下圖所示:

Android的開機動畫是由Linux本地程序bootanimation控制實現的,其代碼在:frameworks/base/cmds/bootanimation/,通過分析源碼可知,修改Android開機動畫有兩種方式: 替換frameworks/base/core/res/assets/images/目錄下的兩個圖片文件:android-logo-mask.png和android-logo-shine.png,android-logo-mask.png是鏤空濛板png圖片,android-logo-shine.png是鏤空濛板後面的閃光png圖片 在/data/local/或/system/media/目錄創建bootanimation.zip文件bootanimation.zip文件打包前的結構為:[cpp] view plaincopy1. desc.txt 動畫屬性描述文件 2. part0/ 第一階段動畫圖片的目錄(動畫是由一幀幀圖片組成的) 3. part1/ 第二階段動畫圖片的目錄 bootanimation.zip文件是直接由這幾個文件打包的,打包的格式是ZIP,並且要指定用壓縮打包方式(就是在打包時的壓縮方式選擇為存儲)。desc.txt文件的格式為:1. 480 250 15 2. p 1 0 part0 3. p 0 10 part1 其中各個參數的意義為:

註:標識符:p 是必須的。循環次數:指該目錄中圖片循環顯示的次數,0表示本階段無限循環。每秒顯示幀數:就是每秒顯示的圖片數量,決定每張圖片顯示的時間。階段切換間隔時間:指的是該階段結束後間隔多長時間顯示下一階段的圖片,其單位是每張圖片顯示的時間。對應圖片目錄:就是該階段動畫的系列圖片,以圖片文件目錄的順序顯示動畫,而且圖片的格式必須要為PNG。[cpp] view plaincopy

  1. <prename="code"class="cpp"></pre>
  2. <pre></pre>
  3. <pre></pre>
  4. <pre></pre>
  5. <pre></pre>
  6. <pre></pre>
  7. <pre></pre>
  8. <pre></pre>
  9. <pre></pre>
  10. <pre></pre>
  11. <divstyle="padding-top:20px">
  12. <pstyle="font-size:12px;">版權聲明:本文為博主原創文章,未經博主允許不得轉載。</p>
  13. </div>
  • 上一篇ubuntu 10.10 可用更新源
  • 下一篇Android更改桌面應用程序launcher的兩種方式
  • 0
    0

    你的讚賞是我堅持原創的動力

    讚賞共 0 人讚賞
    推薦閱讀:

    定製傢具流程
    315品質消費 讓全屋定製營造美好的生活
    全屋定製的傢具千篇一律?對於定製,你是不是有什麼誤解?
    狗年4大家裝新趨勢 「定製」上行空間大
    從手機殼開始

    TAG:手機 | 定製 |