日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android开机logo修改方法

發(fā)布時(shí)間:2025/4/5 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开机logo修改方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

一體機(jī)平臺(tái)開(kāi)機(jī)logo修改方法

?

1:修改Kernel中的Logo

?????? 若是要替換Kernel中的開(kāi)機(jī)Logo,只需要把內(nèi)核目錄drivers/video/logo下的logo_android_1024_clut224.ppm文件替換掉即可(注意要保持名字一樣,IMTSDK里沒(méi)有這個(gè)ppm,默認(rèn)選擇了Standard 224-color Linux logo)。然后從新編譯核心,把得到的zImage燒寫(xiě)到Nand Flash就可以了。其中制作logo_android_1024_clut224.ppm的方法如下:

? ??? 1>、找一張分別率為1024x600、后綴為png的圖片。然后放到Linux系統(tǒng)下。

?????? 2>、制作ppm文件,使用命令:這里制作的是名字為linuxlogo.pngpng圖片。

????????????? # pngtopnm linuxlogo.png > linuxlogo.pnm

# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm

# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm

?????? 制作完成之后,把linuxlogo224.ppm的名字修改為logo_android_1024_clut224.ppm,然后替換核心中相應(yīng)的文件。

?????? 如果沒(méi)有安裝png圖片制作庫(kù)的話,在制作ppm文件之前需要安裝如下庫(kù)文件。

?????? netpbm libnetpbm10 libnetpbm10-dev

?????? 加載方法:

?? $sudo apt-get install netpbm libnetpbm10 libnetpbm10-dev

?????? 加載完成之后就可以制作了。

核心Logo在內(nèi)核配置中的位置如下:

Device Drivers? --->

?????? Graphics support? --->

????????????? [*] Bootup logo? --->

?????? 其中[*]?? Standard 224-color Android logo(1024X600)為我們制作的開(kāi)機(jī)Logo

[ ]?? Standard 224-color Linux logoLinux自帶的開(kāi)機(jī)Logo小企鵝。

?

2:修改Android系統(tǒng)的開(kāi)機(jī)Logo

Android系統(tǒng)的開(kāi)機(jī)Logo是播放一個(gè)名字為bootanimation.zip的壓縮文件,在系統(tǒng)中的位置為data/local/bootanimation.zip。可以在Android系統(tǒng)中直接替換。一般是在Android系統(tǒng)運(yùn)行之后替換掉data/local/下的bootanimation.zip文件比較方便。

??????

?????? bootanimation.zip文件是zip壓縮文件,壓縮方式要求是存儲(chǔ)壓縮,包含一個(gè)文件和兩個(gè)目錄:

?????? 1.動(dòng)畫(huà)屬性描述文件:desc.txt

??? 2.第一階段動(dòng)畫(huà)圖片目錄:part0

??? 3.第二階段動(dòng)畫(huà)圖片目錄:part1

?

desc.txt文件內(nèi)容:

??? ??? 1024 600 30

?? ??? p 1 0 part0

??? ??? p 0 10 part1

???

desc.txt文件分析:

??? ??? 1024? 600?? 30

???? ?? 寬?? ?高??? 幀數(shù)

????? ? p???????? 1???? ?????????0???????? part0

??? ??? 標(biāo)志符 循環(huán)次數(shù) 階段切換間隔時(shí)間? 對(duì)應(yīng)目錄名

????? ? p???? ????0???????????? 10??????? ?part1

??? ??? 標(biāo)志符 循環(huán)次數(shù) 階段切換間隔時(shí)間? 對(duì)應(yīng)目錄名

?

??? ==================

??? 標(biāo)志符:

??????? 必須是: p

?

??? 循環(huán)次數(shù):

??????? 0 : 表示本階段無(wú)限循環(huán)

?

??? 階段切換間隔時(shí)間:

??????? 單位是一個(gè)幀的持續(xù)時(shí)間,比如幀數(shù)是30,那么幀的持續(xù)時(shí)間就是1秒/30 = 33.3毫秒。

??????? 階段切換間隔時(shí)間期間開(kāi)機(jī)動(dòng)畫(huà)進(jìn)程進(jìn)入休眠,把CPU時(shí)間讓給初始化系統(tǒng)使用。

??????? 也就是間隔長(zhǎng)啟動(dòng)會(huì)快,但會(huì)影響動(dòng)畫(huà)效果。

?

part0和part1目錄內(nèi)包含的是兩個(gè)動(dòng)畫(huà)的系列圖片,圖片為PNG格式。系列圖片文件的加載刷新按文件名的名稱排序。

?

??? ?bootanimation.zip文件的制作方法如下:

?????? 1)、先制作desc.txt、part0和part1三個(gè)文件,如下:

??? 2)、把desc.txt、part0和part1三個(gè)文件制作為自拍格式的壓縮文件,如下:

??? 其中圖示標(biāo)出的1、2和3和地方必須如圖所示。在點(diǎn)擊確定之后就會(huì)生成一個(gè)bootanimation.zip文件,即時(shí)Android系統(tǒng)播放的logo文件。直接替換掉系統(tǒng)data/local/下的bootanimation.zip即可。

