现在的位置: 首页 > 综合 > 正文

android 制作开机画面

2014年02月17日 ⁄ 综合 ⁄ 共 5131字 ⁄ 字号 评论关闭

转自:http://blog.lrenwang.com/post/109/

制作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)          将图片转成320x480256色,保存成不带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

抱歉!评论已关闭.