属性服务

Android在bionic/libc中实现了属性数据库,源文件bionic/system_properties.c,头文件include/sys/system_properties.h。属性数据库建立在临时文件(/dev/__properties__)上。

bionic直接处理属性读取请求;然而,对于属性设置请求,则通过UNIX域套接字(/dev/socket/property_service)转发给了init进程处理。

属性文件句柄被子进程继承,句柄值通过环境变量ANDROID_PROPERTY_WORKSPACE传递。init进程作为所有用户进程的父进程初始化了属性环境。


属性服务初始化时从下列文件中读取属性:

#define PROP_PATH_RAMDISK_DEFAULT "/default.prop"

#define PROP_PATH_SYSTEM_BUILD "/system/build.prop"

#define PROP_PATH_SYSTEM_DEFAULT "/system/default.prop"

#define PROP_PATH_FACTORY "/factory/factory.prop"

#define PROP_PATH_LOCAL_OVERRIDE "/data/local.prop"

其中/data/local.prop只有调试模式(ro.debuggable=1)才会加载。

属性服务处理设置(PROP_MSG_SETPROP)请求。修改属性有两层权限控制,第一层通过属性名前缀控制,权限记录在property_perms数组中;第二层是selinux_check_access。

在修改属性时,根据init.rc里面定义的动作执行相应的命令。

属性ctl.start、ctl.stop、ctl.restart用来启动、停止、重启一个服务,他们的权限控制也特殊一些(通过服务名称控制,权限记录在control_perms数组中)。

属性ro.*是只读的。

属性net.change自动跟踪最后一个被修改的net.*属性名称。

属性init.svc.*跟踪init启动的服务的状态。

属性persist.<name>用来持久化一个属性,属性值保存在/data/property/<name>文件中。下次启动init会读入持久化的属性(load_persistent_properties)。

属性包装接口实现在libcutils中,源文件system/core/libcutils/properties.c,头文件system/core/include/cutils/properties.h。

更多相关文章

  1. Android4: 旋转屏幕时禁止Activity重启
  2. Android:AIDL简单使用
  3. android自定义属性之format介绍
  4. android 动画
  5. Android(安卓)init.rc init.vendor.rc 介绍
  6. android一些坑与小技巧
  7. 系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Bro
  8. 原生Android也能做Web开发了
  9. APP开发实战95-动态Vector基础

随机推荐

  1. Android常见40道原理性面试,去面试之前必
  2. 蒸蒸日上的智能手机,国产手机却迎来寒冬,因
  3. 移动端启动速度
  4. Android(安卓)系统启动流程解析-从开机到
  5. Android(安卓)studio 使用原生自带Downlo
  6. Android(安卓)内存查看常用命令
  7. Android(安卓)app如何正确读写系统sys设
  8. 字节跳动屏幕适配方案解读
  9. Android(安卓)wifi 信号强度单位 dbm
  10. Android屏幕录制并转换gif