?

針對(duì)一體機(jī)平臺(tái),最簡(jiǎn)單的修改方法是把part2下的bootloop_frame_0001.png文件替換掉即可。

?

?

?

Android開(kāi)機(jī)畫(huà)面原理

Android系統(tǒng)開(kāi)機(jī)畫(huà)面分為下面三個(gè)階段
1. Linux
系統(tǒng)啟動(dòng),出現(xiàn)Linux小企鵝畫(huà)面(reboot)(Android 1.5及以上版本已經(jīng)取消加載圖片)
2. Android
平臺(tái)啟動(dòng)初始化,出現(xiàn)"A N D R I O D"文字字樣畫(huà)面;
3. Android
平臺(tái)圖形系統(tǒng)啟動(dòng),出現(xiàn)含閃動(dòng)的ANDROID字樣的動(dòng)畫(huà)圖片(start)

?

1、開(kāi)機(jī)圖片(Linux小企鵝) (Android 1.5及以上版本已經(jīng)取消加載圖片)
Linux Kernel
引導(dǎo)啟動(dòng)后,加載該圖片。
logo.c
中定義nologo,fb_find_logo(int depth)函數(shù)中根據(jù)nologo的值判斷是否需要加載相應(yīng)圖片。(源碼: kernel\drivers\video\logo
代碼如下:
static int nologo;
module_param(nologo, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo");
/* logo's are marked __initdata. Use __init_refok to tell
* modpost that it is intended that this function uses data
* marked __initdata.
*/
const struct linux_logo * __init_refok fb_find_logo(int depth)
{
const struct linux_logo *logo = NULL;
if (nologo)
return NULL;
? ?? ???......
}
相關(guān)代碼:
/kernel/drivers/video/fbmem.c
/kernel/drivers/video/logo/logo.c
/kernel/drivers/video/logo/Kconfig
/kernel/include/linux/linux_logo.h
2
、開(kāi)機(jī)文字("A N D R I O D")

Android 系統(tǒng)啟動(dòng)后,init.cmain()調(diào)用load_565rle_image()函數(shù)讀取/initlogo.rle(一張565 rle壓縮的位圖),如果讀取成功,則在/dev/graphics/fb0顯示Logo圖片;如果讀取失敗,則將/dev/tty0設(shè)為TEXT模式,并打開(kāi)/dev/tty0,輸出文本“A N D R I O D”字樣。

定義加載圖片文件名稱

#define INIT_IMAGE_FILE "/initlogo.rle"
int load_565rle_image( char *file_name );
#endif
init.c
main()加載/initlogo.rle文件。

static int console_init_action(int nargs, char **args)

{

??? int fd;

??? char tmp[PROP_VALUE_MAX];

?

??? if (console[0]) {

??????? snprintf(tmp, sizeof(tmp), "/dev/%s", console);

??????? console_name = strdup(tmp);

??? }

?

??? fd = open(console_name, O_RDWR);

??? if (fd >= 0)

??????? have_console = 1;

??? close(fd);

?

??? if( load_565rle_image(INIT_IMAGE_FILE) ) {

??????? fd = open("/dev/tty0", O_WRONLY);

??????? if (fd >= 0) {

??????????? const char *msg;

??????????????? msg = "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"? // console is 40 cols x 30 lines

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? "\n"

??????????? //"???????????? A N D R O I D ";

??????????? "???????????? R o c k c h i p?? R - B O X";

??????????? write(fd, msg, strlen(msg));

??????????? close(fd);

??????? }

??? }

??? return 0;

}

相關(guān)代碼:

/system/core/init/init.c
/system/core/init/init.h
/system/core/init/init.rc
/system/core/init/logo.c

/kernel/drivers/staging/msm/Logo.c

?

*.rle文件的制作步驟:
a.
使用GIMP或者Advanced Batch Converter軟件,將圖象轉(zhuǎn)換為RAW格式;
b. 使用android自帶的rgb2565工具,將RAW格式文件轉(zhuǎn)換為RLE格式(如:rgb2565 -rle < initlogo.raw > initlogo.rle)

說(shuō)明:

RK盒子上沒(méi)有顯示出R o c k c h i p?? R - B O X字樣是因?yàn)?/span>linux內(nèi)核配置的問(wèn)題。
打開(kāi)內(nèi)核framebuffer控制臺(tái)即可。
(1)make menuconifg
后選擇Device Drivers->Graphics support->Console display driver support->Framebuffer Console support
然后打開(kāi)相關(guān)的幾個(gè)配置選項(xiàng)即可。

3、開(kāi)機(jī)動(dòng)畫(huà)(閃動(dòng)的ANDROID字樣的動(dòng)畫(huà)圖片)

Android 1.6及以上版本:
init.c
解析init.rc(其中定義服務(wù):“service bootanim /system/bin/bootanimation”),bootanim服務(wù)由SurfaceFlinger.readyToRun()property_set("ctl.start", "bootanim");)執(zhí)行開(kāi)機(jī)動(dòng)畫(huà)、bootFinished()property_set("ctl.stop", "bootanim");)執(zhí)行停止開(kāi)機(jī)動(dòng)畫(huà)。
BootAnimation.hBootAnimation.cpp文件放到了/frameworks/base/cmds/bootanimation目錄下了,增加了一個(gè)入口文件bootanimation_main.cppAndroid.mk文件中可以看到,將開(kāi)機(jī)動(dòng)畫(huà)從原來(lái)的SurfaceFlinger里提取出來(lái)了(,生成可執(zhí)行文件:bootanimationAndroid.mk代碼如下:
//=============Android.mk======================
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

?

LOCAL_SRC_FILES:= \

?????? bootanimation_main.cpp \

?????? BootAnimation.cpp

?

LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES

?

LOCAL_SHARED_LIBRARIES := \

?????? libcutils \

?????? libutils \

?????? libbinder \

??? libui \

?????? libskia \

??? libEGL \

??? libGLESv1_CM \

??? libgui

?

LOCAL_C_INCLUDES := \

?????? $(call include-path-for, corecg graphics)

?

LOCAL_MODULE:= bootanimation

?

?

include $(BUILD_EXECUTABLE)
//==========================================
1adb shell后,可以直接運(yùn)行“bootanimation”來(lái)重新看開(kāi)機(jī)動(dòng)畫(huà),它會(huì)一直處于動(dòng)畫(huà)狀態(tài),而不會(huì)停止。
2adb shell后,命令“setprop ctl.start bootanim”執(zhí)行開(kāi)機(jī)動(dòng)畫(huà);命令“getprop ctl.start bootanim”停止開(kāi)機(jī)動(dòng)畫(huà)。這兩句命令分別對(duì)應(yīng)SurfaceFlinger.cpp的兩句語(yǔ)句:property_set("ctl.start", "bootanim");property_set("ctl.stop", "bootanim");

相關(guān)文件:
/frameworks/base/cmds/bootanimation/BootAnimation.h
/frameworks/base/cmds/bootanimation/BootAnimation.cpp
/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
/system/core/init/init.c
/system/core/rootdir/init.r

說(shuō)明:

android開(kāi)機(jī)動(dòng)畫(huà)的源碼位于frameworks/base/cmds/bootanimation下,這個(gè)程序會(huì)將/data/local/bootanimation.zip/system/media/bootanimation.zip里面的png或者jpg圖片以動(dòng)畫(huà)的形式播放出來(lái)。

首先,我們先來(lái)分析一下源碼:

frameworks/base/cmds/bootanimation/BootAnimation.cpp

首先看一下定義的常量:

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

??

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

#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"

BootAnimation::readyToRun()

進(jìn)入一個(gè)if判斷語(yǔ)句

if((encryptedAnimation &&

????????????(access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) ==0) &&

????????????(mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) ==NO_ERROR)) ||

