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

现在我们说的是第三种方式(基于模拟器):

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 即可

以下是我修改后的效果图:

看样子还想那么回事

接下来我们给系统添加开机声音

由于动画是在BootAnimation播放的,所以我们的声音肯定也在这个类中做,照猫画虎

首先在BootAnimation.h添加方法的声明和头文件的引用

#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放到这里就行了,当然如果你这时再emulaor 也同样是看不到效果的,因为你修改完还没有编译,和上面修改图片一样,make snod一下

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

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

//play boot music -ypBootAnimation *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

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

也许有人会问,那android系统自带的那些音乐和铃声在什么地方呢?

源码目录在framworks/base/data/sounds

至于编译完成后放到什么地方了那是Android.mk文件上配置的

不过这里叫AllAudio.mk

我们可以看到他又包含了很多mk文件,在同一目录下就可以找到,上图中就可以,我们随便打开一个看看

这下你们顿时明白了吧,这些资源编译后都去了神马地方

所以,在刚才添加poweron.wav的时候,其实可以直接把声音资源丢到framworks/base/data/sounds这个目录下

然后再mk文件中这样修改:

$(LOCAL_PATH)/poweron.wav:system/etc/poweron.wav \

不用我说,当然是执行mmm还有make snod命令了

其实还有一种办法,如果你不想这么麻烦,你可以之际把poweron.wav 文件丢到./frameworks/base/core/res/assets/sounds下,用的时候怎么用呢?

加载的时候路径是什么呢?我们看看源码

我们可以看到之前我们修改的那两张图片是怎么被加载进来的

而这个方法的两个参数是:

是不是顿时又明白了?

原来精髓所在是有个Asset可以使用,这个和上层开发中是一样的,这个文件夹中的东西是不编译的。

Asset* asset = assets.open(name, Asset::ACCESS_BUFFER);if (!asset)return NO_INIT;SkBitmap bitmap;SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),&bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);asset->close();delete asset;

所以按照这个方法就可以找到poweron.wav 这个文件了,然后修改下bootMusic的代码就可以了。

转载于:https://www.cnblogs.com/jqyp/archive/2012/03/07/2383973.html

android4.0.3 修改启动动画和开机声音相关推荐

  1. 修改linux内核启动动画,Android 开机界面及Linux内核启动界面的修改(tiny6410)

    第一开机界面替换,即内核bootloader启动小企鹅界面更换 1.首先找一个自定义120*120的png图像,这里名称linux.png,但是后面的ppm名称必须是图中所示 在linux下执行下面代 ...

  2. MTK平台 Android4.0.3 定制关机动画

    实现效果是这样的,长按电源键弹出关机对话框,选择关机项将呈现关机动画和音乐直到正常关机完毕,下面说说具体思路及实现代码 找到长按电源键控制代码 /frameworks/base/policy/src/ ...

  3. Ubuntu12.04下在Android4.0.4源码下载及其编译过程(转载)

    一.下载源码 1.下载工具repo:https://android.googlesource.com/tools/repo/ 在本地目录建个bin的文件夹,进入bin文件夹:通过git下载: [cpp ...

  4. Linux关闭开关机动画,centos7删除开机动画及修改启动菜单

    删除开机动画 编辑vi /etc/default/grub 文件,找到 GRUB_CMDLINE_LINUX 一行,将"rhgb quiet" 改为 "quiet&quo ...

  5. mtk使用android开关机动画,Android9.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)...

    文章较长建议先收藏再看 拆解步骤 1.app 强制横屏显示,无视 android:screenOrientation="portrait" 属性 2.屏幕触摸坐标修改为横屏 3.开 ...

  6. Android10.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)

    拆解步骤 1.app 强制横屏显示,无视 android:screenOrientation="portrait" 属性 2.开机动画横屏 3.开机logo.关机充电动画横屏 4. ...

  7. Android9.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)

    文章较长建议先收藏再看 拆解步骤 1.app 强制横屏显示,无视 android:screenOrientation="portrait" 属性 2.屏幕触摸坐标修改为横屏 3.开 ...

  8. u-boot开机logo修改及kernel启动动画去除

    1.开机logo: 替换:MfgTool-MYIMX6A9-L4.1.15\Profiles\Linux\OS Firmware\image-L4.1.15-uboot\my_logo.bmp 图片要 ...

  9. android 刷机动画,Android开机动画修改方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android开机动画有两种修改方法,android 2.0及之后,使用bootanimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按 ...

最新文章

  1. 第一次,人类在人工神经网络中发现了“真”神经元
  2. 80后,从爱情,到婚姻
  3. angular生命周期钩子ngOnChanges-父组件使子组件输入属性值变化时触发
  4. 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享
  5. Xposed模块编写遇到的一些问题以及解决
  6. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
  7. 7.3.2 非阻塞IO(non-blocking IO)
  8. oracle能查dml记录么,如何查询DML操作的详细记录
  9. innobackup备份恢复实操步骤--gtid复制(1)(1)
  10. CSS中id选择器和class选择器
  11. 爬出数据标注陷阱,半监督学习模型暗藏多少玄机?
  12. ERStudio逆向工程生成ER模型
  13. docker安装redis并挂载配置文件
  14. python如何速成_怎样速成python?
  15. 列宽一字符等于多少厘米_Excel中行高多少等于1厘米?列宽多少等于1厘米?-列宽为2厘米...
  16. 金融总结八---多头/空头平仓/开仓
  17. 蓝海大脑高性能气象大数据平台为气象局掌握风云变幻提供助力
  18. HTML5期末大作业:红酒销售网页网站设计——品牌红酒销售网页模板(4页) html网页设计期末大作业_网页设计平时作业
  19. 3万字通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?
  20. Android接收短信和发送短信

热门文章

  1. 使用matplotlib进行简单的数据展示
  2. java poi读取word中附件_Java POI导入word, 带图片
  3. android 暂停其他app的声音_【一万个APP】第二十二期潮汐
  4. Spring,ehcache整合报错
  5. openwrt使用linux内核版本,降低OpenWRT的Linux内核版本
  6. 关系数据库——关系数据语言
  7. Redis:14---常用功能之(Pipeline)
  8. C++(STL):29 ---关联式容器map 迭代器
  9. C++(STL):05---智能指针之unique_ptr
  10. GDB调试技术(二)