Android系统属性prop

build/core/Makefile 中引用buildinfo.sh 并生成build.prop即作为系统属性默认数据文件
bionic/libc/include/sys/_system_properties.h 定义了build.prop的路径 PROP_PATH_VENDOR_BUILD
bionic/libc/bionic/system_properties.cpp
frameworks/base/core/java/android/os/SystemProperties.java 提供上层接口调用设置系统属性
各种native方法是在frameworks/base/core/jni/android_os_SystemProperties.cpp 中具体实现的
1)system/core/init/init.c 中启动start_property_service
2)system/core/init/property_service.c 中 引用PROP_PATH_VENDOR_BUILD中的定义的属性
加载系统属性默认数据文件

void load_all_props(void)
{
load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL);
load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT, NULL);
load_properties_from_file(PROP_PATH_VENDOR_BUILD, NULL);
load_properties_from_file(PROP_PATH_FACTORY, “ro.*”);
load_override_properties();
/* Read persistent properties after all default values have been loaded. */
load_persistent_properties();
}

初始化共享内存空间
static int init_property_area(void)
{
if (property_area_inited)
return -1;
if(__system_property_area_init())
return -1;
if(init_workspace(&pa_workspace, 0))
return -1;
fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC);
property_area_inited = 1;
return 0;
}

将文件作为共享内存映射到进程空间内存使用

static int init_workspace(workspace *w, size_t size)
{
void *data;
int fd = open(PROP_FILENAME, O_RDONLY | O_NOFOLLOW);
if (fd < 0)
return -1;
w->size = size;
w->fd = fd;
return 0;
}
3)bionic/libc/bionic/system_properties.cpp
system_property_area每个进程都会使用此变量,指向系统属性共享内存区域,访问系统属性

可以在新的image中生成一份custom.prop作为系统属性数据文件的一部分,在加载系统属性默认数据文件load_all_props时将该客制化的prop文件加入便可访问该客制化的prop了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值