日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android修改开机动画和铃声

發布時間:2023/12/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android修改开机动画和铃声 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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修改开机动画和铃声的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。