Andriod 启动图片制作

1首先,安卓启动界面总共有3个阶段。

1)第一个就是Linux系统启动,出现Linux小企鹅画面(reboot);

2)当android系统从Linux内核启动后,将会执行anddroid平台的初始化过程,屏幕上将会出现”A ND R I O D”文字字样画面(但是在我的系统里这个界面并不没有出现;或者说是肉眼没有看到这个画面的出现,这里依然送上这个画面的修改方法);

3)开机动画:这个阶段就是大家能看到的系统启动过程中,显示完"A N D R O I D"字样后显示的图片,类似进度条一样,图片内容也是“A ND R O I D”字样。


第一个(小企鹅)画面的修改:

Linux Kernel引导启动后,加载该图片,涉及到的代码在如下的目录中:
/kernel/trunk/drivers/video/fbmem.c
/kernel/trunk/drivers/video/fbmem.h
/kernel/trunk/drivers/video/logo/logo.c
/kernel/trunk/drivers/video/logo/logo.h
/kernel/trunk/drivers/video/logo/Kconfig
/kernel/trunk/include/linux/linux_logo.h

 

让内核中添加此开机logo的步骤如下:

1、让内核支持启动LOGO

        在内核目录中 make menuconfig

        Device Drivers ---->   Graphics support ---->

        选中 Bootup logo ----> Standard 224-color Linux logo

2、制作开机logo的图片       

         将要当作开机LOGO的图片按照你屏幕的大小进行裁减,并将其保存为bmp格式 或 png格式; 例如linuxlogo.bmp 或 linuxlogo.png

         在linux下输入以下命令(for bmp):

          #bmptoppm linuxlogo.bmp > linuxlogo.ppm                             //生成ppm
          #ppmquant 224 linuxlogo.ppm > linuxlogo224.ppm                   //转换成224颜色
          #pnmnoraw linuxlogo224.ppm > linuxlogo224.ppm                   //转换成ascii格式

        在Linux下输入以下命令(for png):

         # pngtopnm linuxlogo.png > linuxlogo.pnm
         # pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
         # pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm

        注:上述命令需要安装netpbm的工具包 sudo apt-get install netpbm

 3、将LOGO文件放入内核中

           拷贝到制作好的LOGO文件到  /drivers/video/logo 文件夹

           替换 logo_linux_clut224.ppm 文件,还要删除该文件夹下的logo_linux_clut224.o和logo_linux_clut224.c

4、重新编译内核就OK了!这里就不详说。



2 对第二层A N D R I O D文字图片的修改

相关代码:

/system/core/init/init.c
/system/core/init/init.h
/system/core/init/init.rc
/system/core/init/logo.c

*.rle文件的制作步骤:

第一种方法制作initlogo.rle图片

1). 制作当前屏幕像素的图片

 使用PS制作一张适合屏幕大小的图片,保存时选“保存为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,保存为android_logo.png(

注:好像只支持png-24,其他格式生成的rle文件显示不正常,有兴趣大家可以再验证一下。

2). 将图片转换为raw格式
 使用linux下的ImageMagick自带的convert命令,进行raw格式转换,命令为:
  convert -depth 8 android_logo.png rgb:android_logo.raw

 注:ubuntu 10.04 默认已经安装ImgageMagick工具,如果当前系统没有安装,可以执行下面的命令安装:
  sudo apt-get install imagemagick

3). 将raw格式转化为rle文件
 需要用到android编译后的rgb2565工具,在android/out/host/linux-x86/bin目录下(android为当前源码所在目录),转换命令如下:
 rgb2565 -rle < android_logo.raw > initlogo.rle

 ./rgb2565  <android.raw>  android.raw565    //rgb2565图片转换命令


到目前为止,启动需要显示的图像已经做好了,就是initlogo.rle,注意文件名必须是这个,如果想改文件名,需要修改

android/system/core/init/init.h中的宏:
 #define INIT_IMAGE_FILE "/initlogo.rle" 



第二种方法制作.rle图片制作

我们采用Show Image 工具制作.rle图片。

首先我们将准备好的图片通过ShowImage 工具,制作成.rle图片

 

Android启动过程中背景图片显示显示倒计时_android

 


Android启动过程中背景图片显示显示倒计时_android_02

注意WXH的设置:这里是根据我们自己的开发板分辨率来设定的,加入WXH没设置正确的话,就会造成图片显示的错误。

选中图片save成rle图像,名称一定要为initlogo.rle 如图

Android启动过程中背景图片显示显示倒计时_android_03

这个initlogo.rle名称的修改在

android/system/core/init/init.h中的宏:
#define INIT_IMAGE_FILE "/initlogo.rle"

以上initlogo.rle图片就制作好了

