Android Q MTK平臺開關機鈴聲

google 默認開機動畫代碼在framework/base/cmds/bootanimation

MTK 開機動畫代碼在vendor/mediatek/proprietary/operator/framework/bootanimation/MtkBootanimation

一、啓用 MtkBootanimation,編譯 libmtkbootanimation

關閉 bootanimation,打開 mtkbootanimation

deleted:    frameworks/base/cmds/bootanimation/Android.bp
add 		frameworks/base/cmds/bootanimation/Android.bp_disable
deleted:    vendor/mediatek/proprietary/operator/frameworks/bootanimation/Android_disable.mk
add 		vendor/mediatek/proprietary/operator/frameworks/bootanimation/Android.mk
deleted:    vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/Android_disable.mk
add 		vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/Android.mk

配置編譯 libmtkbootanimation

device/mediatek/$(platform_name)/device.mk

+++ b/alps/device/mediatek/mt6765/device.mk
@@ -62,6 +62,8 @@ endif
 endif
 endif
 
+PRODUCT_PACKAGES += mtkbootanimation
+PRODUCT_PACKAGES += libmtkbootanimation
 
 #GPU collection
 PRODUCT_PACKAGES += libI420colorconvert

二、修改 MtkBootanimation mk 文件

vendor/mediatek/proprietary/operator/frameworks/bootanimation/Android.mk

修改 cxp_support := yes,通過打印 MSSI_MTK_CARRIEREXPRESS_PACK 不存在,

默認 cxp_support 爲 no,所以不編譯 MtkBootanimation/Android.mk

vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/Android.mk

增加 include $(BUILD_EXECUTABLE) 結尾,增加 include $(BUILD_SHARED_LIBRARY) 結尾,lib 配置中

增加
LOCAL_CFLAGS += -DMTK_TER_SERVICE
LOCAL_CPPFLAGS += -DMTK_TER_SERVICE
LOCAL_SHARED_LIBRARIES += libterservice
LOCAL_C_INCLUDES += $(MTK_PATH_SOURCE)/hardware/terservice/include/


LOCAL_INIT_RC := mtkbootanim.rc

ifdef TARGET_32_BIT_SURFACEFLINGER
LOCAL_32_BIT_ONLY := true
endif
include $(BUILD_EXECUTABLE)
# ifeq (OP01,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
#     ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
#         include $(BUILD_EXECUTABLE)
#     endif
# else ifeq (OP02,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
#     ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
#         include $(BUILD_EXECUTABLE)
#     endif
# else ifeq (OP09,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
#     ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
#         include $(BUILD_EXECUTABLE)
#     endif
# endif

# libbootanimation
# ===========================================================

include $(CLEAR_VARS)
LOCAL_MODULE := libmtkbootanimation
LOCAL_CFLAGS += ${bootanimation_CommonCFlags}

LOCAL_SRC_FILES:= \
    BootAnimation.cpp

LOCAL_CFLAGS += -DMTK_TER_SERVICE
LOCAL_CPPFLAGS += -DMTK_TER_SERVICE
.......


LOCAL_SHARED_LIBRARIES += libterservice
LOCAL_C_INCLUDES += $(MTK_PATH_SOURCE)/hardware/terservice/include/

LOCAL_C_INCLUDES += $(TOP)/$(MTK_ROOT)/frameworks-ext/native/include
LOCAL_C_INCLUDES += external/skia/include
ifdef TARGET_32_BIT_SURFACEFLINGER
LOCAL_32_BIT_ONLY := true
endif
include $(BUILD_SHARED_LIBRARY)
# ifeq (OP01,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
#     ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
#         include $(BUILD_SHARED_LIBRARY)
#     endif
# else ifeq (OP02,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
#     ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
#         include $(BUILD_SHARED_LIBRARY)
#     endif
# else ifeq (OP09,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
#     ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
#         include $(BUILD_SHARED_LIBRARY)
#     endif
# endif

三、BootAnimation.cpp 排錯

vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp

錯誤1、 use of undeclared identifier ITerService

解決 mk中導入 libterservice,cpp 中引入 #include “ITerService.h”

錯誤2、 use of undeclared identifier BootanimFileName

解決 BootAnimation.cpp 增加 char BootanimFileName[PROPERTY_VALUE_MAX]; 定義

錯誤3、 ISurfaceComposer 不存在的構造函數

解決 sp dtoken(SurfaceComposerClient::getInternalDisplayToken());

+++ b/alps/vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp
@@ -76,6 +76,9 @@
 #include <binder/Parcel.h>
 
 #define PATH_COUNT 3
+#include <binder/IServiceManager.h>
+#include "ITerService.h"
+#define REGIONAL_BOOTANIM_GET_MNC   "persist.vendor.bootanim.mnc"
 
 
 #ifdef MSSI_MTK_CARRIEREXPRESS_PACK
