Makefile 宏控

400 阅读3分钟

参考链接:

bbs.huaweicloud.com/blogs/27879…

www.cnblogs.com/xhf-wonder/…

基础概念

  • 是什么

    在make 文件中使用,相当于功能开关,是控制代码执行的条件

  • 为什么使用

    需要暂时去掉这个功能,一个宏控就能解决,而不是一个文件一个文件的删掉添加的代码;在不同项目中配置不同的值。

  • 怎么使用

    AOSP : Android Open Source Project

    AOSP系统中:

    1. mk文件中显示使用的宏控: 如MTK_MULTISIM_RINGGTONE_SUPPORT

    2. 代码中起控制作用的 system property . 如 ro.mtk_multisim_ringtone控制的是同一个功能。

    宏控一般与 system property 结合使用

    宏控可以用在 Android.mk 中

宏控命名

① 能正确反映功能含义,要求可读性强 ,避免歧义。 铃声:RING/RINGTONE 解锁/锁屏声音:UNLOCK_SOUND/LOCK_SOUND 来电:INCALL 拨号:DIALER 短信:SMS 彩信/信息:MMS 音量加/减:VOLUME_UP/DOWN 输入法:IME 灭屏:SCREEN_OFF/SCR_OFF 亮屏:TURN_ON_SCREEN 状态栏:STATUS_BAR 近距:PROXIMITY/PSENSOR

② 针对默认开启/关闭,或者移除菜单等功能,宏控命名时要体现出来 SUPPORTED ENABLE/DISABLE REMOVE SHOW / HIDE_MENU DEFAULT_VALUE(def_val) DEFAULT_ON(def_on) DEFAULT_OFF(def_off)

③ 宏控的取值除了yes/no,也可以定义为字符串或数字,对应到SystemProperty的四种取值类型(int、long、boolean、string)。

SystemProperties 命名规则

① name :字符长度最多31。value :字符长度最多91。 ② 可以使用数字、字母、中划线”-“、下划线”_”、点”.” ③ 命名时慎用点“.”。比如命名ro.bird.timeout会比ro.bird_timeout占用更多内存。 ④ bird内部SystemProperties分类: ro.bdsys.xxx_xxx_xxx 系统功能相关的 ro.bdui.xxx_xxx_xxx UI改进相关的 ,新ui ro.bdfun.xxx_xxx_xxx 独立功能,例如tpwake,tpproximity, ro.bdmisc.xxx_xxx_xxx 其他

使用规则

  1. 如果在定义时 property 被多次赋值,最终起效果的是第一个
  2. common.mk 中定义的 systemProperty 最终会输入到 system/build.prop 文件
  3. systemProperty 有 int、boolean、string四种类型。使用时需要引包android.os.SystemProperties。具体api参考文件alps\frameworks\base\core\java\android\os\SystemProperties.java
  4. 最好不要在循环中使用SystemProperties.getxxx()方法。

宏控与systemProperty取名对应

① 宏控和property取名一样。 宏名一律大写,property一律小写,大小写对应: BIRD_DOOV_SOUND 对应 ro.bdfun.doov_sound

② 如果宏控名字太长,改成小写后超过31个字符,property可以适当采用缩写: BIRD_MUSIC_WIDGET_PREVIOUS_BUTTON 对应 ro.bdfun.music_widget_prev_btn

宏控示例

功能:近距校准 宏控:

BIRD_PROXIMITY_CALIBRATION=yes/no(表示取值有yes和no两种) property:ro.bdfun.psensor_calibrate=true/false

(1)在哪里定义宏控(包含但不仅限于) 开发增加宏控,一般在下列文件①中增加(都加在该文件,方便平台移植):

①alps\bird\device\common.mk

ifeq ((strip(strip (BIRD_PROXIMITY_CALIBRATION)),yes) 【注1】 PRODUCT_PACKAGES += libproximityjni PRODUCT_PROPERTY_OVERRIDES += ro.bdfun.psensor_calibrate = true endif 如果找不到文件①,可以到origin的宏控文件里查一下: alps\device\mediatek\mtXXXX\device.mk alps\device\bird[platform]\device.mk 会有这样的引用:# bird add include bird/device/common.mk

(2)在哪里打开宏控 在项目的mak中添加宏控: alps\bird\makeproj .mak BIRD_PROXIMITY_CALIBRATION=yes 【注4】

(3)快速验证 可以将property宏控加到system/build.prop中,重启手机快速打开功能。

adb pull system/build.prop . adb push bulid.prop system/ adb shell chmod 644 system/build.prop

对于user软件,可以将property宏控加到 alps\out\target\product[proj]\system\build.prop,打包system.img,重下软件验证。

【注1】在脚本文件中定义宏BIRD_PROXIMITY_CALIBRATION ,同时绑定与ro.bdfun.psensor_calibrate 的关系 【注2】mak文件开宏,开发人员一般不用去上传,由SPL管理。

\