Android4.0.3修改启动动画和开机声音

Android开机铃声教程,所有Rom,不论CM还是官方,不论是2.3还是4.0,原则上都适用 虽然我个人对开机铃声并没有什么需求,但鉴于很多机油需要,而网络上有没有一篇我认为讲解足够到位的开机铃声教程,所以就抽空写下了这篇教程。 要实现开机铃声,从原理上来讲,不是很复杂,只需在 boot.img 中的 ramdisk 中的 init 脚本中加上相关初始化指令,在系统某个目录(通常是media目录)加入铃声文件即可。 但是,为了便于控制开机铃声的开关或者从根本上取消开机铃声,我下面讲的方 阅读详情

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

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

  image

  看样子还想那么回事

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

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

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

#include <media/AudioSystem.h> 
#include 
<media/mediaplayer.h>

  image

  添加方法 void bootMusic();

  image

  然后在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一下

  image

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

  image

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

//play boot music -yp 
BootAnimation 
*animation = new BootAnimation(); 
animation
->bootMusic();

  image

  修改完这写以后还需要修改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

  image

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

  image

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

  所以,在刚才添加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下,用的时候怎么用呢?

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

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

  image

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

  image

  是不是顿时又明白了?

  原来精髓所在是有个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的代码就可以了。


⭐️白嫖的阿里云认证⭐️ 【真题&参考答案】:大模型Clouder认证:利用大模型提升内容生产能力 【摘要】真题「大模型Clouder认证:利用大模型提升内容生产能力」 阅读详情

相关推荐

FFT中的精度博弈:定点数缩放、块浮点与溢出处理在Vivado IP核中的实践权衡

本文探讨了在Vivado FFT IP核中实现高精度快速傅里叶变换的关键技术,包括定点数缩放策略、块浮点模式及溢出处理机制。通过分析不同精度控制方案的资源开销与性能权衡,为工程师在医疗成像、雷达信号处理等高动态范围应用中优化FFT实现提供实践指导。

melon的博客 1096

深度学习在城市交通流量预测中的应用与实践

交通流量预测是智慧城市建设的核心技术之一,传统统计方法在处理复杂时空数据时存在局限。深度学习通过图卷积网络(GCN)和LSTM等模型,能够有效捕捉路网拓扑和时序依赖关系。这种时空融合的预测方法不仅提升了预测精度(MAE可控制在8%以内),还能通过TensorRT加速实现毫秒级实时推理。在实际工程中,结合Flink实时数据流和Triton推理服务器,可构建从数据采集到预测服务的完整管道。该技术已成功应用于城市信号灯优化,使某城市早高峰通行效率提升23%,展现了AI技术在城市治理中的巨大价值。

weixin_33694172的博客 353

【超详细】C#的单例模式

本文详细介绍了C#中的单例设计模式,包括两种实现方式:普通类泛型单例(Singleton<T>)和基于MonoBehaviour的组件单例(MonoSingleton<T>)。单例模式通过私有构造、静态私有实例和公共访问入口确保全局唯一实例,具有节省资源、保证数据一致性等优势。文章分别阐述了两者的核心原理、代码实现、使用场景及注意事项,并提供了日志管理器和音效管理器的具体应用示例。特别强调了多线程安全、初始化时机和避免过度使用等重要原则,为Unity开发中合理运用单例模式提供了全面指导。

grapefruit_lyy的博客 1533

Android 4.1.2开机音乐与动画的代码

本来在android4.0.4中使用libmedia的时候采用了如下方式: #define SYSTEM_BOOTMUSIC_FILE "/system/media/sound.ogg" int index; MediaPlayer* mp = new MediaPlayer(); if((access(SYSTEM_BOOTMUSIC_FILE

草帽的后花园 4876

13-单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git 点击加入群聊【单片机,物联网,上位机】: 说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系! 说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。 说明3:学会以后,下面的代码可能会跟你一辈子! 说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程! 拷贝这两个文件到自己的工程 ..

