2011年11月7日 星期一

Edit default android property value

更改預設property value.

方法一:
在makefile中加入"ADDITIONAL_BUILD_PROPERTIES"

ex:
in product_name.mk (device/product_name/product_name.mk)

...
ADDITIONAL_BUILD_PROPERTIES += \
    ro.debuggable=1
...
---------------------------------------------------------------

in my_product_name.mk (不同的product)
...
ADDITIONAL_DEFAULT_PROPERTIES := \
     ro.debuggable=1
...


side effect:
因為我在進行建立不同的product tree,可以有不同的product在同一份code base裡,
但我在實驗中發現,利用ADDITIONAL_BUILD_PROPERTIES, ADDITIONAL_DEFAULT_PROPERTIES,
會影響到全部的product.


所以加個判斷:

ifeq ($(TARGET_PRODUCT),my_produce_name)
ADDITIONAL_DEFAULT_PROPERTIES += \
        ro.allow.mock.location=1
endif


PS. ADDITIONAL_BUILD_PROPERTIES是指增加property到out/target/product/product_name/system/build.prop,
ADDITIONAL_DEFAULT_PROPERTIES是增加property到out/target/product/product_name/root/default.prop.

方法二
修改 build/core/Makefile
TARGET_PRODUCT_DIR=device/$(TARGET_PRODUCT)
$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
...
if [ -f $(TARGET_PRODUCT_DIR)/system.prop ]; then \
                        cat $(TARGET_PRODUCT_DIR)/system.prop >> $@; \
                else \
                        cat $(TARGET_DEVICE_DIR)/system.prop >> $@; \
                fi
...
原本的寫法,build.prop是去cat device/product_name/system.prop,還有一些default值.
我是把它改成先以current product path下判斷是否有system.prop,如果沒有就抓device path下的 system.prop

PS. $(INSTALLED_BUILD_PROP_TARGET): 就是out/target/product/product_name/system/build.prop

方法三:
在makefile 裡加:

PRODUCT_PROPERTY_OVERRIDES += \
        persist.service.adb.enable=1

ifeq ($(TARGET_PRODUCT),my_product_name)
ADDITIONAL_DEFAULT_PROPERTIES += \
        ro.allow.mock.location=1
endif


這樣就只會生效current product.