@@ -412,16 +415,32 @@ status_t BootAnimation::readyToRun() {
 
     mAssets.addDefaultAssets();
 
-    sp<IBinder> dtoken(SurfaceComposerClient::getBuiltInDisplay(
-            ISurfaceComposer::eDisplayIdMain));

+    sp<IBinder> dtoken(SurfaceComposerClient::getInternalDisplayToken());
+    if (dtoken == nullptr)
+        return -1;
+
     DisplayInfo dinfo;
     status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &dinfo);
     if (status)
         return -1;

@@ -538,7 +557,12 @@ bool BootAnimation::threadLoop()
     // We have no bootanimation file, so we use the stock android logo
     // animation.
     sp<MediaPlayer> mediaplayer;
+    /**
     const char* resourcePath = NULL;
+    */
+       /** MTK begin */
+    const char* resourcePath = initAudioPath();
+       /** MTK end */
     status_t mediastatus = NO_ERROR;
     if (resourcePath != NULL) {
         bPlayMP3 = true;
@@ -1510,6 +1534,8 @@ const char* BootAnimation::initAudioPath() {
 void BootAnimation::initBootanimationZip() {
     ZipFileRO* zipFile = NULL;
     String8     ZipFileName;
+    ALOGD(" MTK_TER_SERVICE: true");
+    char BootanimFileName[PROPERTY_VALUE_MAX];
 #ifdef MSSI_MTK_CARRIEREXPRESS_PACK
     char OPTR[PROPERTY_VALUE_MAX];
     // ter-service

四、其它

第一次開機沒有鈴聲

1.frameworks/av/media/libaudioclient/AudioTrack.cpp


#endif
+ if(!strcmp(mAttributes.tags,"BootAnimationAudioTrack")) {
+ ALOGD("mAttributes.tags = BootAnimationAudioTrack");
+ strcpy(input.attr.tags, "BootAnimationAudioTrack");
+ }else{
+ strcpy(input.attr.tags, "");
+ }
+ 
input.flags = mFlags;
input.frameCount = mReqFrameCount;
input.notificationFrameCount = mNotificationFramesReq;

2.frameworks/av/services/audioflinger/Threads.cpp

}
#endif
- // XXX: these things DON'T need to be done each time
+
+
+ if(!strcmp(track->mAttr.tags,"BootAnimationAudioTrack")) {
+ ALOGD("mAttributes.tags = BootAnimationAudioTrack");
+ vlf = 0.50f;
+ vrf = 0.50f;
+ vaf = 0.50f; 
+ }
+ 
+ // XXX: these things DON'T need to be done each time
mAudioMixer->setBufferProvider(name, track);
mAudioMixer->enable(name);

關機有關機動畫,重啓無關機動畫

Default設計,關機過程會有一個delayForPlayAnimation,但是重啓(除了恢復出產設置)不會,

由於重啓本身就牽涉到時間上的連續行,不會有任何delay。

修改方案:

貴司只需要在shutdownThread.java的

public static void rebootOrShutdown(boolean reboot, String reason) {

裏面將如下if判斷去掉:


if ( (reason != null) && reason.equals("recovery") ) {

                delayForPlayAnimation();

            }

只保留

delayForPlayAnimation();

只要reboot都做delay

開關機流程

1、開關機動畫的動作會生成一個native 可執行文件/system/bin/mtkbootanimation

開機情況下, adb shell 進入 /system/bin/ 直接執行 mtkbootanimation 可查看開機動畫和開機音樂

2、通過init.rc配置成Service

service bootanim /system/bin/mtkbootanimation
    class core animation
    user graphics
    group graphics audio
    disabled
    oneshot
    writepid /dev/stune/top-app/tasks

# MTK add
service banim_shutmp3 /system/bin/mtkbootanimation shut mp3
    class core animation
    user graphics
    group graphics audio
    disabled
    oneshot
    writepid /dev/stune/top-app/tasks

service banim_shutnomp3 /system/bin/mtkbootanimation shut nomp3
    class core animation
    user graphics
    group graphics audio
    disabled
    oneshot
    writepid /dev/stune/top-app/tasks

3、開機時執行

frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp

frameworks/native/services/surfaceflinger/StartPropertySetThread.cpp

SurfaceFlinger::startBootAnim -->StartPropertySetThread::threadLoop

 // Clear BootAnimation exit flag
    property_set("service.bootanim.exit", "0");
    // Start BootAnimation if not started
    property_set("ctl.start", "bootanim");

4、關機時執行

/vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkShutdownThread.java

private static void startBootAnimation() {
        Log.i(TAG, "Set 'service.bootanim.exit' = 0).");
        SystemProperties.set("service.bootanim.exit", "0");

        if (bPlayaudio) {
            SystemProperties.set("ctl.start", "banim_shutmp3");
            Log.i(TAG, "bootanim:shut mp3");
        } else {
            SystemProperties.set("ctl.start", "banim_shutnomp3");
            Log.i(TAG, "bootanim:shut nomp3");
        }
    }

5、開機動畫邏輯入口

bootanimation_main.cpp

int main(int argc, char** argv) C++語言都是從main開始執行

sp boot = new BootAnimation(new AudioAnimationCallbacks(),setBoot,sePaly,setRotated);

參考文章

https://blog.csdn.net/wangwei6227/article/details/103182681

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章