Android Property System

2023-11-13

 属性系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是一个键值对(key/value pair),其类型都是字符串。

         从功能上看,属性与windows系统的注册表非常相似。许多android应用程序和库直接或者间接地依赖此特性,以决定它们的运行时行为。例如,adbd进程查询属性服务已确认当前是否运行在模拟器环境中。另一个例子是java.io.File.pathSpearator,其返回存储于属性服务中的值。

         属性系统是如何工作的

         属性系统的上层架构如下图所示。

         图中有3个进程、一组永久属性文件和一块共享内存区域。共享内存区域是所有属性记录的存储所在。只有属性服务进程才可以写入共享内存区域,它负责从永久文件中加载属性记录并将它们保存在共享内存中。

         consumer进程将共享内存加载到其自身的虚拟地址空间并直接访问这些属性。setter进程同样将共享内存加载到其自身的虚拟地址空间,但其不能直接写该内存。当setter试图增加或者更新一个属性时,它将该属性通过unix domain socket发送至属性服务。属性服务代表setter进程将该属性写入共享内存和永久文件中。

         属性服务运行于init进程中。init进程首先创建一个共享内存区域,并保存一个指向该区域的描述符fdinit进程将该区域通过使用了MAP_SHARED标志的mmap映射至它自身的虚拟地址空间,这样,任何对于该区域的更新对于所有进程都是可见的。fd和区域大小被存储在一个名为ANDROID_PROPERTY_WORKSPACE的变量中。任何其他进程,比如consumersetter将使用这个变量来获得fd和尺寸,这样它们就能mmap这个区域到它们自身的虚拟地址空间中。该共享内存区域如下图所示。

在这之后,init进程将从下列文件加载属性:

/default.prop
/system/build.prop
/system/default.prop
/data/local.prop

下一步是启动属性服务。在这一步中,一个unix domain socket服务被创建。此socket的路径是/dev/socket/property_service,该路径对于其他客户端进程是熟知的。最后,init进程调用poll来等待该socket上的连接事件。

         consumer一边,当它初始化libcbionic/libc/bionic/libc_common.c __libc_init_common 函数),它将从环境变量中返回fd和尺寸,并映射共享内存到其自身的地址空间(bionic/libc/bionic/system_properties.c __system_properties_init 函数)。在这之后,libcutils可以想读取普通内存那样为consumer读取属性。

         目前,属性是不能够被删除的。也就是说,一旦添加了一个属性,它将不能够被删除,其键也不能够被改变。

         如何读取/设置属性

         Android上有三种主要途径来get/set属性。

1、  native code

当编写本地应用程序时,可以使用property_getproperty_set 这两个API来读取/设置属性。要使用它们,我们需要include cutils/properties.h,并链接libcutils库。

2、  java code

Java包(java.lang.System)中提供有System.getPropertySystem.setProperty方法。但值得注意的是,尽管这两个API在语义上等同native函数,但其将数据存储于完全不同的位置。实际上,dalvik VM使用一个哈希表来存储这些属性。所以,用这两个API存储的属性是独立的,不能存取native属性,反之亦然。

然而Android有一个内部隐藏类(@hide,对SDK不可见)android.os.SystemProperties来操纵native属性。其通过jni来存取native属性库。

3、  shell脚本

Android提供getpropsetprop命令行工具来获取和更新属性。其依赖libcutils实现。

 

以上翻译自http://rxwen.blogspot.com/2010/01/android-property-system.html,有修正。


         补充:通过查看property_service.c,我们可以明确以下事实:

1、  属性名不是随意取的。在property_perms数组中定义了当前系统上可用的所有属性的前缀,以及相对应的存取权限UID。对属性的设置要满足权限要求,同时命名也要在这些定义的范围内。

2、  PA_COUNT_MAX指定了系统(共享内存区域中)最多能存储多少个属性。

3、  PROP_NAME_MAX指定了一个属性的key最大允许长度;PROP_VALUE_MAX则指定了value的最大允许长度。

