Android10 动态修改开机动画(一)新增分区

需要:

同一个固件不同的客户可能需要不同的开机动画,开机动画是绑定在了系统的img文件中,每个客户维护一个系统版本,会大大增加了系统维护工作量。所以需要一个动态更换开机logo的功能。

分析:

新增一个分区,将新增的分区挂载到mnt目录下。设置分区权限,允许system_server可读可写,允许bootanimation可读。

申请flash:

新增分区anim,将分区anim挂载到mnt目录下

在build/make/core/Makefile中添加

diff --git a/build/make/core/Makefile b/build/make/core/Makefile
index ea1f091..e683b4b 100755
--- a/build/make/core/Makefile
+++ b/build/make/core/Makefile
@@ -1389,6 +1389,14 @@ $(if $(filter $(2),prodnv),\
     $(if $(BOARD_WLANPARAMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "wlanparam_fs_type=$(BOARD_WLANPARAMIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
     $(if $(BOARD_WLANPARAMIMAGE_PARTITION_SIZE),$(hide) echo "wlanparam_size=$(BOARD_WLANPARAMIMAGE_PARTITION_SIZE)" >> $(1))
 )
+$(if $(filter $(2),anim),\
+    $(if $(BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "anim_fs_type=$(BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
+    $(if $(BOARD_ANIMIMAGE_PARTITION_SIZE),$(hide) echo "anim_size=$(BOARD_ANIMIMAGE_PARTITION_SIZE)" >> $(1))
+)
 $(if $(filter $(2),vendor),\
     $(if $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "vendor_fs_type=$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
     $(if $(BOARD_VENDORIMAGE_EXTFS_INODE_COUNT),$(hide) echo "vendor_extfs_inode_count=$(BOARD_VENDORIMAGE_EXTFS_INODE_COUNT)" >> $(1))
@@ -1528,7 +1536,7 @@ endef
 # $(1): the path of the output dictionary file
 # $(2): additional "key=value" pairs to append to the dictionary file.
 define generate-userimage-prop-dictionary
-$(call generate-image-prop-dictionary,$(1),system vendor cache prodnv userdata product product_services oem odm socko odmko,$(2))
+$(call generate-image-prop-dictionary,$(1),system vendor cache prodnv anim userdata product product_services oem odm socko odmko,$(2))
 endef
 
 # $(1): the path of the input dictionary file, where each line has the format key=value
@@ -3158,6 +3166,76 @@ define images-for-partitions
 $(strip $(foreach item,$(1),$(INSTALLED_$(call to-upper,$(item))IMAGE_TARGET)))
 endef
 
+#------------------------------------------------------------------
+#custom anim partition image
+ifdef BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE
+INTERNAL_ANIMIMAGE_FILES := \
+    $(filter $(TARGET_OUT_ANIM)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
+
+animimage_intermediates := \
+    $(call intermediates-dir-for,PACKAGING,anim)
+BUILT_ANIMIMAGE_TARGET := $(PRODUCT_OUT)/anim.img
+
+define build-animimage-target
+  $(call pretty,"Target anim fs image : $(INSTALLED_ANIMIMAGE_TARGET)")
+  @mkdir -p $(TARGET_OUT_ANIM)
+  @mkdir -p $(animimage_intermediates) && rm -rf $(animimage_intermediates)/anim_image_info.txt
+  $(call generate-userimage-prop-dictionary, $(animimage_intermediates)/anim_image_info.txt)
+  $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
+      build/tools/releasetools/build_image.py \
+      $(TARGET_OUT_ANIM) $(animimage_intermediates)/anim_image_info.txt $(INSTALLED_ANIMIMAGE_TARGET) $(TARGET_OUT)
+  $(hide) $(call assert-max-image-size,$(INSTALLED_ANIMIMAGE_TARGET),$(BOARD_ANIMIMAGE_PARTITION_SIZE))
+endef
+
+INSTALLED_ANIMIMAGE_TARGET := $(BUILT_ANIMIMAGE_TARGET)
+
+$(INSTALLED_ANIMIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_ANIMIMAGE_FILES)
+    $(build-animimage-target)
+
+.PHONY: animimage-nodeps nnod
+animimage-nodeps nnod : | $(INTERNAL_USERIMAGES_DEPS)
+    $(build-animimage-target)
+
+else ifdef BOARD_PREBUILT_ANIMIMAGE
+INSTALLED_ANIMIMAGE_TARGET := $(PRODUCT_OUT)/anim.img
+$(eval $(call copy-one-file,$(BOARD_PREBUILT_ANIMIMAGE),$(INSTALLED_ANIMIMAGE_TARGET)))
+endif
+
 # -----------------------------------------------------------------
 # vbmeta image
 ifeq ($(BOARD_AVB_ENABLE),true)
@@ -3924,6 +4002,8 @@ $(BUILT_TARGET_FILES_PACKAGE): \
             $(INSTALLED_PRODNVIMAGE_TARGET) \
             $(INSTALLED_WLANPARAMIMAGE_TARGET) \
         $(INSTALLED_VENDORIMAGE_TARGET) \
+        $(INSTALLED_ANIMIMAGE_TARGET) \
         $(INSTALLED_PRODUCTIMAGE_TARGET) \
             $(INSTALLED_SOCKOIMAGE_TARGET) \
             $(INSTALLED_ODMKOIMAGE_TARGET) \

在build/make/core/board_config.mk中添加

diff --git a/build/make/core/board_config.mk b/build/make/core/board_config.mk
old mode 100644
new mode 100755
index 7987700..986638b
--- a/build/make/core/board_config.mk
+++ b/build/make/core/board_config.mk
@@ -314,6 +314,34 @@ else ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),false)
 endif
 .KATI_READONLY := BUILDING_RAMDISK_IMAGE
 
+#Custom Are we building a ANIM image
+BUILDING_ANIM_IMAGE :=
+ifeq ($(PRODUCT_BUILD_ANIM_IMAGE),)
+  ifdef BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE
+    BUILDING_ANIM_IMAGE := true
+  endif
+else ifeq ($(PRODUCT_BUILD_ANIM_IMAGE),true)
+  BUILDING_ANIM_IMAGE := true
+  ifndef BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE
+    $(error PRODUCT_BUILD_ANIM_IMAGE set to true, but BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE not defined)
+  endif
+endif
+.KATI_READONLY := BUILDING_ANIM_IMAGE
+
 # Are we building a userdata image
 BUILDING_USERDATA_IMAGE :=
 ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),)

在build/make/core/config.mk中添加

diff --git a/build/make/core/config.mk b/build/make/core/config.mk
index 16db858..991d956 100755
--- a/build/make/core/config.mk
+++ b/build/make/core/config.mk
@@ -1176,6 +1176,8 @@ dont_bother_goals := out \
     bootimage_debug-nodeps \
     recoveryimage-nodeps \
     vbmetaimage-nodeps \
+    animimage-nodeps \
     product-graph dump-products
 
 ifeq ($(CALLED_FROM_SETUP),true)

在build/make/core/envsetup.mk中添加

diff --git a/build/make/core/envsetup.mk b/build/make/core/envsetup.mk
index f704c49..e1f5c44 100755
--- a/build/make/core/envsetup.mk
+++ b/build/make/core/envsetup.mk
@@ -610,6 +610,13 @@ TARGET_OUT_WLANPARAM := $(PRODUCT_OUT)/wlanparam
 
 TARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)
 .KATI_READONLY := TARGET_OUT_VENDOR
+
+TARGET_OUT_ANIM := $(PRODUCT_OUT)/anim
+.KATI_READONLY := TARGET_OUT_ANIM
+
 ifneq ($(filter address,$(SANITIZE_TARGET)),)
 target_out_vendor_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
 ifeq ($(SANITIZE_LITE),true)

在build/make/core/main.mk中添加

diff --git a/build/make/core/main.mk b/build/make/core/main.mk
index 0e99125..e7fd6cc 100755
--- a/build/make/core/main.mk
+++ b/build/make/core/main.mk
@@ -1617,6 +1617,12 @@ bootimage_debug: $(INSTALLED_DEBUG_BOOTIMAGE_TARGET)
 .PHONY: vbmetaimage
 vbmetaimage: $(INSTALLED_VBMETAIMAGE_TARGET)
 
+.PHONY: animimage
+animimage: $(INSTALLED_ANIMIMAGE_TARGET)
+
 .PHONY: auxiliary
 auxiliary: $(INSTALLED_AUX_TARGETS)
 
@@ -1636,6 +1642,8 @@ droidcore: $(filter $(HOST_OUT_ROOT)/%,$(modules_to_install)) \
     $(INSTALLED_DEBUG_BOOTIMAGE_TARGET) \
     $(INSTALLED_RECOVERYIMAGE_TARGET) \
     $(INSTALLED_VBMETAIMAGE_TARGET) \
+    $(INSTALLED_ANIMIMAGE_TARGET) \
     $(INSTALLED_USERDATAIMAGE_TARGET) \
     $(INSTALLED_CACHEIMAGE_TARGET) \
     $(INSTALLED_PRODNVIMAGE_TARGET) \

在build/make/core/product.mk中添加

diff --git a/build/make/core/product.mk b/build/make/core/product.mk
old mode 100644
new mode 100755
index 8414da2..9a53874
--- a/build/make/core/product.mk
+++ b/build/make/core/product.mk
@@ -339,6 +339,8 @@ _product_var_list += PRODUCT_BUILD_ODM_IMAGE
 _product_var_list += PRODUCT_BUILD_CACHE_IMAGE
 _product_var_list += PRODUCT_BUILD_PRODNV_IMAGE
 _product_var_list += PRODUCT_BUILD_RAMDISK_IMAGE
+_product_var_list += PRODUCT_BUILD_ANIM_IMAGE
 _product_var_list += PRODUCT_BUILD_USERDATA_IMAGE
 _product_var_list += PRODUCT_UPDATABLE_BOOT_MODULES
 _product_var_list += PRODUCT_UPDATABLE_BOOT_LOCATIONS

在build/make/tools/releasetools/build_image.py中添加

diff --git a/build/make/tools/releasetools/build_image.py b/build/make/tools/releasetools/build_image.py
index 5ae37d0..0cb7e53 100755
--- a/build/make/tools/releasetools/build_image.py
+++ b/build/make/tools/releasetools/build_image.py
@@ -603,6 +605,12 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
   elif mount_point == "wlanparam":
     copy_prop("wlanparam_fs_type", "fs_type")
     copy_prop("wlanparam_size", "partition_size")
+  elif mount_point == "anim":
+    copy_prop("anim_fs_type", "fs_type")
+    copy_prop("anim_size", "partition_size")
   elif mount_point == "vendor":
     copy_prop("avb_vendor_hashtree_enable", "avb_hashtree_enable")
     copy_prop("avb_vendor_add_hashtree_footer_args",
@@ -815,6 +823,10 @@ def main(argv):
       mount_point = "wlanparam"
     elif image_filename == "vendor.img":
       mount_point = "vendor"
+    elif image_filename == "anim.img":
+      mount_point = "anim"
     elif image_filename == "odm.img":
       mount_point = "odm"
     elif image_filename == "oem.img":

在device/xxx/xxx/BoardConfig.mk中添加

BOARD_ANIMIMAGE_PARTITION_SIZE := 52428800
BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_ANIMIMAGES_SPARSE_EXT_DISABLED := true

在device/xxx/xxx/rootdir/root/fstab.xxx中添加

/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/anim         /mnt/anim       ext4 noatime,nosuid,nodev,nomblk_io_submit,noauto_da_alloc wait,check

在device/xxx/xxx/rootdir/root/fstab.xxx.f2fs中添加

/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/anim        /mnt/anim      ext4 noatime,nosuid,nodev,nomblk_io_submit,noauto_da_alloc wait,check

在device目录下的平台xml文件中添加

<Partitions>
    ......
+   <Partition id="anim" size="50"/>
	<Partition id="userdata" size="0xFFFFFFFF"/>
</Partitions>
......
</ProductList>
    <SchemeList>
        ......
+            <File>
+                <ID>anim</ID>
+                <IDAlias>ANIM</IDAlias>
+                <Type>CODE2</Type>
+                <Block id="anim">
+                    <Base>0x0</Base>
+                    <Size>0x0</Size>
+                </Block>
+                <Flag>1</Flag>
+                <CheckFlag>2</CheckFlag>
+                <Description>anim image file</Description>
+            </File>

在device目录下的平台xml文件中添加(可通过grep -rn BOARD_*_SYSTEM_TYPE device方式找到文件)

+#anim.img
+BOARD_ANIMIMAGE_FILE_SYSTEM_TYPE := ext4
+

在system/vold/VolumeManager.cpp中添加

diff --git a/system/vold/VolumeManager.cpp b/system/vold/VolumeManager.cpp
index b411dea..aad339f 100755
--- a/system/vold/VolumeManager.cpp
+++ b/system/vold/VolumeManager.cpp
@@ -689,7 +689,7 @@ int VolumeManager::unmountAll() {
 #ifdef __ANDROID_DEBUGGABLE__
              !StartsWith(test, "/mnt/scratch") &&
 #endif
-             !StartsWith(test, "/mnt/vendor") && !StartsWith(test, "/mnt/product")&& !StartsWith(test, "/mnt/wlanparam")) ||
+             !StartsWith(test, "/mnt/vendor") && !StartsWith(test, "/mnt/product")&& !StartsWith(test, "/mnt/wlanparam") && !StartsWith(test, "/mnt/anim")) ||
             StartsWith(test, "/storage/")) {
             toUnmount.push_front(test);
         }

在vendor/sprd/release/IDH/ImageFiles/flash.cfg中添加

diff --git a/vendor/sprd/release/IDH/ImageFiles/flash.cfg b/vendor/sprd/release/IDH/ImageFiles/flash.cfg
index 972e76b..1e62c90 100755
--- a/vendor/sprd/release/IDH/ImageFiles/flash.cfg
+++ b/vendor/sprd/release/IDH/ImageFiles/flash.cfg
@@ -34,6 +34,8 @@ BOOT=1@boot.img
 PhaseCheck=1@
 EraseMetadata=1@
 VBMETA_VENDOR=1@vbmeta_vendor.img
+ANIM=1@anim.img
 DTBO=1@dtbo.img
 VBMETA=1@vbmeta-sign.img
 Persist=1@persist.img

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值