android的開機啟動畫面過程分析

2021-06-28 04:37:28 字數 2672 閱讀 2868

以下的分析以4.4 kitkat為準。

從理論上來說,android 有4個開機啟動畫面。

第乙個應該是u-boot的啟動畫面,有些裝置為了滿足按動電源即有顯示,在uboot裡加了開機畫面,實現的方式當然只能是寫實體地址,也因此隨廠家不同具體的實現千差萬別。加上我們接觸的手機平板等裝置大多沒這個開機畫面,所以這裡就不贅述了。

第二個啟動畫面實際是linux的啟動畫面,但這個啟動畫面在android裡預設是關閉的,需要開啟時就開啟kernel選項:

config_framebuffer_console

config_logo

意即kernel支援幀緩衝控制台,並且顯示開機logo。

最方便的辦法當然是make menuconfig。

第乙個對應的配置選單項為:device drivers ---> graphics support ---> console display driver support ---> framebuffer console support

第二個對應的配置選單項為:device drivers ---> graphics support ---> bootup logo

具體執行第乙個動畫的檔案在 kernel/drivers/video/fbmem.c

裡面有fb_prepare_logo函式,負責load 開機畫面。這個函式會呼叫kernel/drivers/video/logo/logo.c的fb_find_logo函式來確認最終會用哪張。

開機的也都在kernel/drivers/video/logo/   目錄下,要注意這些不是標準的png等格式,網上提供了工具來進行轉換為所需的ppm格式,這裡就不贅述了。

第三個開機畫面已經進入了android的範圍,是在init程序啟動的時候載入的。

具體來說,是在system/core/init/init.c 裡幹的。

queue_builtin_action(console_init_action, "console_init");

console_init_action函式中有一行:

load_565rle_image(init_image_file)

這個函式簡單說就是顯示了一張圖,圖的路徑在init_image_file

。init_image_file

的定義是在system/core/init/init.h

:#define init_image_file "/initlogo.rle"

這個rle檔案一般放在device目錄下,可以自己用命令搜尋。網上也有工具提供各種對這個rle格式的轉換。

第四個開機畫面,是我們最常見的安卓手機開機畫面。從實現方式來說,其實就是在init.rc裡新增了乙個bootanimation的服務,這個服務不是自動執行的,它有一定的執行條件,具體可以參看下它的定義:

service bootanim /system/bin/bootanimation

class main

user graphics

group graphics

disabled

oneshot

service shutdownanim /system/bin/bootanimation -shutdown

class main

user graphics

group graphics

disabled

oneshot

什麼時候它會被執行呢?簡單說,就是su***ceflinger啟動的時候,會改變系統變數讓它起來,而系統完成啟動後(launcher已經起來了),activitymanagerservice會輾轉通知su***ceflinger,然後又用改變系統屬性的辦法關閉bootanimation程序。

如上所述,我們就理解了bootanimation是乙個迴圈執行的程序。它的**在:

frameworks/base/cmds/bootanimation/bootanimation.cpp

if (mandroidanimation) else

這兩種模式具體的實現動畫的**比較簡單,就不討論了,只看定義需要的檔案之處:

第一種android模式:

inittexture(&mandroid[0], massets, "images/android-logo-mask.png");

inittexture(&mandroid[1], massets, "images/android-logo-shine.png");

這兩張都在frameworks/base/core/res/assets/images目錄下,替換即可。

第二種movie模式:

mzip.open(user_bootanimation_file) == no_error)

mzip.open(system_bootanimation_file) == no_error)

#define user_bootanimation_file "/data/local/bootanimation.zip"

#define system_bootanimation_file "/system/media/bootanimation.zip"

找到並替換bootanimation.zip即可。

以上,就是android開機可以載入的4次開機啟動畫面。

Android定製 修改開機啟動畫面

android系統在按下開機鍵之後就會進入啟動流程,這個過程本身需要一些時間,而面向使用者的往往是廠商定製的一些宣傳用的比較絢麗的啟動畫面。我們在定製自己的系統時,往往需要把這些畫面換成我們自己的,一方面可以新增自己的logo增加品牌 度,另外也可以新增一些特效讓使用者嚐嚐鮮。原始碼 非官方andr...

linux qt啟動畫面 QT 新增啟動畫面

許多應用程式在啟動時顯示乙個畫面。在程式啟動很慢時,程式設計師用這種方法可以讓啟動時間感覺不那麼長,還有用這個畫面滿足市場的一些要求。給qt應用程式加乙個啟動畫面很簡單,需要使用的類是qsplashscreen。下面的乙個程式的main 函式使用qsplashscreen顯示乙個啟動畫面,同時顯示載...

Ubuntu7 10開機沒有啟動畫面

ubuntu7.10開機後,啟動過程是正常的,但是沒有啟動畫面,就是有個進度條的那個畫面沒有出現,測試pc為ibm thinkpad r60,這是usplsh.conf設定不當,解決辦法 1.sudo gedit etc usplash.conf 初始設定 usplash configuration...