Android属性系统简介【转】

1、简介
在系统中,为统一管理系统的属性,设计了一个统一的属性系统 。每个属性都有一个名称和值,他们都是字符串格式 。属性被大量使用在系统中,用来记录系统设置或进程之间的信息交换 。属性是在整个系统中全局可见的 。每个进程可以get/set属性 。在编译的过程中会将各种系统参数汇总到build.proc以及.proc这两个文件中,主要属性集中在build.proc中 。系统在开机后将读取配置信息并构建共享缓冲区,加快查询速度 。另外一个方面,会在系统第一次初始化时(刷机第一次启动)后,将从.xml中读取数据然后写入数据库.db目录 。并构建一个缓冲系统供其他应用查询 。下面将详细讲述 。
2、 Type
系统属性根据不同的应用类型,分为不可变型,持久型,网络型,启动和停止服务等 。
特别属性:
属性名称以“ro.”开头,那么这个属性被视为只读属性 。一旦设置,属性值不能改变 。
属性名称以“.”开头,当设置这个属性时,其值也将写入/data/ 。
属性名称以“net.”开头,当设置这个属性时,“net.”属性将会自动设置,以加入到最后修改的属性名 。(这是很巧妙的 。模块的使用这个属性来追踪在net.*属性上的任何变化 。)
属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务 。每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务 。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务 。这项服务的启动结果将会放入“ init.svc.“属性中 。客户端应用程序可以轮询那个属性值,以确定结果 。
3、
【Android属性系统简介【转】】 程序提供了两个工具:和获取和设置属性 。其使用方法:
Java
在Java应用程序可以使用.()和.()函数获取和设置属性 。
默认情况下,设置属性只会使"init"守护程序写入共享内存,它不会执行任何脚本或二进制程序 。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的init.rc中有:
# adbd on at boot in emulatoron property:ro.kernel.qemu=1start adbdon property:persist.service.adb.enable=1start adbdon property:persist.service.adb.enable=0stop adbd
4、
原则上,属性的设置可以出现在make 的任何环节 。目前的设置以oppo版本为例:
alps\build\\board\\ .prop
alps\build\\\core.mk
alps\build\tools\.sh
编译好后,被设置的系统属性主要存放在:
这样,如果你设置..adb.为1,"init"守护程序就知道需要采取行动:开启adbd服务 。
\ .prop手机厂商自己定制使用
\\build.prop系统属性主要存放处
\\.prop,有存放与相关的属性
\data\local.prop目前还没有看到有内置的情况
\data\下有4个prop文件:.sys., .sys., .sys., .sys.,里面保存着属性名称以“.”开头的属性值 。用户的开头的属性都会保存副本在这个目录下
5、 Run
5. init.
在linux 启动时,将分配一个共享内存区来存储的属性 。这些是由“init”守护进程完成的,其源代码位于:/core/init 。“init”守护进程将启动一个属性服务 。属性服务在“init”守护进程中运行 。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息 。属性服务将会在共享内存区中修改和创建属性 。客户端想获得属性信息,可以从共享内存直接读取 。这提高了读取性能 。
客户端应用程序可以调用中的API函数以GET/SET属性信息 。的源代码位于:/core/ 。获取和设置属性的代码在.c里面,读取属性通过读共享内存得到,设置属性通过发送请求到进行设置 。API函数是: