zoukankan      html  css  js  c++  java
  • android 属性系统代码分析

    Android为了储存关于全局系统设置的信息,使用了一个系统属性公共缓冲区,这个缓冲区的内容是(属性,值)对的列表,对外提供get和set服务。可以说,属性区域相当于一般应用的配置文件。
    属性系统首先得有个固定地址空间,在system/core/init/init.c里调用property_init()函数初始化。在system/core/init目录下有
    property_service.c和property_service.h两个文件予以这个属性系统的支持,属性系统使用的存储空间是通过android的内存管理

    系统ashmem 来分配的。其中system/core/init/init.c中用到的设置和获取的服务函数(property_set(),property_get())都是

    在system/core/initproperty_service.c实现的。至于这两个服务函数的具体有效范围还有待进一步的研究,因为在

    system/core/libcutils/properties.c 中在不同的情况下分别进行此两个接口的实现,暂时也没有研究其使用。

    init.c使用的property_get是个包装函数,其实现是调用__system_property_find()函数,这个函数在
    bionic/libc/bionic/system_properties.c中实现。

    并且在init.c中导入了一个很有用的环境变量:ANDROID_PROPERTY_WORKSPACE

    这个环境变量也十分特殊,其由文件描述符和大小组成。也正是因为这个环境变量所以在

    bionic/libc/bionic/system_properties.c 中才有可能通过__system_properties_init()[此函数被
    bionic/libc/bionic/libc_init_common.c的__libc_init_common()调用进行初始化]进行初始化libc中的属性系统地址,才可能正常的通过
    __system_property_find()获取属性值。
     
    __libc_init_common()被bionic/libc/bionic/libc_init_dynamic.c(或者libc_init_static.c)调用,且其被调用函数的说明如下:

     

    代码
    /* We flag the __libc_preinit function as a constructor to ensure
     * that its address is listed in libc.so's .init_array section.
     * This ensures that the function is called by the dynamic linker
     * as soon as the shared library is loaded.
     
    */
    void __attribute__((constructor)) __libc_prenit(void);

    void __libc_prenit(void)
    {
    ...
    __libc_init_common(elfdata);
    ...
    }


    getprop

    setprop

  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/leaven/p/1948143.html
Copyright © 2011-2022 走看看