修改android4.0.1开机启动画面和开机声音

假设在当前源代码根目录下

一修改开机动画

主要涉及三个方面

1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片,不用管);
2. Android平台启动初始化,出现"A N D R I O D"文字字样画面;
3. Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。

l   修改文字画面

(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/generic/root/

(2). 相关的实现代码,摘自 Android 2.1 

// 启动时载入图像,如果没有找 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). 图像文件名的指定

// 图像文件名宏的定义 INIT_IMAGE_FILE

void queue_all_property_triggers();

#define INIT_IMAGE_FILE "/initlogo.rle"

int load_565rle_image( char *file_name );

Note:重点是第一步,后面代码可以不修改。完成之后执行#source build/envsetup.sh #. Build/envsetup.sh

一次source就可以

l   修改动画

android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来。

首先,我们先来分析一下源码:

frameworks/base/cmds/bootanimation/BootAnimation.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"

BootAnimation::readyToRun()

进入一个if判断语句

if ((encryptedAnimation &&

            (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0) &&

            (mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) == NO_ERROR)) ||

 

            ((access(USER_BOOTANIMATION_FILE, R_OK) == 0) &&

            (mZip.open(USER_BOOTANIMATION_FILE) == NO_ERROR)) ||

 

            ((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) &&

            (mZip.open(SYSTEM_BOOTANIMATION_FILE) == NO_ERROR))) {

        mAndroidAnimation = false;

    }

BootAnimation::threadLoop()

 if (mAndroidAnimation) {

  r = Android(); // 执行android字体闪动的图片

  } else {

  r = movie(); // 执行bootanimation.zip中提供的动画图片

  }

==> BootAnimation::Android()会加载"images/android-logo-mask.png"和"images/android-logo-shine.png"
==> BootAnimation::movie()会加载bootanimation.zip中的内容

我们下载的源码里默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画面。

因此有两种方法修改:

 (1) 直接替换图片,用openGl更工具制作图片,那两张图片放在./frameworks/base/core/res/assets/images  目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。

修改完后直接替换,然后再 mmm frameworks/base/core/res/  , make snod 即可。

注意要在frameworks/base/core/res/目录下mmm,

(2)把.zip的动画拷贝到编译好对应的目录下即可,然后执行make snod整合进img包就可以看到效果了。注意命名

 

二修改开机声音

由于动画是在BootAnimation播放的,所以我们的声音肯定也在这个类中做,照猫画虎,假设添加的声音文件为poweron.wav(其他格式也应该可以)

首先在BootAnimation.h添加方法的声明和头文件的引用  在frameworks/base/cmds/bootanimation/目录下

#include <media/AudioSystem.h>

#include <media/mediaplayer.h>

 

添加方法 void bootMusic();

然后在BootAnimation.cpp中实现这个方法:

void BootAnimation::bootMusic()

{

    int index;

    MediaPlayer* mp = new MediaPlayer();

    if (mp->setDataSource("/system/etc/poweron.wav", NULL) == NO_ERROR) {

        mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);

        mp->prepare();

    }

    AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index);

    if (index != 0) {

        mp->seekTo(0);

        mp->start();

    }

 

}

请注意这个目录setDataSource("/system/etc/poweron.wav", NULL)

其实这个目录是随便写的,你想从哪个目录读这个文件就从哪个目录读好了,但是你要把这个文件放在对应的目录下

比如,这个目录是system/etc (这个目录是android系统的目录,不是源码的目录),这个文件夹是只有读权限而没有写权限的,所有你不用试adb shell了,没用的

其实system/etc这个目录对应的是我们编译后out文件夹下的xxx,然后在system/etc,所以你把poweron.wav放到这里就行了,即 放在out/target/product/generic/system/etc/目录下, 然后#mmm  frameworks/base/cmds/bootanimation/

#make snod

#emulator启动

然后和图上一样,你就会生成新的system.img,当然你之前添加的poweron.wav也会自动被编译进去了

 

然后再修改bootanimation_main.cpp这个文件,因为方法也申明了,也实现了,就是还没有调用,所以调用就在这里调

 

//play boot music -yp

        BootAnimation *animation = new BootAnimation();

        animation->bootMusic();

 

修改完这写以后还需要修改Android.mk文件

因为播放声音还需要引入库

LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
    libui \
     libskia \
    libEGL \
    libGLESv1_CM \
    libgui \
    libmedia

 

请注意,libmedia是新添加的;

完事后就ok了,当然还是需要编译的

mmm  frameworks/base/cmds/bootanimation/

make snod

 

大功告成,这样你就成功的添加了开机音乐

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值