??

????????????((access(USER_BOOTANIMATION_FILE, R_OK) ==0) &&

????????????(mZip.open(USER_BOOTANIMATION_FILE) ==NO_ERROR)) ||

??

????????????((access(SYSTEM_BOOTANIMATION_FILE, R_OK) ==0) &&

????????????(mZip.open(SYSTEM_BOOTANIMATION_FILE) ==NO_ERROR))) {

????????mAndroidAnimation =false;

????}

BootAnimation::threadLoop()

if(mAndroidAnimation) {

?r =Android(); //執(zhí)行android字體閃動(dòng)的圖片

?} else{

?r =movie(); //執(zhí)行bootanimation.zip中提供的動(dòng)畫(huà)圖片

?}

==> BootAnimation::Android()會(huì)加載"images/android-logo-mask.png""images/android-logo-shine.png"
==> BootAnimation::movie()
會(huì)加載bootanimation.zip中的內(nèi)容

RK提供的源碼里默認(rèn)是沒(méi)有那些個(gè).zip動(dòng)畫(huà)的,所以總會(huì)跳到android字體閃動(dòng)的畫(huà)面

所以如果要用.zip的動(dòng)畫(huà)那么只要把做好的動(dòng)畫(huà)拷貝到編譯好對(duì)應(yīng)的目錄下即可,如果想修改android閃動(dòng)的那兩張圖片的話,最簡(jiǎn)單的方法是直接替換圖片,那兩張圖片在./frameworks/base/core/res/assets/images? 目錄下,一張鏤空的android圖,一張發(fā)光效果,動(dòng)畫(huà)效果就是下面那張發(fā)光的效果圖不斷左右移動(dòng)。

?

/frameworks/base/core/res/assets/images/android-logo-mask.png
Android
默認(rèn)的前景圖片,文字部分鏤空,大小256×64
/frameworks/base/core/res/assets/images/android-logo-shine.png
Android
默認(rèn)的背景圖片,有動(dòng)感效果,大小512×64

總結(jié)

以上是生活随笔為你收集整理的Android开机logo修改方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。