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

首先看一下定义的常量:

1

2

3

4

#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判断语句

1

2

3

4

5

6

7

8

9

10

11

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()

1

2

3

4

5

if (mAndroidAnimation) {

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

 }else {

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

 }

1

 

==> 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添加方法的声明和头文件的引用

1

2

#include <media/AudioSystem.h>

#include <media/mediaplayer.h>

添加方法 void bootMusic();

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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这个文件,因为方法也申明了,也实现了,就是还没有调用,所以调用就在这里调

1

2

3

//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

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

也许有人会问,那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可以使用,这个和上层开发中是一样的,这个文件夹中的东西是不编译的。

1

2

3

4

5

6

7

8

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的代码就可以了。

android修改开机动画和铃声相关推荐

  1. android修改开机动画为图片,安卓修改开机动画图文教程

    1.手机必须已获取ROOT权限; 2.装个可以进去系统文件的文件浏览器,如:RE管理器(复制覆盖系统文件时,记得修改 "只读"为"读写"权限); 3.在你看中的 ...

  2. 修改android系统开机动画

    本文转载自:http://blog.csdn.net/u012301841/article/details/51598115 修改android系统开机动画 转载于:https://www.cnblo ...

  3. android默认开机动画,修改安卓开机动画(除了部分系统 如MIUI等)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这技术已经很久了,但还是忍不住搬运了一下. 出处是百度的,很久很久以前玩手机在百度上学的 我这里说的开机动画是指开机的第二屏 开机动画可以在下载的rom里 ...

  4. android更换开机动画,修改安卓开机动画(除了部分系统 如MIUI等)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这技术已经很久了,但还是忍不住搬运了一下. 出处是百度的,很久很久以前玩手机在百度上学的 我这里说的开机动画是指开机的第二屏 开机动画可以在下载的rom里 ...

  5. rk3568 修改开机动画

    rk3568 修改开机动画 bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间. 文章目录 rk3568 ...

  6. 迅为RK3568开发板Android11修改开机动画

    Android 开机 logo 是可以动态显示或者静态显示的.如果是静态显示,循环播放一章图片,直到系统启动.如果是动态显示,那么开机 logo 由多张图片组成,并且按照规定的帧率来播放.可以播放一轮 ...

  7. Ubuntu16.04LTS修改开机动画

    ubuntu16.04LTS修改开机动画 ubuntu自带的开机动画实在是很不满美观,但是又不想重写,怎么办? 接下来交你们一招. 1.开机动画文件夹 Ubuntu14.04的开机动画在/usr/sh ...

  8. MTK平台修改开机动画,开机logo

    修改开机logo 找到目录 trunk/mediatek/custom/common/lk/logo/ 该目录下面有很多的文件夹,都是在不同分辨率下面的logo 要修改的话就看需要修改哪个分辨律下面的 ...

  9. Win7修改开机动画(附自制流浪地球2开机动画)

    最近看了流浪地球2,看到B站视频改流浪2的开机动画,心血来潮,但电脑是Win7系统,于是搜索了一些方法记录一下.试过别的方法后我真正能用的方法即本文方法,局限于只能修改Win7开机动画时田字区域的动画 ...

  10. MT6765 + Android9.0修改开机动画

    工作中经常因客户不同需要修改开机动画.开机第一帧.不同平台修改方式也不同,为此整理此文档希望能帮助大家. 下面是3大厂商修改开机动画后对GMS.OTA升级影响列表: 可以知道MTK.高通平台如果只修改 ...

最新文章

  1. HTML 框架 frameset,frame
  2. 优化JS加载时间过长的一种思路
  3. Win2008 R2 IIS7 PHP 5.4 环境搭建图文教程
  4. 用Windows Server实现软件定义存储之存储空间直连
  5. async 与 await 的用法详解
  6. CSDN开设博客专栏的方法
  7. Oracle数据库链路
  8. 【python】Python的基本数据类型之数字类型与字符串类型
  9. PgSQL · 应用案例 · 惊天性能!单RDS PostgreSQL实例支撑 2000亿
  10. phpcms环境检测MySQL_WNMP nginx+php5+mysql测试环境安装(Windows7)(一)
  11. 将光标从下划线变成竖线的方法
  12. 云计算机手机apple,云电脑IOS版怎么在苹果IOS手机上使用教程
  13. 计算机c盘无法扩展,C盘不够大怎么办 怎么扩展C盘容量合并硬盘分区
  14. 初学C语言一些知识点的整理
  15. J2ME资源:各厂商SDK和模拟器下载地址
  16. 设计模式GOF23之-------------------结构型模式(适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式)
  17. 打印杨辉三角 - C语言实现
  18. 1688官网以图搜图爬虫案例
  19. 2017-2018年QS世界大学计算机科学及信息系统专业排名
  20. 怎么写安卓手机脚本_利用xposed虚拟真实手机环境,建立引流脚本矩阵

热门文章

  1. 软件观念革命:交互设计精髓_专业科班答案:一个标准的交互设计流程是怎样的?...
  2. 三星香港 android8.0,三星A8 Star官方港版安卓8.0固件刷机包:TGY-G8850ZHS3ASD1
  3. 电影推荐系统kaggle
  4. 9个免费可商用的字体推荐
  5. Axure 8.1.0.3382 激活码(转)
  6. 使用JsonArray.fromObject()需要注意的事项
  7. matlab函数紫色代码,MATLAB 语法高亮颜色设置 - MATLAB - MathWorks 中国
  8. IDEA如何设置背景色?
  9. 西南科技大学OJ题 进制转换问题0961
  10. 利用Proteus 8.9运行stm32最简单的跑马灯程序