简要分析一下build.prop是如何生成的。Android的build.prop文件是在Android编译时收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/product/<board>/system/目录下。在Android运行时可以通过property_get()[c/c++域] / SystemProperties_get*()[Java域]读取这些属性值。

(1)build.prop的生成是由make系统解析build/core/Makefile完成。Makefile中首先定义各种变量,这在下一步执行时会用到。比如:

  1. ...
  2. PRODUCT_DEFAULT_LANGUAGE="$(calldefault-locale-language,$(PRODUCT_LOCALES))" \
  3. PRODUCT_DEFAULT_REGION="$(calldefault-locale-region,$(PRODUCT_LOCALES))" \
  4. ...

(2)Makefile中调用build/tools/buildinfo.sh执行脚本,并输出到build.prop。Buildinfo.sh很简单,只是echo一些属性,比如:

  1. ...
  2. echo"ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"
  3. echo"ro.product.locale.region=$PRODUCT_DEFAULT_REGION"
  4. ...

ro.product.locale.language/ ro.product.locale.region就是些属性,等号后面是值。

(3)Makefile中直接把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中,还会收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。

ADDITIONAL_BUILD_PROPERTIES又会收集PRODUCT_PROPERTY_OVERRIDES中定义的属性,如下:

  1. ADDITIONAL_BUILD_PROPERTIES:= \
  2. $(ADDITIONAL_BUILD_PROPERTIES)\
  3. $(PRODUCT_PROPERTY_OVERRIDES)

通过build.prop生成过程的分析,可知哪里可以修改原有的属性或加入自己定义属性,那就是2) buildinfo.sh; 3) system.prop; 4) ADDITIONAL_BUILD_PROPERTIES或PRODUCT_PROPERTY_OVERRIDES。

(4)属性(property)都有一个名称和值,他们都是字符串格式,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。

在系统初始化时,Android将分配一个共享内存区来存储的属性。这些是由“init”守护进程完成的,“init”守护进程将启动一个属性服务。任何客户端想获得属性信息,可以从共享内存直接读取。客户端应用程序可以调用libcutils中的API函数以GET/SET属性信息:

int property_get(const char *key, char *value, const char *default_value);

int property_set(const char *key, const char *value);

当启动属性服务时,将从以下文件中加载默认属性:

/default.prop

/system/build.prop

/system/default.prop

/data/local.prop

属性将会以上述顺序加载,后加载的属性将覆盖原先的值。特别属性如果属性名称以“ro.”开头,那么这个属性被视为只读属性,比如ro.mediatek.version.release=ALPS.ICS2.MP.V1就是指示版本号,应用中用property_get("ro.mediatek.version.release", val, "unknown");即可用来获得版本信息;属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义,系统启动时init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。客户端应用程序可以轮询那个属性值,以确定结果。

参考原文:http://blog.csdn.net/thl789/article/details/7014300

参考原文:http://blog.csdn.net/xujianqun/article/details/6363318

最新文章

  1. RHEL6.6 PXE安装-基于VMWare WorkStation
  2. 日志——JSON的相关方法
  3. java解析xml文档(dom)
  4. bootstrap弹出层效果
  5. LINQ TO SQL 常用语法
  6. JSP路径出现故障
  7. LeetCode OJ 107. Binary Tree Level Order Traversal II
  8. Linux服务器下Java环境搭建
  9. service不死之身
  10. C语言的第0次作业
  11. 好程序员分享Javascript设计模式
  12. 对Android系统权限的认识
  13. poj2115(扩展欧基里德定理)
  14. node.js安装后出现环境变量错误找不到node
  15. 分布式系统CAP理论与CA选择
  16. Zabbix使用Omsa来监控Dell服务器的硬件状态
  17. vs中更改项目名称注意事项
  18. jmeter函数简介
  19. Android通讯录管理(获取联系人、通话记录、短信消息)
  20. python读取文件embedded null character是什么原因

热门文章

  1. 了解canvas
  2. iOS Multipart上传单张图片
  3. ural 1217. Unlucky Tickets
  4. 什么叫wipe,安卓用户如何去wipe?
  5. jQuery 1.4.4 中 function( window, undefined ) 写法原因
  6. CSS 居中方法集锦(*******************************)
  7. Programming in lua 环境
  8. 转:45 Useful JavaScript Tips, Tricks and Best Practices
  9. Python 得到Twitter所有用户friends和followers
  10. Python基础知识学习_Day1
  11. mxnet的训练过程——从python到C++
  12. ubuntu重启、关机命令
  13. 微信小程序基础之在微信上显示和体验小程序?
  14. MongoDB之整库备份还原单表collection备份还原
  15. Linux c 获取cpu使用率(2)
  16. Git基础(四) 查看已暂存和未暂存的修改
  17. Centos 7 KVM安装win10
  18. JavaEE Web 开发 链接 mysql 出现 Class.not found的错误
  19. 高能天气——团队Scrum冲刺阶段-Day 1-领航
  20. vNetwork Standard Switch(vSS)和vNetwork Distributed Switch(vDS)的区别