杨奉武的博客 1280

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 796

添加android 4.0 开机音乐

Android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来,这段代码不支持音乐播放的,添加几段代码就能达到开机显示动画的时候播放音乐的效果了。 添加如下代码: 1.添加所需要的

K_Linux_ManのBlog 6303

coze开发-5、给智能体添加“技能”

中间编排与技能组件 中间编排的定义 中间编排是指在智能体的构建过程中,使用一些工具对智能体进行协调和管理。通过这些工具,我们能够更好地实现智能体在特定业务场景中的应用。

andyyah晓波的博客 527

Android 开机动画动态替换

目前没有办法做到动态替换,以下是自己尝试的几个方向(均已失败告终,我在这方面懂的不是很多): 修改BootAnimation.cpp、BootAnimation.h、Android.mk文件,BootAnimation.cpp中包含了开机动画bootanimation.zip的路径,也就是加载的时候会去找这几个路径。我的做法是修改SYSTEM_BOOTANIMATION_FILE这个路径,比如修...

MrMorningStar的博客 3549

生成模型实战 | MuseGAN详解与实现

人工智能音乐生成领域已引起了广泛关注,MuseGAN 是其中一个重要的模型。本节我们将使用 JSB Chorales 数据集来训练 MuseGAN,该数据集包含巴赫创作的四音轨合唱曲。在生成图像时,生成器使用的是来自潜在空间的单一噪声向量来生成不同格式的内容;而在 MuseGAN 中,生成器将使用四个噪声向量来生成一段音乐,旨在增强音乐生成过程中的可控行和多样性。每个噪声向量代表音乐的不同方面,通过单独调整这些向量,模型可以生成更复杂、更细腻的音乐作品。

盼小辉丶的博客 6523

我的宠物狗学编程:从零开始的代码之旅

在这个示例中,我们定义了一个名为"interact"的函数,它通过输入函数获取用户的输入,并根据输入执行相应的代码块。在编程中,我们使用条件语句来根据不同的条件执行不同的代码块。对于我的狗狗,我将创建一个名为"feed"的函数来表示它的进食行为,并根据不同的条件输出不同的信息。在这个示例中,我们定义了一个名为"feed"的函数,并使用一个参数"food"来表示食物。对于我的狗狗,我将创建一个名为"dog_name"的变量来存储它的名字。对于我的狗狗,我将创建一个名为"bark"的函数来表示它的叫声。

2301_79331387的博客 333

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

本文转载自:http://www.cnblogs.com/jqyp/archive/2012/03/07/2383973.html   并在此基础上添加一些更正 1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片); 2. Android平台启动初始化,出现"A N D R I O D"文字字样画面; 3. Androi

5982

Python爬虫博客:如何抓取时事新闻信息 —— 从各大新闻网站获取实时新闻数据

发送请求:向目标新闻网站发送 HTTP 请求,获取网页内容。解析网页:使用解析库(如)从网页中提取新闻标题、摘要、内容、发布时间等。绕过反爬虫机制:使用代理、设置请求头、模拟浏览器行为等策略绕过反爬虫技术。数据存储与清洗:将抓取的数据保存到本地文件或数据库中,并进行清洗,确保数据的可用性。在抓取过程中,我们还会面对很多实际问题,比如反爬虫技术、分页抓取、动态加载的内容等。接下来,我们将逐步介绍如何使用不同技术抓取静态和动态网页,并对抓取的内容进行处理。Scrapy。

2201_76125261的博客 2131

Android4.0.3修改启动动画和开机声音[转载]

1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片);   2. Android平台启动初始化,出现"A N D R I O D"文字字样画面; 3. Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。   现在我们说的是第三种方式(基于模拟器):   android开机动画叫源码位于

menghandsl的专栏 1012

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: android framework Service分析
下一篇: 国外程序员推荐:每个程序员都应读的书
andy_android
博客等级 码龄15年 278粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值