此外,http://blog.csdn.net/tekkamanitachi/archive/2009/06/18/4280982.aspx 这篇文章翻译了Android的官方文档,从另一个角度叙述了属性系统,需要者请参看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Property System 的相关文章

  • 应用程序签名机制

    原文链接 http www 2cto com Article 201308 237263 html Android安全机制分析 Android系统是基于Linux内核开发的 因此 Android系统不仅保留和继承了Linux操作系统的安全机
  • 使用fastboot工具刷入recovery.img、boot.img、system.img等

    下载解压 fastboot工具 解压FastBoot工具 zip 将解压得到的 FastBoot文件夹复制到任意盘如 D盘 将要刷入手机的recovery img recovery img等放到FastBoot文件夹 安装好手机型号对应的U
  • repo遍历所有git仓库

    repo遍历所有git仓库 repo forall c 命令 其中 参数有 c 后面可以带的任何可以被系统支持的shell命令 ls cp pwd等 p 在shell命令输出之前列出项目名称 v 列出执行shell指令输出的错误信息 该命令
  • 内核篇加载内核模块(Android10)

    一 开发前期准备 本文中使用的是linageOs源码中下载的oneplus3 安卓10内核源码进行研究测试 交叉编译链使用的是linageOs源码中的交叉编译链 lineageOs源码中oneplus3内核源码位置路径 home qiang
  • Android系统源代码的下载与编译

    http www jianshu com p aeaceda41798
  • Tensorflow的Bazel编程(二)

    转自 http blog csdn net langb2014 article details 54312697 安装官网 https bazel build versions master docs tutorial Java html
  • android windows 安装

    转自 http www cnblogs com skynet archive 2010 04 12 1709892 html 本系列适合0基础的人员 因为我就是从0开始的 此系列记录我步入Android开发的一些经验分享 望与君共勉 作为A
  • Android 系统865虚拟化集成无源码apk示例

    一 环境 高通865虚拟化Android 10 版本 二 具体修改的文件 以集成OppoAnonymousId apk为例 1 新建OppoAnonymousId目录 将apk放到该目录 vendor qcom proprietary pr
  • 13 Binder通信之ServiceManager

    Binder通信之ServiceManager 一 前言 Android系统中存在很多service 当某个应用调用系统某个service的功能时 往往向系统发出请求 调用该服务的外部接口 这种外部接口我们通常叫做代理接口 也就是说要拿到目
  • android设备外接多个usb摄像头

    转自 https youshaohua com post android device external multiple USB camera 代码访问 OTG USB camera https github com quantum6 A
  • Python+uiautomator2手机UI自动化测试实战 --1. 环境搭建

    转自 https blog csdn net ricky yangrui article details 81414870 一 简介 uiautomator2是一个python库 用于Android的UI自动化测试 其底层基于Google
  • android 进程监控 top

    adb shell top h top h Usage top m max procs n iterations d delay s sort column t h m num Maximum number of processes to
  • Android系统签名介绍

    一 签名原理介绍 apk的签名 简单说开发者可以通过签名 对应用进行标识和更新 包名在一个设备上是唯一的 这样可以避免被相同包名应用随意覆盖安装 这是一个非常重要的安全功能 系统中的签名文件 也是对系统中应用进行签名 编译应用是可以指定签名
  • 任意遥控器遥控C1测试成功,理论上可使用任意遥控

    转自 http bbs letv com thread 35538 1 1 html http bbs letv com thread 65155 1 1 html 任意遥控器遥控C1测试成功 理论上可使用任意遥控 现在测试了乐视随机九键遥
  • 【android系统】android系统升级流程分析(二)---update升级包分析

    接下来我们将通过几篇文章来分析update zip包在具体Android系统升级的过程 来理解Android系统中Recovery模式服务的工作原理 今天让我先来分析下升级包update zip 一 目录结构 update zip包的目录结
  • 使用ANT打包Android应用

    转自 http blog csdn net liuhe688 article details 6679879 大家好 今天来分享一下如何使用ANT打包Android应用 通常我们习惯用eclipse来开发Android程序 它会自动帮我们打
  • 使用grep 过滤logcat输出

    转自 http www xmumu com post 2012 02 15 15478732 如何过滤 adb logcat 输出 简介 本文介绍如何在shell 命令行中过滤 adb logcat 输出的几个小技巧 开发当中经常看到别人的
  • android Jar文件的数字签名

    转自 http hubingforever blog 163 com blog static 17104057920118104058241 JAR文件可以用 jarsigner工具或者直接通过 java securityAPI 签名 签名
  • Android SDK Android NDK 官方下载地址

    Android SDK Android NDK 官方下载地址 Android NDK r6b Windows http dl google com android ndk android ndk r6b windows zip Mac OS
  • build VCL on android

    转自 http wiki videolan org AndroidCompile AndroidCompile This page is an introduction to the compilation of VLC for Andro

