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 imageifeq ($(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 imageBUILDING_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-productsifeq ($(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)/wlanparamTARGET_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: vbmetaimagevbmetaimage: $(INSTALLED_VBMETAIMAGE_TARGET)+.PHONY: animimage
+animimage: $(INSTALLED_ANIMIMAGE_TARGET)
+.PHONY: auxiliaryauxiliary: $(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.imgPhaseCheck=1@EraseMetadata=1@VBMETA_VENDOR=1@vbmeta_vendor.img
+ANIM=1@anim.imgDTBO=1@dtbo.imgVBMETA=1@vbmeta-sign.imgPersist=1@persist.img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp5使用模型删除与复杂查询EXP

模型删除 应用软删除 表中需要有字段&#xff0c;deletetime 模型中使用下面方法 use SoftDelete;protected $deleteTime delete_time;真实删除 // 软删除 User::destroy(1); // 真实删除 User::destroy(1,true); $user User::get(1); // 软删除 $user->delete(); // 真…

js 实现将后端请求来的 Blob 数据保存到用户选择的任意目录

js实现将后端请求来的 Blob 数据保存到用户选择的任意目录 实现方式 实现方式 实现方式是使用 window 的 showSaveFilePicker 方法。Window 接口的 showSaveFilePicker() 方法用于显示一个文件选择器&#xff0c;以允许用户保存一个文件。可以选择一个已有文件覆盖保存&#xf…

基于Java+Swing贪吃蛇小游戏(含课程报告)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

AI学习指南机器学习篇-KNN算法模型评估

AI学习指南机器学习篇-KNN算法模型评估 在机器学习领域&#xff0c;K最近邻&#xff08;KNN&#xff09;算法是一种常用的监督学习算法&#xff0c;它可以用来解决分类和回归问题。在实际应用中&#xff0c;评估模型的性能是至关重要的一步。本文将讨论KNN算法的模型评估指标&…

兼容MacOS和FreeBSD软件包的开源ravynOS操作系统

ravynOS 是一个新型的操作系统项目&#xff0c;致力于在 x86-64&#xff08;终极目标是同时实现 ARM&#xff09;平台上提供与 macOS 类似的体验和兼容性。它基于坚若磐石的 FreeBSD、现有的开源代码和锦上添花的新代码构建。 主要设计目标&#xff1a; 与 macOS 应用程序的源…

语音质量评价方法之MOS

引言 在语音增强、语音合成、语音转换、声音转换、语音克隆、语音修复等等领域&#xff0c;常常要对输出的语音进行评价。对语音的质量评价一般关注两个方面&#xff0c;即主观评价和客观评价。主观评价就是人凭借听觉感受对语音进行打分&#xff0c;客观评价比较广泛&#xf…

学生成绩评分 - Scala

文章目录 一、第1关&#xff1a;对学生成绩进行评分 一、第1关&#xff1a;对学生成绩进行评分 实训目标 掌握 Scala 中运算符嵌套的使用 了解 if-else if-else 语句的使用 实训分析 利用条件运算符的嵌套来完成此题&#xff1a;学习成绩 150 - 90 分的同学成绩评分为&#…

【JVM结构、JVM参数、JVM垃圾回收】

JVM&#xff1a;Java Virtual Machine java虚拟机 虚拟机&#xff1a;使用软件技术模拟出与具有完整硬件系统功能、运行在一个隔离环境中的计算机系统。 JVM官方文档&#xff1a;https://docs.oracle.com/javase/specs/jvms/se8/html/index.html java 一些命令 javac 将文件编…

常用算法及参考算法 (1)累加 (2)累乘 (3)素数 (4)最大公约数 (5)最值问题 (6)迭代法

常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 1. 累加 #include <stdio.h>int main() {…

上海亚商投顾:沪指缩量调整 PCB概念股持续爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 大小指数昨日走势分化&#xff0c;沪指全天震荡调整&#xff0c;创业板指午后涨超1%。消费电子板块全天强势&a…

GenAI安全成关注焦点!专业Bot管理厂商瑞数信息获Gartner投资推荐

近日&#xff0c;全球权威IT与顾问咨询公司Gartner发布报告Invest Implications: Generative AI Adoption: Top Security Threats, Risks and Mitigations&#xff08;《投资影响&#xff1a;采用生成式AI&#xff1a;顶级安全威胁、风险和缓解措施》&#xff09;&#xff0c;该…

【ARM】MDK Debug模式下Disassembly窗口介绍

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 主要了解Disassembly窗口中包含的内容&#xff0c;和如何利用Disassembly中的内容了解程序的存储和调用情况。 2、 问题场景 对于Disassembly窗口中具体包含的内容不了解&#xff0c;无法合理地应用Disassembly窗口…

Docker的基本操作 及 容器与外部机互相通讯(持续更新中)

Docker入门&#xff1a; Docker 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)docker入门&#xff0c;这一篇就够了。-CSDN博客Docker 容器使用 | 菜鸟教程 (runoob.com)Docker自定义网络和运行时指定IP_docker run ip-CSDN博客 基本命令 链接&#xff1a;docker入门&#…

希尔排序-C语言版本

前言 从希尔开始&#xff0c;排序的速度就开始上升了&#xff0c;这里的排序开始上一个难度了&#xff0c;当然难一点的排序其实也不是很难&#xff0c;当你对于插入排序了解的足够深入的时候&#xff0c;你会发现其实希尔就是插入的异形&#xff0c;但是本质上还是一样的 希尔…

openresty(Nginx) 301重定向域名 http访问强制使用https

1 访问http 2 修改配置访问 server {listen 80;server_name example.cn;return 301 https://$server_name$request_uri;access_log /data/logs/czgzzfjgsup_access.log access;error_log /data/logs/czgzzfjg_error.log error;#location / {root /usr/local/open…

Mac 开发vscode常用命令

1 打开vscode settting配置 commandshiftp 输入&#xff1a;Open User Setting 2

CV预测:快速使用DenseNet神经网络

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

面试经验分享 | 24年6月某安全厂商HW面试经验

所面试的公司&#xff1a;某安全厂商 所在城市&#xff1a;安徽省 面试职位&#xff1a;蓝初 面试过程&#xff1a; 腾讯会议&#xff08;语音&#xff09; 面试过程&#xff1a;整体流程就是自我介绍加上一些问题问题balabalabala。。。由于面的是蓝队所以渗透部分不会太多…

小规模自建 Elasticsearch 的部署及优化

本文将详细介绍如何在 CentOS 7 操作系统上部署并优化 Elasticsearch 5.3.0,以承载千万级后端服务的数据采集。要使用Elasticsearch至少需要三台独立的服务器,本文所用服务器配置为4核8G的ECS云服务器,其中一台作为 master + data 节点、一台作为 client + data 节点、最后一…

QT——MySQL数据库联用

一、ODBC 1、ODBC简介 ODBC全称为Open Database Connectivity,是一种用于数据库操作的标准接口。要使用ODBC,首先需要安装相应的ODBC驱动程序,然后在系统中配置ODBC数据源。接着,可以通过编程语言(如C++、Java等)或者数据库工具(如SQL Server Management Studio)来连…