简要分析一下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

【转】Android属性之build.prop,及property_get/property_set的更多相关文章

  1. Android属性之build.prop生成过程分析

    Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/pro ...

  2. Android属性之build.prop生成过程分析(转载)

    转自: http://www.cnblogs.com/myitm/archive/2011/12/01/2271032.html 本文简要分析一下build.prop是如何生成的.Android的bu ...

  3. I.MX6 build.prop

    /************************************************************************ * I.MX6 build.prop * 说明: * ...

  4. Android的系统属性:build.propSystemProperties

    获取build.prop的键值信息: String sn = SystemProperties.get(SN_INFO); 其中key值为: public static final String SN ...

  5. Android属性(property)机制

    1. 属性简介 Android里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式.这些属性定义了Android系统的一些公共系统属性.比如: [dalvik.vm.dexo ...

  6. Android之build.prop属性详解

    注:本篇文章是基于MSD648项目(AndroidTV)的prop进行说明. Android版本:4.4.4 内核版本:3.10.86 1.生成build.prop build.prop的生成是由ma ...

  7. Android系统移植与调试之------->build.prop生成过程分析

    本文简要分析一下build.prop是如何生成的.Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编 ...

  8. Android——build.prop 解析【转】

    本文转载自:http://blog.csdn.net/lengyue1084/article/details/77637354 一.概念 在Android设备shell终端可以看到/system目录下 ...

  9. Android 属性property_get/property_set

    每个属性都有一个名称和值,他们都是字符串格式.属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换.属性是在整个系统中全局可见的.每个进程可以get/set属性. 在系统初始化时 ...

随机推荐

  1. PostgreSQL中,database,schema,table之间关系

    从逻辑上看,schema,table,都是位于database之下. 首先,在postgres数据库下建立表(相当于建立在public schema下): [pgsql@localhost bin]$ ...

  2. Spring+Ibatis集成开发实例

    首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) ...

  3. Cocos2D Study - Preparation & Installation

    ---------------------------------------------------------------------------------------------------- ...

  4. ios开发——实用技术篇Swift篇&录音

    录音 // MARK: - 录音 /*----- 录音 ------*/ var recorder:AVAudioRecorder? //录音器 var player:AVAudioPlayer? / ...

  5. JAVA static 作用

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  6. cocos2d粒子效果

    第9章 粒子效果 游戏开发者通常使用粒子系统来制作视觉特效.粒子系统能够发射大量细小的粒子并对他们进行渲染,而且效率要远高于渲染同样数目的精灵.粒子系统可以模拟下雨.火焰.雪.爆炸.蒸气拖尾以及其他多 ...

  7. Python基础教程之List对象 转

    Python基础教程之List对象 时间:2014-01-19    来源:服务器之家    投稿:root   1.PyListObject对象typedef struct {    PyObjec ...

  8. mysql的二级索引

    mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes). 以InnoDB来说,每个Inn ...

  9. WdatePicker时间控件联动选择

    $("#txtStartTime").bind("click focus", function () { var endtimeTf = $dp.$('txtE ...

  10. Python 替换字符串

    string类型是不可变的,因此不能采用直接赋值的方式.比如一个字符串 helloworld,想把o替换成z,那么只有先替换,然后再迭代. strings="helloworld" ...