随机推荐

  • Spring Boot注入Servlet、Filter、Listener 注解方式和使用RegistrationBean二种方式 加源码分析

    目录 Spring Boot 注入Servlet Filter Listener 官方文档 基本介绍 应用实例1 使用注解方式注入 创建 Servlet java 修改Application java 加入 ServletComponent
  • MacBook M1 安装配置conda与python3.9注意事项

    macOS 版本 1 python 3 9 才支持m1 所以需要下载3 9之上的版本 https www python org downloads macos 2 如果需要安装Anaconda 可省略单独安装python anaconda自
  • 苹果CMS V10 后台一键采集豆瓣API获取资料(最新版)

    进入苹果CMS根目录后 找到如下文件 application admin view vod info html 大约在718行左右 照图修改两处位置即可 同时列出关键代码如下 修改后一键采集入库资料示例 相关AJAX请求核心代码如下 aja
  • 元宇宙(四)人机接口

    1 VR AR MR 现在的VR AR MR一定程度上试图解决把虚拟世界 展示 给我们的问题 先不说效果如何 这个接口的也只能提供视觉和听觉信息 虽然视觉和听觉为我们提供了大部分信息量 但其它感知能力 触觉 嗅觉 味觉也虚拟世界能让我们有真
  • 华为实习生2022机考、技术面及主管面试

    第一题 第一种情况 a坐标比b坐标小 a的坐标更新为b 1 第二种情况 a坐标比b坐标大 直接加1 对于B来说也是一样 按照这个原则来更新坐标 最后返回即可 第二题 动态规划求地图障碍物的题 不同路径https leetcode cn pr
  • Linux 网络管理

    网络管理 1 网卡命名方式 1 1 网卡名称的组成格式 前两个字母标识固件 以太网卡以 en 开头 无线网卡以 wl 开头 后一个字母标识设备结构 o 主板上集成的设备的设备索引号 s 扩展槽的索引号 p s 基于拓扑的命名 如enp2s1
  • 【使用 BERT 的问答系统】第 1 章 : 自然语言处理简介

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 类模板的使用

    模板类和静态成员 include
  • GUID字符串做主键与Number类型做主键 的执行效率比较

    使用GUID字符串做主键与Number类型做主键 在数据量不太多的时候 如 少于2 万条 查询 插入效率差别几乎可以忽略不计 但在磁盘空间占用方面差别比较明显 对主键的检索完全走的index 检索的次数和采用number的主键理论应该一样
  • S7-200 PLC的CPU模块介绍

    更多关于西门子S7 200PLC内容查看 西门子200系列PLC学习课程大纲 课程筹备中 1 什么是西门子200PLC的CPU 如下图1 1所示 S7 200 PLC CUP是将一个微处理器 一个集成电源 一定的数字量或模拟量I O 一定的
  • 一、markdown 常见公式

    文章目录 公式 字符 希腊字符 三角 对数 指数函数 向量 矩阵 省略号 空格 运算符 累加累积 开方 极限 导数 微积分 括号 绝对值 范数 分段 逻辑运算符 集合运算符 箭头 上下标符 公式 字符 希腊字符 字符 Markdown 字符
  • CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)

    TZOJ题目分类 本博客原文地址 https www cnblogs com BobHuang p 14522022 html 其中 1 较简单题26题左右 2 动态规划17题 其中9题较好做 3 模拟 阅读题目将问题抽象建模写出程序 为1
  • 华为机考模拟题

    一 字符串平均重量 we have defined the necessary header files here for this problem If additional header files are needed in your
  • 嵌入式ERPC框架正式发布了

    一 ERPC开发的原由 随着科技日新月异的快速发展 电子产品的功能越来越多 业务也越来越复杂 以前靠单打独斗完成电子产品的研发的时代已经慢慢远去 更多的是靠一个团队协作共同努力才能完成 这就为电子产品的设计和研发带来了新的问题 团队的协作
  • RDF与可视化【转载】

    Rudolf RDFViz Exploring tools for RDF Graph Visualisation http www ilrt bris ac uk discovery rdf dev rudolf rdfviz To vi
  • 网站遭遇CC及DDOS攻击紧急处理方案

    检测访问是否是CC攻击的命令 80口为网站的访问端口 可以根据实际情况进行修改 netstat anlp grep 80 grep tcp awk print 5 awk F print 1 sort uniq c sort nr head
  • 华为OD机试真题-矩阵元素的边界值-2023年OD统一考试(B卷)

    题目描述 给定一个N M矩阵 请先找出M个该矩阵中每列元素的最大值 然后输出这M个值中的最小值 补充说明 N和M的取值范围均为 0 100 示例1 输入 1 2 3 4 输出 3 说明 第一列元素为 1和3 最大值为3 第二列元素为 2和4
  • python奥特曼代码_【Python】奥特曼VS小怪兽、大战300回合

    上一节 lt gt 上一节我们学了类的基本使用 为了巩固学习 今天继续使用 类 来编程 好好学习 天天打卡 今天我们要研究的是 奥特曼打小怪兽 游戏策划 不要觉得没有用 题目 写出一个 奥特曼 和 小怪兽 类 基本属性有名字 生命值和魔法值
  • 服务的分类

    从技术实现角度和业务角度切入 来梳理服务的类别与层次 1 服务的基本类别 工具 实体和任务 工具服务 标准Api的封装 如JMS JDBC 公共功能区域的提炼 如消息传递 HTTP服务 安全性 非功能性需求的抽取 如拓展性 可用性 以及常见
  • Android Property System

    属性系统是android的一个重要特性 它作为一个服务运行 管理系统配置和状态 所有这些配置和状态都是属性 每个属性是一个键值对 key value pair 其类型都是字符串 从功能上看 属性与windows系统的注册表非常相似 许多an