制作Android的开机画面

这里所说的是android启动的第一个界面,即kernel启动后由init进程调用的显示界面

手头有块idea6410开发板,是4.3寸TFT液晶屏(480*272分辨率)

首先需要制作一个480*272大小的图片:在WINDOWS上用PS应该是最方便的。保存时使用“保存为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,生成logo.png

接下来的工作,需要linux环境(windows上使用cygwin理论上也是可行的)
1、使用ImageMagick自带的convert命令,进行raw格式转换(convert -depth 8 logo.png rgb:slogo.raw)
注:imgageMagick安装包,Ubuntu 执行sudo apt-get install imagemagick  ,CentOS yum install -y imagemagick

2、编译一下android自带的rgb2565工具,其路径在$ANDROID_HOME/build/tools/rgb2565上(gcc -O2 -Wall -Wno-unused-parameter -o rgb2565 to565.c)

3、对raw文件进行rle565格式转换(rgb2565 -rle < logo.raw > initlogo.rle)

到目前为止,启动需要显示的图像已经做好了,就是initlogo.rle,注意文件名必须是这个,如果想改文件名,需要修改 android/system/core/init/init.h中的宏:
#define INIT_IMAGE_FILE "/initlogo.rle"



下面是给虚拟机中换开机画面
下面需要将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/images/ramdisk.img),最好先备份一下。

9. 启动模拟器,就可以看到我们自己做的的开机界面了。

 

 

 

以下转自:http://my.oschina.net/zhang3/blog/11637

 

修改 Android 开机 LOGO

 

1. 制作 initlogo.rle

# 使用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 

  1. // 启动时载入图像,如果没有找 INIT_IMAGE_FILE 到这个文件名的图片,   
  2. // 则打印 A N D R O I D 字样。   
  3.  if ( load_565rle_image(INIT_IMAGE_FILE) ) {  
  4.  fd = open("/dev/tty0" , O_WRONLY);  
  5.  if  (fd >= 0) {  
  6.      const   char  *msg;  
  7.          msg = "/n"   
  8.      "/n"   
  9.      "/n"   
  10.      "/n"   
  11.      "/n"   
  12.      "/n"   
  13.      "/n"    // console is 40 cols x 30 lines   
  14.      "/n"   
  15.      "/n"   
  16.      "/n"   
  17.      "/n"   
  18.      "/n"   
  19.      "/n"   
  20.      "             A N D R O I D " ;  
  21.      write(fd, msg, strlen(msg));  
  22.      close(fd);  
  23.  }  
  24.  }  
  25. //"system/core/init/init.c" 1039 行 --86%--   
  1. // 启动时载入图像,如果没有找 INIT_IMAGE_FILE 到这个文件名的图片,  
  2. // 则打印 A N D R O I D 字样。  
  3.  if( load_565rle_image(INIT_IMAGE_FILE) ) {  
  4.  fd = open("/dev/tty0", O_WRONLY);  
  5.  if (fd >= 0) {  
  6.      const char *msg;  
  7.          msg = "/n"  
  8.      "/n"  
  9.      "/n"  
  10.      "/n"  
  11.      "/n"  
  12.      "/n"  
  13.      "/n"  // console is 40 cols x 30 lines  
  14.      "/n"  
  15.      "/n"  
  16.      "/n"  
  17.      "/n"  
  18.      "/n"  
  19.      "/n"  
  20.      "             A N D R O I D ";  
  21.      write(fd, msg, strlen(msg));  
  22.      close(fd);  
  23.  }  
  24.  }  
  25. //"system/core/init/init.c" 1039 行 --86%--  

3. 图像文件名的指定

  1. // 图像文件名宏的定义 INIT_IMAGE_FILE    
  2.   
  3. void  queue_all_property_triggers();  
  4.   
  5. #define INIT_IMAGE_FILE "/initlogo.rle"   
  6.   
  7. int  load_565rle_image(  char  *file_name );  
  8.   
  9.   
  10. // "system/core/init/init.h" 179 行 --100%--   

 

以下转自:(http://xy0811.spaces.live.com/ )

 

1.      介绍
android
开机画面由三部分组成,第一部分在 bootloader 启动时显示,第二部分在启动 kernel 时显示,第三部分在系统启动时( bootanimation )显示(动画)

2.      bootloader 开机图片

1)          一般使用 rle 格式图片,不同的 android 系统不同此图片可能放在不同位置,以下实例均以 G1 为例, G1 放在 splash 分区中

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/images/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/images*

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