这里所说的是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
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
3. 图像文件名的指定ide
如下转自:(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