2013年12月18日 星期三

[Coding] Android Property System中的build.prop的生成過程

在上篇Android Property System當中,我們介紹了Android Property System,並且也說明了來源有:
/default.prop、/system/build.prop、/system/default.prop以及/data/local.prop。

其中比較重要的主要是build.prop,大部分新增也都是新增在此。因此,本篇將會介紹build.prop的生成過程。

Android的build.prop文件是在Android編譯時間收集的各種property(包括: LCD density/語言/編譯時間...等),編譯完成之後,文件生成在out/target/product//system/目錄下。在Android運行時候可以則可以通過上篇Android Property System所描述的方法來讀取/設定Property。

build.prop的生成是由make系統解析build/core/Makefile完成,步驟如下:
1)    Makefile中首先定義各種變量,這在下一步執行時會用到。比如:
...  
PRODUCT_DEFAULT_LANGUAGE="$(calldefault-locale-language,$(PRODUCT_LOCALES))" \  
PRODUCT_DEFAULT_REGION="$(calldefault-locale-region,$(PRODUCT_LOCALES))" \  
...  

2)    Makefile中調用build/tools/buildinfo.sh,並輸出到build.prop
buildinfo.sh很簡單,只是echo一些屬性,比如:
...  
echo"ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"  
echo"ro.product.locale.region=$PRODUCT_DEFAULT_REGION"  
...  
而,ro.product.locale.language / ro.product.locale.region就是些Property,等號後面是Value。 

3) Makefile中直接把$(TARGET_DEVICE_DIR)/system.prop的內容加到build.prop中。 

4) 收集ADDITIONAL_BUILD_PROPERTIES中的屬性,加到build.prop中。 ADDITIONAL_BUILD_PROPERTIES又會收集PRODUCT_PROPERTY_OVERRIDES中定義的屬性
ADDITIONAL_BUILD_PROPERTIES:= \  
        $(ADDITIONAL_BUILD_PROPERTIES)\  
        $(PRODUCT_PROPERTY_OVERRIDES)  
通過以上build.prop生成過程的分析,就可以知道哪可以修改原有的Property或加入自己定義的Property,那就是 
2) buildinfo.sh; 
3) system.prop;  
4) ADDITIONAL_BUILD_PROPERTIES或PRODUCT_PROPERTY_OVERRIDES。 

不過似乎大家都比較建議改在system.propPRODUCT_PROPERTY_OVERRIDES,這將對應到個別Platform或是Product的修改。
張貼留言