【发布时间】:2011-03-10 04:55:31
【问题描述】:
我知道如何从应用层访问 Android 系统属性。
在框架层android.os.SystemProperties类负责
获取所有属性。但在内部它调用了一些 C 代码来获取
native_get(key,value) 之类的属性。
谁能告诉我C代码中基本上引用了哪个文件?
【问题讨论】:
标签: android android-ndk system-properties
我知道如何从应用层访问 Android 系统属性。
在框架层android.os.SystemProperties类负责
获取所有属性。但在内部它调用了一些 C 代码来获取
native_get(key,value) 之类的属性。
谁能告诉我C代码中基本上引用了哪个文件?
【问题讨论】:
标签: android android-ndk system-properties
该方法的本地代码位于文件 android_os_SystemProperties.cpp 中。它将它们委托给 Bionic libc 库 /bionic/libc/bionic/system_properties.c,该库从共享内存中读取属性值。
这是“Android property system”文章的引述(如果您想了解 Android 属性的工作原理,我建议您通读一遍):
init 进程将从以下文件加载属性:
/default.prop /system/build.prop /system/default.prop /data/local.prop下一步是启动属性服务。在此步骤中,将创建一个 unix 域套接字服务器。此套接字的路径名是
"/dev/socket/property_service",这是其他客户端进程所熟知的。
最后,init进程调用poll等待socket上的connect事件。在消费者端,当它初始化 libc (
bionic/libc/bionic/libc_common.c __libc_init_common function) 时。它将从环境变量中检索 fd 和大小,并将共享内存映射到它自己的空间 (bionic/libc/bionic/system_properties.c __system_properties_init function)。之后,libcutils 可以像普通内存一样为消费者读取属性。
【讨论】:
这些不是 SDK API 的一部分。
【讨论】: