设为首页收藏本站

移动叔叔

搜索
查看: 2351|回复: 0
打印 上一主题 下一主题

开机画面制作

[复制链接]
跳转到指定楼层
楼主
发表于 2012-6-8 22:58:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
制作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. 启动模拟器,就可以看到我们自己做的的开机界面了。

修改 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
01.// 启动时载入图像,如果没有找 INIT_IMAGE_FILE 到这个文件名的图片,   
02.// 则打印 A N D R O I D 字样。   
03. if ( load_565rle_image(INIT_IMAGE_FILE) ) {   
04. fd = open("/dev/tty0" , O_WRONLY);   
05. if  (fd >= 0) {   
06.     const   char  *msg;   
07.         msg = "/n"   
08.     "/n"   
09.     "/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%--   
[C++] view plaincopyprint?
01.// 启动时载入图像,如果没有找 INIT_IMAGE_FILE 到这个文件名的图片,   
02.// 则打印 A N D R O I D 字样。   
03. if( load_565rle_image(INIT_IMAGE_FILE) ) {  
04. fd = open("/dev/tty0", O_WRONLY);  
05. if (fd >= 0) {  
06.     const char *msg;  
07.         msg = "/n"  
08.     "/n"  
09.     "/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%--  
// 启动时载入图像,如果没有找 INIT_IMAGE_FILE 到这个文件名的图片,
// 则打印 A N D R O I D 字样。
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"
     "             A N D R O I D ";
     write(fd, msg, strlen(msg));
     close(fd);
}
}
//"system/core/init/init.c" 1039 行 --86%--3. 图像文件名的指定
01.// 图像文件名宏的定义 INIT_IMAGE_FILE     
02.   
03.void  queue_all_property_triggers();   
04.   
05.#define INIT_IMAGE_FILE "/initlogo.rle"   
06.   
07.int  load_565rle_image(  char  *file_name );   
08.   
09.   
10.// "system/core/init/init.h" 179 行 --100%--   

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.               打包
2          windows
使用 winrar 找包,选择 ZIP 格式,压缩标准要选 “ 储存 ”
2          linux
zip -0 -r ../bootanimation.zip ./*
linux 命令使用 -0 指定压缩等级为最低等级 stored ,即只归档不压缩,否则可能由于包格式问题引起动画显示为黑屏
2          注意
打包不要带上层目录
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

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /1 下一条

© 2008-2025 移动叔叔. 版权所有,专业的网络售后平台 ( 闽ICP备18006692号-3 )

商务合作点击这里给我发消息|Email:service@mobileuncle.com|手机版|移动叔叔     

GMT+8, 2025-1-30 07:17 , Processed in 0.186311 second(s), 11 queries , Gzip On, Memcache On.

返回顶部