bootanimation文件名_Android开机logo制作
制作Android的開(kāi)機(jī)畫(huà)面
引用地址:
注意: 該地址僅在今日23:59:59之前有效
這里所說(shuō)的是android啟動(dòng)的第一個(gè)界面,即kernel啟動(dòng)后由init進(jìn)程調(diào)用的顯示界面
手頭有塊idea6410開(kāi)發(fā)板,是4.3寸TFT液晶屏(480*272分辨率)
首先需要制作一個(gè)480*272大小的圖片:在WINDOWS上用PS應(yīng)該是最方便的。保存時(shí)使用“保存為 Web 所用格式”,然后在彈開(kāi)的窗口上,“預(yù)設(shè)”項(xiàng)選擇“PNG-24”,生成logo.png
接下來(lái)的工作,需要linux環(huán)境(windows上使用cygwin理論上也是可行的)
1、使用ImageMagick自帶的convert命令,進(jìn)行raw格式轉(zhuǎn)換(convert -depth 8 logo.png rgb:slogo.raw)
注:imgageMagick安裝包,Ubuntu 執(zhí)行sudo apt-get install p_w_picpathmagick??,CentOS yum install -y p_w_picpathmagick
2、編譯一下android自帶的rgb2565工具,其路徑在$ANDROID_HOME/build/tools/rgb2565上(gcc -O2 -Wall -Wno-unused-parameter -o rgb2565 to565.c)
3、對(duì)raw文件進(jìn)行rle565格式轉(zhuǎn)換(rgb2565 -rle < logo.raw > initlogo.rle)
到目前為止,啟動(dòng)需要顯示的圖像已經(jīng)做好了,就是initlogo.rle,注意文件名必須是這個(gè),如果想改文件名,需要修改 android/system/core/init/init.h中的宏:
#define INIT_IMAGE_FILE "/initlogo.rle"
下面是給虛擬機(jī)中換開(kāi)機(jī)畫(huà)面
下面需要將initlogo.rle加入的android文件系統(tǒng)中
4. 找到ramdisk.img文件(android/out/target/product/generic/ramdisk.img),將文件名改為 ramdisk.img.gz,然后使用下面的命令解壓:
gunzip ramdisk.img.gz
解壓后得到 ramdisk.img,可能有人要問(wèn),怎么文件名又改回去了?其實(shí)不然,使用file ramdisk.img查看一下就知道了:
解壓 前:ramdisk.img: gzip compressed data, from Unix
解壓后:ramdisk.img: ASCII cpio archive (SVR4 with no CRC)
跑題了,還是說(shuō)正事兒。
5. 使用cpio提取文件:
新建一個(gè)temp目錄:
mkdir temp
cd temp
cpio -i -F ../ramdisk.img
6. 導(dǎo)出文件列表:
cpio -i -t -F ../ramdisk.img > list
注:list是一個(gè)文本文件,里面存儲(chǔ)了ramdisk.img的文件結(jié)構(gòu),我們需要在這個(gè)文件中加入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
注:根據(jù)list文件的描述,生成ramdisk.img文件
8. 用ramdisk.img覆蓋sdk目錄下的ramdisk.img(android-sdk-windows/platforms/android- 2.1/p_w_picpaths/ramdisk.img),最好先備份一下。
9. 啟動(dòng)模擬器,就可以看到我們自己做的的開(kāi)機(jī)界面了。
以下轉(zhuǎn)自:http://my.oschina.net/zhang3/blog/11637
1. 制作 initlogo.rle
# 使用ImageMagick自帶的convert命令,進(jìn)行raw格式轉(zhuǎn)換
convert -depth 8 logo.png rgb:logo.raw
# android自帶的rgb2565工具,對(duì)raw文件進(jìn)行rle565格式轉(zhuǎn)換
$out/host/linux-x86/bin/rgb2565 -rle initlogo.rle
#然后將initlogo.rle拷貝到android系統(tǒng)根目錄,也就是root目錄底下
cp initlogo.rle out/target/product/Demo/root/
2.?相關(guān)的實(shí)現(xiàn)代碼,摘自 Android 2.1
//?啟動(dòng)時(shí)載入圖像,如果沒(méi)有找?INIT_IMAGE_FILE?到這個(gè)文件名的圖片,
//?則打印?A?N?D?R?O?I?D?字樣。
if (?load_565rle_p_w_picpath(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"
"?????????????A?N?D?R?O?I?D?" ;
write(fd,?msg,?strlen(msg));
close(fd);
}
}
//"system/core/init/init.c"?1039?行?--86%--
//?啟動(dòng)時(shí)載入圖像,如果沒(méi)有找?INIT_IMAGE_FILE?到這個(gè)文件名的圖片,
//?則打印?A?N?D?R?O?I?D?字樣。
if(?load_565rle_p_w_picpath(INIT_IMAGE_FILE)?)?{
fd?=?open("/dev/tty0",?O_WRONLY);
if(fd?>=?0)?{
constchar*msg;
msg?=?"/n"
"/n"
"/n"
"/n"
"/n"
"/n"
"/n"//?console?is?40?cols?x?30?lines
"/n"
"/n"
"/n"
"/n"
"/n"
"/n"
"?????????????A?N?D?R?O?I?D?";
write(fd,?msg,?strlen(msg));
close(fd);
}
}
//"system/core/init/init.c"?1039?行?--86%--
// 啟動(dòng)時(shí)載入圖像,如果沒(méi)有找 INIT_IMAGE_FILE 到這個(gè)文件名的圖片,
// 則打印 A N D R O I D 字樣。
if( load_565rle_p_w_picpath(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"
" A N D R O I D ";
write(fd, msg, strlen(msg));
close(fd);
}
}
//"system/core/init/init.c" 1039 行 --86%--
3. 圖像文件名的指定
//?圖像文件名宏的定義?INIT_IMAGE_FILE
void queue_all_property_triggers();
#define?INIT_IMAGE_FILE?"/initlogo.rle"
int load_565rle_p_w_picpath( char *file_name?);
//?"system/core/init/init.h"?179?行?--100%--
1. 介紹 android 開(kāi)機(jī)畫(huà)面由三部分組成,第一部分在 bootloader 啟動(dòng)時(shí)顯示,第二部分在啟動(dòng) kernel 時(shí)顯示,第三部分在系統(tǒng)啟動(dòng)時(shí)( bootanimation )顯示(動(dòng)畫(huà))
2. bootloader 開(kāi)機(jī)圖片
1) 一般使用 rle 格式圖片,不同的 android 系統(tǒng)不同此圖片可能放在不同位置,以下實(shí)例均以 G1 為例, G1 放在 splash 分區(qū)中
2) 制作 rle 格式開(kāi)機(jī)圖片
a) 將圖片轉(zhuǎn)成 320x480 , 256 色,保存成不帶 Alpha 通道的 png 格式
b) 使用 convert 工具將 splash.png 轉(zhuǎn)換成8位色的 splash.raw
convert splash.png -depth 8 rgb:splash.raw 確認(rèn) splash.raw 大小為 460800 字節(jié)
c) 使用 android 工具 rgb2565 改變圖像格式 out/host/linux-x86/bin/rgb2565 < splash.raw > splash.raw565 確認(rèn) splash.raw565 大小為 307200 字節(jié)
3) 燒寫(xiě)(以 G1 為例) 按 Power+Camera 啟動(dòng)到燒寫(xiě)模式 fastboot flash splash1 splash.raw565
3. kernel 開(kāi)機(jī)圖片
1) 相關(guān)代碼 kernel/drivers/video/msm/msm_fb.c ( G1 使用高通芯片組 MSM7201 芯片組) 它會(huì)讀出根目錄下的 xx.rle ,并顯示為開(kāi)機(jī)畫(huà)面, rle 做法同上
4. bootanimation 開(kāi)機(jī)動(dòng)畫(huà)
1) android 2.0 之前
a) 說(shuō)明 使用 bootanimation 程序顯示開(kāi)機(jī)畫(huà)面,如需修改開(kāi)機(jī)畫(huà)面,需要修改源碼
b) 代碼 frameworks/base/cmds/bootanimation/*
frameworks/base/core/res/assets/p_w_picpaths/android-logo*
2) android 2.0 及之后
a) 說(shuō)明 使用 bootanimation 程序顯示開(kāi)機(jī)畫(huà)面,如需修改開(kāi)機(jī)畫(huà)面,不用修改代碼,只需按格式要求做 bootanimation.zip 包,放在系統(tǒng)的 /system/media 目錄中,或 /data/local 目錄中即可,兩個(gè)目錄下都存在時(shí),優(yōu)先使用 /data/local 下的
b) 代碼 frameworks/base/cmds/bootanimation/*
frameworks/base/core/res/assets/p_w_picpaths*
c) 制作動(dòng)畫(huà)包
i. 描述文件 desc.txt
480 427 30
p 1 0 part0
p 0 10 part1 總體說(shuō)明: 480 為寬度, 427 為高度, 30 為幀數(shù),即每秒播放動(dòng)畫(huà) 30 幀 部分說(shuō)明:第一項(xiàng) p 為標(biāo)志符,第二項(xiàng)為循環(huán)次數(shù) 1 為只播放 1 次,0為無(wú)限循環(huán),第三項(xiàng)為兩次循環(huán)之間間隔的幀數(shù),第四項(xiàng)為對(duì)應(yīng)的目錄名
ii. 圖片 圖片放在 desc.txt 中目錄名指定的目錄中,目錄中按字符順序播放
iii. 打包
2 windows 使用 winrar 找包,選擇 ZIP 格式,壓縮標(biāo)準(zhǔn)要選 “ 儲(chǔ)存 ”
2 linux
zip -0 -r ../bootanimation.zip ./*
linux 命令使用 -0 指定壓縮等級(jí)為最低等級(jí) stored ,即只歸檔不壓縮,否則可能由于包格式問(wèn)題引起動(dòng)畫(huà)顯示為黑屏
2 注意 打包不要帶上層目錄
5. 參考
總結(jié)
以上是生活随笔為你收集整理的bootanimation文件名_Android开机logo制作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python设计拼图小游戏_教你用Pyt
- 下一篇: 思科光传输功率查询_各品牌网络设备的光功