所需资源下载地址:http://download..net/detail/hanbo622/9725818
一、修改第一张图片
1、将"png-24"格式的图片转换成raw格式(linux下的ImageMagick自带的convert命令,否则执行sudo apt-get install imagemagick)
convert -depth 8 logo.png rgb:logo.raw
2、将raw格式装换成rle格式(源码:build/tools/rgb2565)
./rgb2565 -rle pak_fu_kanlogo.rle
3、修改system/core/init/init.h中#define INIT_IMAGE_FILE "/initlogo.rle" 文件名"/pak_fu_kanlogo.rle"
4、把pak_fu_kanlogo.rle文件放到out/target/product/ut4412/root中
注意:使用PS制作一张480*800的图片,保存时选“保存为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,
保存为logo.png ,好像只支持png-24,其他格式生成的rle文件显示不正常
二、修改第二张图片
方法一:
在window下的操作:
1 在 Widows 环境中建立文件夹:bootanimation
2 在bootanimation文件夹中建立子文件夹:
part0
part1
然后将一批.png文件拷贝到文件夹part0里面,part1中暂时不放图片文件
3 在 bootanimation 文件夹中建立文本文件:
desc.txt
可能在desc.txt中写如下信息(注,该文件是google定义的,可在网上搜索得到):
1024 600 10
p 1 0 part0
p 0 0 part1
文件 desc.txt 的内容解释:
(1)分辨率
1024 600
第一行”1024 600”:表示机器屏幕分辨率width height
(2)帧率
第一行”10”:表示每秒中播放10张图片(gong 10zhang )
(3)p 1 0 part0
p:表示play
1:表示播放一遍,如果是0则表示循环播放
0:表示延时时间
part0:此文件夹下放置开机显示的动画图片,图片分辨率要和机器分辨率一样,否则显示会有问题
(4)p 0 0 part1
在part0的图片都显示完毕后,就显示part1中的图片
4 在文件夹 bootanimation 内,同时选择“part0, part1, desc.txt”,然后压缩
(在Linux下压缩:zip -r -X -Zstore ../bootanimation.zip part*/*.png desc.txt)
压缩的设置如下:
(a)压缩文件名:bootanimation.zip
(b)压缩文件格式:ZIP
(c)压缩方式:存储
5 将前面生成的bootanimation.zip拷贝到工程中
$ cd device/samsung/ut4412/apk
$ mkdir app_newpad
注:将生成的bootanimation.zip文件拷贝到文件夹app_newpad中
6 编辑 device.mk
$ vi device/samsung/ut4412/device.mk
##################################
# copy proprietary apk
##################################
COPY_APK_TARGET := $(call all-apk-files-under,apk)
PRODUCT_COPY_FILES += $(foreach apkName, $(COPY_APK_TARGET), \
$(addprefix $(LOCAL_PATH)/apk/, $(apkName)):$(addprefix system/app/, $(apkName)))
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/apk/flashplayer.nm:system/app/flashplayer.nm
# 添加以下信息
# 注意路径的一致性
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/apk/app_newpad/bootanimation.zip:system/media/bootanimation.zip
方法二:
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字体闪动的画面
所以如果你系那个用.zip的动画那么把你做好的动画拷贝到编译好对应的目录下即可,然后执行make snod整合进img包就可以看到效果了
如果你想修改android闪动的那两张图片的话,最简单的方法是直接替换图片,如果你懂openGL的话也可以自己做酷炫的动画
那两张图片放在./frameworks/base/core/res/assets/images 目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。
我是用Photoshop直接修改的
修改完后直接替换,然后再 mmm frameworks/base , make snod 即可
三、修改开机声音
1、rameworks/base/cmds/bootanimation目录下修改代码
首先在BootAnimation.h添加方法的声明和头文件的引用
#include
#include
//-----add by hslong-----------
#include
#include
class SkBitmap;
添加方法 void bootMusic();
class BootAnimation : public Thread, public IBinder::DeathRecipient
{
public:
BootAnimation();
virtual ~BootAnimation();
sp session() const;
//---------add by hslong---------
void bootMusic();
private:
virtual bool threadLoop();
virtual status_t readyToRun();
virtual void onFirstRef();
virtual void binderDied(const wp& who);
......
}
2、然后在BootAnimation.cpp中实现这个方法:
#define SYSTEM_BOOTMUSIC_FILE "/system/media/poweron.wav"
......
namespace android {
// ---------------------------------------------------------------------------
//-------add by hslong--------------
void BootAnimation::bootMusic()
{
int index;
audio_devices_t device;
MediaPlayer* mp = new MediaPlayer();
if((access(SYSTEM_BOOTMUSIC_FILE,F_OK))!=-1){
printf("access audio\n");
if (mp->setDataSource(SYSTEM_BOOTMUSIC_FILE, NULL) == NO_ERROR) {
printf("setDataSource audio\n");
mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
mp->prepare();
mp->setLooping(true);
}
device = AudioSystem::getDevicesForStream(AUDIO_STREAM_ENFORCED_AUDIBLE);
printf("device = %d\n", device);
bool temp = AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, index, device);
//printf("index = %d,temp = %d\n", index,temp);
temp = AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index, device);
//printf("index = %d,temp = %d\n", index,temp);
if (index != 0){
//printf("index!=0\n");
mp->seekTo(0);
mp->start();
}
}
} //add end
......
}
3、然后再修改bootanimation_main.cpp这个文件,添加调用
// create the boot animation object
sp boot = new BootAnimation();
//------add by hslong---------
BootAnimation *animation = new BootAnimation();
animation->bootMusic();
//----add end
IPCThreadState::self()->joinThreadPool();
4、修改完这写以后还需要修改Android.mk文件
因为播放声音还需要引入库
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libui \
libskia \
libEGL \
libGLESv1_CM \
libgui \
libmedia //---add by hslong----
5、把音频文件poweron.wav放到out/target/product/ut4412/system/media下面
注意:上面只是起到了播放音乐的作用,那么要同步,只需要将代码中的
mp->start();
移至你需要播放音乐的位置即可。