2)准备安卓源码包解压

我们在配套的安卓系统中找到该安卓源码包。

1)linux-3.0.8-20141105.tgz

2)rootfs_android4.0.3-20141212.tar.gz

3)android-4.0.3_r1-fs-20141212.tar.gz

注释:1)对应第一层启动源码,2)对应第二层启动源码,3)对应第三层启动源码,

解压rootfs_android4.0.3-20141212.tar.gz源码包

解压后生成android包。

3)mktools工具链

要把目标文件系统全部写入开发板中,一般还需要先把目标文件系统目录制作成单个的映像文件以便烧写或者复制,Linux内核启动时,一般会根据命令行参数挂在不同格式的系统,比如yaffs2,ubifs, ext2等。在此需要使用mkyaffs2image-128M和mkyaffs2image-mlc2这两个工具。

mkyaffs2image-128M工具适用于SLC NAND flash,而mkyaffs2image-mlc2工具适用于MLC NAND flash,它们都用来压制yaffs2格式的映像文件。

先将光盘Android目录中的mktools-20120518.tar.gz文件拷贝到Fedora的/tmp目录下,执行以下命令安装mktools工具链:

#tarxvzf /tmp mktools-20120518.tar.gz –C /

mktools工具链制作好以后。

4)制作新的img镜像

拷贝initlogo.rle到rootfs_dir目录下

因为我的板子nandflash 是SLC型所以不能编译成MLC的ubi,可以编译成yaffs和ext3。 cd到安卓源码目录。

到这步就已经制作好了

注意:我的板子刚烧写时第二界面显示,但是以后再重启还是显示android字体,是因为initlogo被删除了,重新将initlogo放进根目录就可以了。或者写个脚本到init.rc中,将logo放到某个文件夹(不要是sd卡)下,重新cp进根目录。

注意:由于initlogo被删除,我们需要重新自己编译安卓源码,在编译安卓源码的时候一定要按照手册严格进行,


在android-4.0.3完全解压以后,我们队这个源码进行修改,修改logo.c文件,这个文件在/system/core/init/logo.c

注释掉 // unlink(fn); 这个函数的作用就是重启以后图片的还原。    

然后在编译安卓源码,

在编译前,我们必须先安装GCC, arn-linux-gcc,然后编译安卓内核源码,,最后才再编译android-4.0.3这个源码文件,会生成一个rootfs_dir这个文件,如果直接编译android-4.0.3会出现各种错误,各种包丢失。

rootfs_dir rootfs_android.img

就会生成一个rootfs_android.img镜像文件。

烧写到板子上就可以了,,图片就不会再被删除了。

以上的所有过程都是在GCC,arm-linux-gcc已经装好的环境下进行的


5)烧写新的img镜像到mini210开发板。

这里用得是MiniTools工具进行烧写。

 

Android启动过程中背景图片显示显示倒计时_android_04

第三个(开机动画)画面

其实这个部分的动画是使用两个图片显示出来的,具体的图片文件所在路径为:frameworks/base/core/res/assets/images,大家看一下就知道了,也就知道怎么修改了。

和这部分相关的源码文件主要是如下几个:frameworks/base/cmds/bootanimation下面的几个文件就是的了,可以看看BootAnimation.cpp文件的内容,有如下代码片段:

bool BootAnimation::android() 
 { 
     initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png"); 
     initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png"); 
 bool BootAnimation::android()
 {
     initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
     initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");

这就是设置显示的前景图片和背景图片。

 

   接着看还有如下代码:

[cpp] #define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip" 
 #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"  
 #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"
 #define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"
 #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"
 #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"

  看宏名相信大家就知道了,这就是设置动画文件的名称了。为什么会又显示图片又设置动画显示呢,这个Android版本有关。显示两个图片:前景和背景图片 是在1.5版本用,后来就改为了设置动画文件,就是:bootanimation.zip,是zip格式的,这个文件包含三个内容:两个目录:part0 和part1,一个文件desc.txt。
两个目录用来包含要显示的图片,分为第一阶段和第二阶段。剩下的文件就是设置关于如何显示的信息:
示例如下:
480 800 15
    p 1 0 part0
    p 0 0 part1

具体的含义如下:
 480--width of the image, 800--height of the image, 15--frames of second
  p 1, display one time
  p 0, display recycling till handset power on finished,相信大家懂了!呵呵。

         你可以制作自己的bootanimation.zip文件放置在合适的目录下,这样可以代替默认的开机界面:这里说的合适的目录就是上面的宏定义,大家都懂^_^!
        怎么制作bootanimation.zip文件呢?和上面一样创建两个目录和一个文件,然后使用软件或者是命令行大包即可
         zip -r -0 bootanimation.zip part0 part1 desc.txt