Android8.0.0-r4——属性系统

在Android 系统中,为统一管理系统的属性,设计了一个统一的属性系统。每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。在编译的过程中会将各种系统参数汇总到build.proc 以及default.proc 这两个文件中,主要属性集中在build.proc中。系统在开机后将读取配置信息并构建共享缓冲区,加快查询速度。另外一个方面,SettingsProvider会在系统第一次初始化时(刷机第一次启动)后,将从Defaults.xml中读取数据然后写入数据库Settings.db 目录。并构建一个缓冲系统供其他应用查询。

Android中保存了很多系统属性值,比如手机的操作系统版本号ro.build.version.release,SDK版本号ro.build.vrsion.sdk,芯片型号ro.chipname;用于配置USB连接类型的persist.sys.usb.config;Android虚拟机ART相关的配置dalvik.vm.image-dex2oat-Xms。

系统属性由init进程的一个服务property_service负责管理,在手机启动时,该服务负责将所有手机里的属性文件中的属性加载到共享内存中,从而可以为不同的进程访问。

从功能上来看,Android的属性系统类似于Windows的注册表,都是用于保存系统的参数与配置


2、Properties Type

  系统属性根据不同的应用类型,分为不可变型,持久型,网络型,启动和停止服务等。
  属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
  属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。
  属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。(这是很巧妙的。 netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)

  属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中 。客户端应用程序可以轮询那个属性值,以确定结果

其他类型的属性除了位于属性文件中的属性值之外,手机一旦关机这些属性值都会丢失,不能持久存在

3、Android toolbox

  Android toolbox程序提供了两个工具: setprop和getprop获取和设置属性。其使用方法:
  getprop <属性名>

  setprop <属性名> <属性值>

  Java

  在Java应用程序可以使用System.getProperty()和System.setProperty()函数获取和设置属性。

       C++

            property_get,property_set,property_list

  Action
  默认情况下,设置属性只会使"init"守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的init.rc中有:

 
1on property:sys.usb.config=none && property:sys.usb.configfs=1
2    write /config/usb_gadget/g1/UDC "none"
3    stop adbd
4    setprop sys.usb.ffs.ready 0
5    write /config/usb_gadget/g1/bDeviceClass 0
6    write /config/usb_gadget/g1/bDeviceSubClass 0
7    write /config/usb_gadget/g1/bDeviceProtocol 0
8    rm /config/usb_gadget/g1/configs/b.1/f1
9    rm /config/usb_gadget/g1/configs/b.1/f2
10    rm /config/usb_gadget/g1/configs/b.1/f3
11    rmdir /config/usb_gadget/g1/functions/rndis.gs4
12    setprop sys.usb.state ${sys.usb.config}
13
14on property:sys.usb.config=adb && property:sys.usb.configfs=1
15    start adbd
 

4、Properties Source

原则上,属性的设置可以出现在make android的任何环节。

目前Properties 的设置以Android8.0.0-r4谷歌原生代码版本为例:  

/build/target/board/generic_arm64/system.prop  

/build/tools/buildinfo.sh  

编译好后,被设置的系统属性主要存放在:  

这样,如果你设置persist.service.adb.enable为1 ,"init"守护程序就知道需要采取行动:开启adbd服务。  

/default.prop                                                     手机厂商自己定制使用  

/system/build.prop                                            系统属性主要存放处      

 /system/default.prop                                         default properties, 有存放与security 相关的属性       

/data/local.prop                                                   目前还没有看到有内置的情况

       /data/property下有4个prop文 件:persist.sys.timezone, persist.sys.language, persist.sys.country, persist.sys.localevar, 里面保存着属性名称以“persist.”开头的属性值。用户的persist 开头的属性都会保存副本在这个目录下


5.Property Service的启动与初始化

init进程启动,分为两个阶段,阶段一主要是添加脚本执行环境,以及初始化必要的文件系统目录。接着通过execv来执行一个参数为--second-stage的新的init进程Image以取代之前的init进程Image。

阶段一请参考http://blog.csdn.net/nwpushuai/article/details/79346665

执行第二阶段的初始化时,开始初始化属性系统,主要分为以下几个步骤:        

    初始化属性共享内存;        

    加载系统默认属性值;        

    启动属性服务,监听属性修改请求命令;

    从磁盘中加载所有属性值到内存;

代码路径:/system/core/init/init.cpp (http://androidxref.com/8.0.0_r4/xref/system/core/init/init.cpp)

http://blog.csdn.net/nwpushuai/article/details/79440754


6.控制属性

在system properties 中提供两个特殊的key, ctl.start 和 ctl.stop 来启动和关闭服务。

其API 描述是:

     SystemProperties.set(“ctl.start”,serviceName);

     SystemProperties.set(“ctl.stop”,serviceName);

 serviceName 可在init.rc 中查询


7.About Phone Properties.

About Phone中的一些关键属性通过buildinfo.sh 来焊接(make - build), 经过测试,可修改alps\build\tools\buildinfo.sh 来修改显示的情况,整理一下如下:

修改echo "ro.build.display.id=$BUILD_DISPLAY_ID", 把 $BUILD_DISPLAY_ID 修改成其他的名称可改变 Build Nubmer. 注意此时要去除$.

修改echo "ro.product.model=$PRODUCT_MODEL",   把   $PRODUCT_MODEL 修改成其他的名称可改变 Model Nubmer.   注意此时要去除$

修改echo  "ro.build.version.release=2.1" , 中的2.1 可改变显示的Firmware version, 这个不建议修改。

Baseband Version 直接写在 modem.img 中,开机后modem 自动推送到Android端,需要专门的tool 才能修改。

Kernel Version 为linux 编译过程中产生, 按照标准的linux格式生成(compile.h), 最后版本信息写在文件/proc/version 下,所有的版本信息即在该文件的第一行,然后使用了一个正则表达式过滤了版本信息中一些字符。


参考:

https://www.cnblogs.com/l2rf/p/6610348.html

http://blog.csdn.net/jason_wzn/article/details/71603429
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FusionCompute CNA-8.0.0-arm是华为公司推出的一款基于ARM架构的新一代云计算虚拟化平台,该平台具有稳定性高、性能强、适用范围广等优点,在云计算领域具有广泛的应用价值。该平台提供了高效的虚拟化能力,能够为企业客户提供更加安全和可靠的虚拟化解决方案。 作为一种云计算服务提供平台,FusionCompute CNA-8.0.0-arm具有一些独特的特点。首先,该平台采用最新的ARM架构,可以支持更加广泛的应用场景,具有很强的通用性和可扩展性。其次,该平台提供了高度智能化的管理功能,可以自动化分配计算资源,优化资源的运用效率,并且具有严格的安全保障机制,可以有效保护客户的数据安全。 同时,FusionCompute CNA-8.0.0-arm采用了独特的分布式架构,可以快速响应客户的需求,为客户提供更加优质的服务。其虚拟化能力卓越,可以满足客户在不同行业的需求,例如金融、交通、医疗、教育等领域的应用需求,并可提供高效的云计算解决方案。 总之,FusionCompute CNA-8.0.0-arm是一款非常优秀的云计算虚拟化平台,是企业客户在建立云计算服务时的绝佳选择。该平台采用最新的ARM架构,具有通用性和可扩展性,且具有优异的性能表现,可以满足各种不同行业的需求。同时,该平台具有智能化的管理功能和严格的安全保障机制,可以为企业客户提供更加安全可靠、高效的云计算服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值