当前位置: 首页 > news >正文

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

相关文章:

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要弄清楚我们应该在哪里添…...

docker 创建容器过程

结合下图,本文讨论docker 创建容器过程: START└── [用户通过Docker Client发出指令]└── (1) docker run 或 docker create 命令├── (2) Docker Client与Docker Daemon建立通信连接└── (3) Docker Daemon接收到创建容器请求├── (4) 检查…...

OSI七层网络攻击行为及防范手段

2020年3月3日,360安全大脑披露美国中央情报局攻击组织(APT-C-39)对我国大型互联网公司、政府部门及相关企业进行长达11年的网络攻击渗透,该组织所使用的网络武器和CIA“Vault7”项目中的网络武器完全吻合。如今随着互联网技术的蓬…...

第100+5步 ChatGPT文献复现:ARIMAX预测肺结核 vol. 5

基于WIN10的64位系统演示 一、写在前面 我们继续往下看,首先例行回顾文章: 《PLoS One》杂志的2023年一篇题目为《A comparative study of three models to analyze the impact of air pollutants on the number of pulmonary tuberculosis cases in …...

论文| Convolutional Neural Network-based Place Recognition - 2014

2014-Convolutional Neural Network-based Place Recognition...

基于微信小程序的自习室预约系统的设计与实现

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…...

【机器学习】《机器学习算法竞赛实战》第7章用户画像

文章目录 第7章 用户画像7.1 什么是用户画像7.2 标签系统7.2.1 标签分类方式7.2.2 多渠道获取标签7.2.3 标签体系框架 7.3 用户画像数据特征7.3.1 常见的数据形式7.3.2 文本挖掘算法7.3.3 神奇的嵌入表示7.3.4 相似度计算方法 7.4 用户画像的应用7.4.1 用户分析7.4.2 精准营销7…...

vue3新手笔记

setup(){}函数,是启动页面后,自动执行的一个函数。所有数据(常量、变量)、函数等等,都要return 出去。 ref函数(可用于基本数据类型,也可以用于复杂数据类型):让页面上的…...

互联网大厂ssp面经之路:计算机网络part1

1. 计算机网络的组成部分有哪些? a. 硬件设备:计算机网络由各种硬件设备组成,包括计算机、服务器、路由器、交换机、网卡等。这些设备通过物理连接(如网线、光纤)相互连接。 b. 协议:计算机网络中的通信需…...

C语言程序设计每日一练(1)

探索数字组合的奇妙世界:如何生成所有独特的三位数 当我们想要探索由1、2、3、4这四个数字能组成多少个不同的三位数时,我们实际上是在解决一个排列组合的问题。这不仅是一个数学问题,也是编程领域经常遇到的挑战,特别是在数据处…...

Spring 统一功能处理

前言:为什么要有统一功能处理? 我们在进行数据的返回的时候,不同的方法返回的数据类型也不一样,但是我们前端有时候期望拿到是一样的数据类型。就好比买菜的时候期望最后是用一个大的塑料袋进行包装的。 那么我们可以在HTTP进行响应的之前,做一些事情,让我们返回的数据统…...

【软设】知识点速记2

1.安全性、可靠性与系统性能评测基础知识 1.1计算机和网络安全 1.1.1 安全威胁 网络安全威胁是指任何可能损害网络系统的保密性、完整性和可用性的因素或行为。这些威胁可能来自内部或外部,包括恶意软件、信息泄露、DDoS攻击、社交工程、网络钓鱼、黑客攻击和资源滥用等多种…...

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…...

ML.NET(二) 使用机器学习预测表情分析

这个例子使用模型进行表情分析: 准备数据: happy,sad 等; using Common; using ConsoleApp2; using Microsoft.ML; using Microsoft.ML.Data; using System.Diagnostics; using static Microsoft.ML.Transforms.ValueToKeyMappingEstimator;…...

YOLOv9最新改进系列:YOLOv9改进之添加注意力-ContextAggregation,有效涨点!!!

YOLOv9最新改进系列:YOLOv9改进之添加注意力-ContextAggregation,有效涨点!!! YOLOv9原文链接戳这里,原文全文翻译请关注B站Ai学术叫叫首er B站全文戳这里! 详细的改进教程以及源码&#xff…...

【数据结构】初识数据结构与复杂度总结

前言 C语言这块算是总结完了,那从本篇开始就是步入一个新的大章——数据结构,这篇我们先来认识一下数据结构有关知识,以及复杂度的相关知识 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…...

子域名是什么?有什么作用?

在互联网世界中,域名是我们访问网站的关键。每一个公司的网站都需要拥有自己的域名,其中有些大型公司的网站还不止一个域名,除了主域名外还拥有子域名。有些人感到非常困惑,不知道子域名是什么。其实子域名也就是平时所说的二级域…...

学习 Rust 的第一天:基础知识

如果你对 Rust 一无所知,那我来解释一下。 “Rust 是一种系统编程语言,其优先考虑性能、内存安全和零成本抽象。” 你好,世界 我之前研究过 Rust,并且对 Java、C、C 和 Python 的基本编程概念有相当了解。 今天,我…...

电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术

文章目录 引言一、关键词策略1.1 关键词研究与选择1. 确定目标受众2. 使用关键词研究工具3. 分析搜索量和竞争程度4. 考虑长尾关键词5. 关键词的商业意图6. 创建关键词列表7. 持续监控和调整 1.2 关键词布局与密度1. 关键词自然分布2. 标题标签的使用3. 首次段落的重要性4. 关键…...

系统开发实训小组作业week7 —— 优化系统开发计划

目录 1. 建立规则,仪式,流程,模式 2. 给好行为正面的反馈 3. 明确指出不合适的行为,必要时调整人员 在 “系统开发实训课程” 中,我们小组的项目是 “电影院会员管理系统” 。在项目的开发过程中,我们遇…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...