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