Android 属性

android 属性用于记录系统或者进程设置之间信息交换。

1.介绍

属性整个系统可见的。每个进程都可见get/set (System.getProperty(),System.setProperty())属性。

  • a.编译过程将系统参数汇总到build.proc和default.proc和default
  • b.系统在开机读取配置并构建缓冲区,加快查询。
  • c.SettingProvider会在系统第一次初始化(刷机第一次启动),将从Defaults.xml中读取并写入Setting.db目录.

2.属性类型

  • a.不可变性:”ro.”,开头,只读属性。
  • b.持久型 : “persist.”开头,当设置这个属性,其值将写入/data/property
  • c.网络型 :”net.”开头,当设置这个属性,”net.change”属性自动设置,加入最后修改的属性。
    netresolve模块使用这个属性来追踪net.*属性上任何变化。
  • d.启动停止:”ctl.start”和”ctl.stop”用于启动和停止服务。
    每一项服务必须在/init.rc中定义,init守护进程将解析init.rc和启动属性服务.
    设置”ctrl.start”属性请求,属性服务将用属性值,启动该服务。
    这项服务启动结果将会放入”init.svc.<服务名>”属性中。客服端应用程序轮询那个
    属性值,确定结果。
setprop ctl.start bootanim
setprop ctl.stop  bootanim

3.设置属性方法

  • a.获取和设置属性:setprop和getprop。java中用System.getProperty()和System.setProperty();
  • b.init.rc中Action也可以监控属性变化关联。
#adb on at boot in emulator 
on property:ro.kernel.qemu=1
    start adbd
on property:persist.service.adb.enable=1
            start adbd
        on property:persist.service.adb.enable=0
            stop adbd

4.properties source

属性设置可以出现在 make android 任何环节。
\buile\target\board\generic_arm64\system.prop
\build\target\product\core.mk
\build\tools\buildinfo.sh
编译好后,设置属性主要在
\default.prop 手机厂商自己定制
\system\build.prop 系统属性主要放置地方
\system\default.prop 存放与secutity相关的属性
\data\property 里面保存以”persist”开头的属性。”persist”属性都会保存副本在这里。

5.属性运行

5.1 属性初始化

linux kernel启动时,Android分配一个共享区来存储属性。system/core/init 启动一个属性服务,等待客户端连接设置。属性服务将在共享内存中修改和创建属性。客服端想获得属性信息,可以从共享内存直接读取,提高读取性能。
/system/core/libcutils中properties.c里面API
load_properties_from_file("/default.prop")将文件中所有java环境使用到的propt释放到这个共享内存中。

5.2扩大系统属性

Android 默认属性系统有247笔properties.大量写入容易导致system mmapkernel ashmem中ashmem中缓存ashmem溢出。

#define PA_COUNT_MAX N
#define PA_INFO_START ((8+PA_COUNT_MAX)*4)
#define PA_SZE (PA_INFO_START+(128*PA_COUNT_MAX))

5.3属性控制

其中serviceName可在init.rc查询

SystemProperties.set("ctl.start",serviceName)
SystemProperties.set("ctl.stop",serviceName)

5.4属性安全性

作为一个共享缓存系统,并非任何AP随意修改其中的属性。针对这些属性,如果进行更改是,会用UID约束。如persist.sys开头属性,只有system用户(root)进行修改,其他用户无法修改
persist属性是固定的。修改后重启会保持原来的。
机顶盒自己测:
setprop persist.hang zhou
getprop persist.hang #输出zhou
冷热重启属性依然存在的。

6.setting provider

android framework还定义了setting provider来对一些比较通用数据进行初始化。并写入Setting.db,其中属性内容写在defaults.xml中settingProvider通过DatabaseHelper将数据读入Setting.db,同时SettingProvider作为Setting.db的Provider,所有对该数据库操作都要通过它来进行。Settings提高访问效率,建立cache,只有cache找不到时,才会调用SettingProvider去查询数据库。关键System表中数据有:一般通过修改defaults.xml和make配置文件即可。

7.关于设备的属性

about phone一些关键属性通过buildinfo.sh(make-build),可以修改\build\tools\buildinfo.sh来修改显示的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值