Android 11 添加系统属性

在初识Android 属性一文中提到,系统会默认加载以下文件

/system/etc/prop.default
/system/build.prop
/system_ext/build.prop
/vendor/default.prop
/vendor/build.prop
/odm/etc/build.prop
/product/build.prop
/factory/factory.prop

要弄清楚我们应该在哪里添加系统属性,就要知道这些文件是怎么生成的。以/system/build.prop文件为例,来分析下其生成过程
属性文件的生成逻辑集中在build\make\core\Makefile文件中

# -----------------------------------------------------------------
# build.prop
INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BUILD_PROP_TARGET)
FINAL_BUILD_PROPERTIES := \$(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))   //1
FINAL_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \$(FINAL_BUILD_PROPERTIES),=)
//省略
ifdef TARGET_SYSTEM_PROP //2
system_prop_file := $(TARGET_SYSTEM_PROP)
else
system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
endif
$(intermediate_system_build_prop): $(BUILDINFO_SH) $(BUILDINFO_COMMON_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(API_FINGERPRINT) $(POST_PROCESS_PROPS) //3@echo Target buildinfo: $@@mkdir -p $(dir $@)$(hide) echo > $@$(hide) PRODUCT_BRAND="$(PRODUCT_SYSTEM_BRAND)" \PRODUCT_MANUFACTURER="$(PRODUCT_SYSTEM_MANUFACTURER)" \PRODUCT_MODEL="$(PRODUCT_SYSTEM_MODEL)" \PRODUCT_NAME="$(PRODUCT_SYSTEM_NAME)" \PRODUCT_DEVICE="$(PRODUCT_SYSTEM_DEVICE)" \$(call generate-common-build-props-with-product-vars-set,system,$@)  //4$(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \TARGET_BUILD_FLAVOR="$(TARGET_BUILD_FLAVOR)" \TARGET_DEVICE="$(TARGET_DEVICE)" \PRODUCT_DEFAULT_LOCALE="$(call get-default-product-locale,$(PRODUCT_LOCALES))" \PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \BUILD_ID="$(BUILD_ID)" \BUILD_DISPLAY_VERSION="$(BUILD_DISPLAY_VERSION)" \BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \DATE="$(DATE_FROM_FILE)" \BUILD_USERNAME="$(BUILD_USERNAME)" \BUILD_HOSTNAME="$(BUILD_HOSTNAME)" \BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \BOARD_BUILD_SYSTEM_ROOT_IMAGE="$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)" \PLATFORM_VERSION="$(PLATFORM_VERSION)" \PLATFORM_VERSION_LAST_STABLE="$(PLATFORM_VERSION_LAST_STABLE)" \PLATFORM_SECURITY_PATCH="$(PLATFORM_SECURITY_PATCH)" \PLATFORM_BASE_OS="$(PLATFORM_BASE_OS)" \PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \PLATFORM_PREVIEW_SDK_VERSION="$(PLATFORM_PREVIEW_SDK_VERSION)" \PLATFORM_PREVIEW_SDK_FINGERPRINT="$$(cat $(API_FINGERPRINT))" \PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION="$(PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION)" \BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \$(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT_FROM_FILE)") \TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \TARGET_CPU_ABI_LIST_32_BIT="$(TARGET_CPU_ABI_LIST_32_BIT)" \TARGET_CPU_ABI_LIST_64_BIT="$(TARGET_CPU_ABI_LIST_64_BIT)" \TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \bash $(BUILDINFO_SH) >> $@  //5$(hide) $(foreach file,$(system_prop_file), \//6if [ -f "$(file)" ]; then \  echo Target buildinfo from: "$(file)"; \echo "" >> $@; \echo "#" >> $@; \echo "# from $(file)" >> $@; \echo "#" >> $@; \cat $(file) >> $@; \echo "# end of $(file)" >> $@; \fi;)$(if $(FINAL_BUILD_PROPERTIES), \ //7$(hide) echo >> $@; \echo "#" >> $@; \echo "# ADDITIONAL_BUILD_PROPERTIES" >> $@; \echo "#" >> $@; )$(hide) $(foreach line,$(FINAL_BUILD_PROPERTIES), \echo "$(line)" >> $@;)$(hide) $(POST_PROCESS_PROPS) $@ $(PRODUCT_SYSTEM_PROPERTY_BLACKLIST) //8build_desc :=INSTALLED_RECOVERYIMAGE_TARGET :=
ifdef BUILDING_RECOVERY_IMAGE
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img
endif
endif$(INSTALLED_BUILD_PROP_TARGET): $(intermediate_system_build_prop)@echo "Target build info: $@"$(hide) grep -v 'ro.product.first_api_level' $(intermediate_system_build_prop) > $@ //9

注释1处,将ADDITIONAL_BUILD_PROPERTIES定义的属性赋给FINAL_BUILD_PROPERTIES变量。注释2处,给system_prop_file 变量赋值,如果定义过TARGET_SYSTEM_PROP ,则system_prop_file 的值为TARGET_SYSTEM_PROP 定义的值,否则其值为TARGET_DEVICE_DIR)/system.prop。注释3处创建中间文件,用于生成最终的system.prop文件。注释4处将build/make/tools/buildinfo_common.sh文件中定义的属性写入中间文件 。注释5处,将build/make/tools/buildinfo.sh中定义的属性写入中间文件。注释6处,将前面定义的system_prop_file 中的属性写入中间文件。注释7处,将前面定义的FINAL_BUILD_PROPERTIES定义的属性写入中间文件。注释8处,删除PRODUCT_SYSTEM_PROPERTY_BLACKLIST定义的属性。注释9处,将中间文件写入到system.prop并剔除ro.product.first_api_level属性。

