PRODUCT_CHARACTERISTICS 详解

​在**/device/qcom/****/**.mk中增加PRODUCT_CHARACTERISTICS =default 不会影响其他功能.一个重要原因是该属性最终默认值即为default.



1.影响范围


首先在**/device/qcom/**/**.mk中加入PRODUCT_CHARACTERISTICS =default 后影响的范围是:


MIUI_TARGET_DEVICE_DIR := **/device/qcom/**

同时也会覆盖:

include **/device/common/common.mk
$(call inherit-product, device/qcom/**/**.mk)

其中device/qcom/**/**.mk​的影响范围是:


DEVICE_PACKAGE_OVERLAYS := device/qcom/**/overlay (该路径下没有与PRODUCT_CHARACTERISTICS相关的逻辑).
$(call inherit-product, device/qcom/common/common.mk)
common.mk中对该属性会进行赋值,但结果没变.
 
   
 
   


​2.分析PRODUCT_CHARACTERISTICS的作用机制

(1)在/v6-kk-**-dev/**/device/common/common.mk中会对PRODUCT_CHARACTERISTICS进行赋值.只有在机型为can**, canc**_ct, vir**,virg**_ct,ke**o​时该属性才会被赋值为nosdcard.

      ifneq (,$(filter $(TARGET_PRODUCT),can**, canc**_ct, vir**,virg**_ct,ke**o​))
      PRODUCT_CHARACTERISTICS := nosdcard
 
   
(2)之后在/v6-kk-**-dev/build/core/product_config.mk文件中根据PRODUCT_CHARACTERISTICS的属性对TARGET_AAPT_CHARACTERISTICS赋值,
可以看到如果PRODUCT_CHARACTERISTICS​为空,则TARGET_AAPT_CHARACTERISTICS为default.
     
       ifeq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_CHARACTERISTICS),)
     TARGET_AAPT_CHARACTERISTICS := default
     else
     TARGET_AAPT_CHARACTERISTICS := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_CHARACTERISTICS))
     ​ endif
(3)/v6-kk-**-dev/build/core/Makefile会执行脚本/v6-kk-**-dev/build/tools/buildinfo.sh​,
将TARGET_AAPT_CHARACTERISTICS的值赋予ro.build.characteristics,而这个属性在Android编译完成后最终写入到/system目录下的build.prop文件
,运行时可通过property_get()[c/c++域] / SystemProperties_get*()[Java域]来读取:

echo "ro.build.characteristics=$TARGET_AAPT_CHARACTERISTICS"

ro.build.characteristics这个属性用途有:字符串中的product属性,判断是手机还是平板电脑的函数getDeviceType().

 
  

你可能感兴趣的:(PRODUCT_CHARACTERISTICS 详解)