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站全文戳这里! 详细的改进教程以及源码ÿ…...
【数据结构】初识数据结构与复杂度总结
前言 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. 明确指出不合适的行为,必要时调整人员 在 “系统开发实训课程” 中,我们小组的项目是 “电影院会员管理系统” 。在项目的开发过程中,我们遇…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