由上可以看出,system/build.prop 文件的属性内容来源于:

  • build/make/tools/buildinfo_common.sh文件 (传入的参数是system)
  • build/make/tools/buildinfo.sh文件
  • system_prop_file:默认路径是TARGET_DEVICE_DIR)/system.prop,也可以自定义文件路径(定义TARGET_SYSTEM_PROP)
  • FINAL_BUILD_PROPERTIES:来自ADDITIONAL_BUILD_PROPERTIES

按同样的方法分析

vendor/build.prop文件的属性内容来源于:

  • vendor_prop_files:默认路径是TARGET_DEVICE_DIR)/vendor.prop,也可以自定义文件路径(定义TARGET_VENDOR_PROP)
  • PRODUCT_PROPERTY_OVERRIDES
  • build/make/tools/buildinfo_common.sh文件 (传入的参数是vendor)

product/build.prop文件的属性内容来源于:

  • product_prop_files:默认路径是TARGET_DEVICE_DIR)/product.prop,也可以自定义文件路径(定义TARGET_PRODUCT_PROP)
  • PRODUCT_PRODUCT_PROPERTIES
  • ADDITIONAL_PRODUCT_PROPERTIES
  • build/make/tools/buildinfo_common.sh文件 (传入的参数是product)
  • 如果定义了PRODUCT_OEM_PROPERTIES,则将其prop文件导入进来

odm/etc/build.prop文件的属性内容来源于:

  • odm_prop_files:默认路径是TARGET_DEVICE_DIR)/odm.prop,也可以自定义文件路径(定义TARGET_ODM_PROP)
  • PRODUCT_ODM_PROPERTIES
  • build/make/tools/buildinfo_common.sh文件 (传入的参数是odm)

知道了各个属性文件的的内容来自哪里,添加自定义的系统属性就比较简单了。比如如果我们想将自定义的属性写入到system/build.prop文件中,则可以有以下两种方法

1,新建属性文件xxx.prop并定义TARGET_SYSTEM_PROP,把属性写到xxx.prop里面

TARGET_SYSTEM_PROP += device/xxx/xxx/xxx.prop

2,在mk中定义ADDITIONAL_BUILD_PROPERTIES

ADDITIONAL_BUILD_PROPERTIES += my.test=a

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

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

相关文章

学浪app中的视频怎么缓存

现在越来越多人在学浪app里面购买课程,有的课程有时间限制,想要下载下来,如果你还不知道下载的方法,可以看看我这篇文章,专门讲解如何缓存学浪app里面的课程 讲技术方法很多人可能听不懂,所以我就将技术融…

【项目实战】【Docker】【Git】【Linux】部署V2rayA项目

今天着手了一个全新领域的项目,从完全没有头绪到成功运行,记录一下具体的部署流程 github项目链接V2rayA 一开始拿到以后完全没有抓手,去阅读了一下他的帮助文档 写着能用docker运行,就去下载了一个Docker配置了一下 拉取代码到…

如何构建和安装 Go 程序

