修改android4.0启动画面和动画

这两天对android启动时的画面和动画修改突然有点兴趣,想着以后可能会遇到,就毫不犹豫的搞了起来,参照着网上的前辈的教程,算是照着葫芦画个瓢吧。

1 修改启动画面 ,主要是出现的4.0之前出现的android字体,或画面,也就是传说中的第一屏

开机文字:Android系统开机会出现“A N D R O I D”这行字,相信大家都不陌生,那么这个怎么修改呢?相关文件在Android系统源码(不是Android内核源码)system/core/init/init.c,如下代码片段:


[cpp] 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" 
         "\n" 
         "             A N D R O I D "; 
         write(fd, msg, strlen(msg)); 
         close(fd); 
     } 
 } 
   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"
            "\n"
            "             A N D R O I D ";
            write(fd, msg, strlen(msg));
            close(fd);
        }
    }         到这里大家就知道怎么修改了吧。但是这里要提到的一点就是,上面的代码片段有一个if语句,就是先检测在文件系统根目录下是否存在要实现的开机动画,如果 不存在的话,那么就显示这个文本信息代替,所以,这个阶段是可以实现图片的显示的,而且图片的格式是.rle格式的。如果不存在就显示文本,所以你可以选 择系那是自己的文字,也就是修改“A N D R O I D”字样啊。也可以选择显示图片,但是要自己在文件系统的根目录下提供提片,具体的图片的名字在init.h文件中定义:


[cpp] <span style="font-size:16px;">#define INIT_IMAGE_FILE "/initlogo.rle" 
 
int load_565rle_image( char *file_name );</span> 
<span style="font-size:16px;">#define INIT_IMAGE_FILE "/initlogo.rle"

int load_565rle_image( char *file_name );</span>     

  现在开始制作开机图片

(copy)

1. 制作当前屏幕像素的图片(模拟器默认为320*480)
 使用PS制作一张320*480的图片,保存时选“保存为 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

到目前为止,启动需要显示的图像已经做好了,就是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. 启动模拟器,就可以看到我们自己做的的开机界面了。

这里有一点是需要说明的,我看到很多人按照教程上做,却没有响应的效果,这是因为你并没有把initlogo.rle文件打包进去,把生成好的initlogo.rle放在temp目录下,然后按照上面的再打包,最后覆盖,启动之  就成了。

 

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

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

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


[java] <span style="font-size:16px;">bool BootAnimation::android() 

    initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png"); 
    initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");</span> 
<span style="font-size:16px;">bool BootAnimation::android()
{
    initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
    initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");</span>           这就是设置显示的前景图片和背景图片。

           接着看还有如下代码:


[cpp] <span style="font-size:16px;">#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"</span> 
<span style="font-size:16px;">#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"</span>    

      看宏名相信大家就知道了,这就是设置动画文件的名称了。为什么会又显示图片又设置动画显示呢,这个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


       至此,自定义开机画面就完成了!

转载于:https://www.cnblogs.com/treemen/archive/2013/04/22/3036729.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值