简介 到目前为止,在我们的《如何使用 Go 编程》系列中,您已经使用 go run 命令自动编译您的源代码并运行生成的可执行文件。虽然这个命令对于在命令行上测试代码很有用,但是要分发或部署应用程序,您需要将代码构建成一个可共享的…

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式(Visitor Pattern)1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派(多态&am…

4.网络编程-websocket(golang)

目录 什么是websocket golang中使用websocket Server端 Client端 什么是websocket WebSocket是一种在互联网上提供全双工通信的协议,即允许服务器和客户端之间进行双向实时通信的网络技术。它是作为HTML5的一部分标准化的,旨在解决传统HTTP协议在实…

uniapp使用vuex

1、uniapp中使用vuex_uniapp使用vuex-CSDN博客 2、uniapp中使用vuex(store)模块的例子 - 简书 (jianshu.com) 3、vuex介绍及使用指南(面向实战)_vuex 实战应用-CSDN博客

工程中实践的微服务设计模式

大家好,我是 方圆。最近在读《微服务架构设计模式》,开始的时候我非常的好奇,因为在我印象中,设计模式是常说的那23种设计模式,而微服务的设计模式又是什么呢?这个问题也留给大家,在文末我会附上…

opencv图像处理技术(阈值处理与图像平滑)

进行图像处理时,常常需要对图像进行预处理以提取所需的信息或改善图像质量。阈值处理和图像平滑是两种常见的预处理技术。 阈值处理 阈值处理是一种图像分割技术,其基本思想是将图像中的像素值与一个或多个预先设定的阈值进行比较,根据比较…

PCL 线段到三角形的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里沿用之前直线到三角形的距离计算思路: 1、首先,我们可以判断直线与三角形是否相交,相交则距离为0,这里可以参考之前的博客:PCL 计算一条射线与一个三角形的交点。 2、如果直线与三角形未相交,则只需要判断…

【人工智能】猫狗识别

猫狗识别 实验背景 数据集介绍 我们使用CIFAR10数据集。CIFAR10数据集包含60,000张32x32的彩色图片,10个类别,每个类包含6,000张。其中50,000张图片作为训练集,10000张作为验证集。这次我们只对其中的猫和狗两类进行预测。 图 1 CIFAR10 数据…

Windows11配置VUE开发环境

目录 一、按照nodejs二、命令安装npm cache clean --forcenpm install -g vue/clinpm install npm -gnpm install webpacknpm install vue-cli -g与npm install -g vue/cli区别npm install -g cnpm --registryhttps://registry.npm.taobao.orgnpm i yarn -g --verbosenpm i -g …

网络与并发编程(一)

并发编程介绍_串行_并行_并发的区别 串行、并行与并发的区别 串行(serial):一个CPU上,按顺序完成多个任务并行(parallelism):指的是任务数小于等于cpu核数,即任务真的是一起执行的并发(concurrency):一个CPU采用时间…

IDEA 导出jar无法执行 错误: 找不到或无法加载主类

1、首先配置正确Project Struct 保证需要引用的jar包库添加到Libraries里,尽管添加到Modules里依然可以测试运行或调试,但导出的jar包会遇到问题。 2、导出jar,方式选择如下 选择”From modules with dependencies" 然后去掉以上“Extr…

手机如何在线制作gif?轻松一键在线操作

现在大家都喜欢使用手机来拍摄记录有趣的事物,但是时间长了手机里的视频越来越多导致手机存储空间不够了,这些视频又不想删除时应该怎么办呢?这个很简单,下面就给大家分享一款不用下载手机就能操作的视频转gif网站-GIF中文网&…

【贪玩巴斯】Mac的M芯片(M1/2...)下载homebrew方法(24年最新且已验证可行)

1. 按照目前广为流传的方法(M1会出现一些问题): 终端输入: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 使用国内镜像下载。 2. 输入后按照要求步骤执行即可&#xff…

k8s单节点部署,容器运行时使用containerd

环境 系统 : entOS Linux release 7.9.2009 (CoreIP:192.168.44.177 硬件要求:控制平面最少需要 2c2g 安装前环境准备 如果是集群部署还需要配置时间同步 关闭防火墙 systemctl disable firewalld关闭selinux setenforce 0sed -i s/SELI…

KADB锁冲突查看及解决

构造锁冲突 分布开启两个终端,一个终端执行: begin; update data_table set addrtest where id89; 另外一个终端执行: alter table data_table add test varchar(20); 观察锁冲突情况 test# select pid,waiting,waiting_reason,query from p…

sql注入-MySQL

01. 常用符号、函数、语句 1.1. 常用符号 1.1.1. 注释符 注释符说明#(%23)单行注释 在URL中#表示锚点,也就是hash路由,带上#不会请求后端路由,而是刷新前端路由,所以测试一般用URL编码后的%23– – - -+单行注释 注意–后还有一个空格;其中+号会被URL解码为空格/**/多行…

Python学习从0开始——009类

Python学习从0开始——009类 一、类3.1最简形式3.2Class 对象3.3实例对象3.4实例变量 二、继承2.1最简形式2.2多重继承 三、私有变量四、杂项 一、类 3.1最简形式 class ClassName:<statement-1>...<statement-N>3.2Class 对象 #包含三种属性引用 class MyClass…

前后端接口写法(传输数据)

目录 前言1. 零散数据2. 函数体3. 总结 前言 对于后端常用的两个注解&#xff1a;详细分析Java中的RequestParam和RequestBody 以下文章主要用于笔记总结&#xff0c;后续可翻看 1. 零散数据 前端数据 export const doWeekPlan (ids,selectedPeriod) > {return reques…