• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

【Makefile】宏控

互联网 diligentman 3小时前 3次浏览

【写在前面】
网上资料梳理,侵删烦请联系。或有表达错误,欢迎指出纠正。
【参考引用】
https://www.cnblogs.com/xhf-wonder/p/7458188.html

宏控

    • 基础概念
    • 宏控命名
  • SystemProperties
    • 命名规则
    • 使用规则
    • 宏控与systemProperty取名对应
  • 宏控示例

基础概念

  • 是什么
    在make文件中使用,相当于功能开关,是控制代码执行的条件。
  • 为何用
    需要暂时去掉这个功能,一个宏控就能解决,而不是一个文件一个文件删掉添加的代码;
    在不同项目配置不同的值。
  • 如何用
    AOSP,Android Open Source Project
    AOSP系统中:
    ①mk文件中显式使用的宏控;如MTK_MULTISIM_RINGTONE_SUPPORT
    ②代码中起控制作用的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 其他

使用规则

①如果在定义时property被多次赋值,最终起效果的是第一个。
②common.mk中定义的systemProperty最终会输入到system/build.prop文件。
③systemProperty有int、long、boolean、string四种类型。使用时需要引包android.os.SystemProperties。具体api参考文件alpsframeworksbasecorejavaandroidosSystemProperties.java
④最好不要在循环中使用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)在哪里定义宏控(包含但不仅限于)
开发增加宏控,一般在下列文件①中增加(都加在该文件,方便平台移植):
①alpsbirddevicecommon.mk

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

(2)在哪里打开宏控
在项目的mak中添加宏控:
alpsbirdmake[proj][proj] .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宏控加到 alpsouttargetproduct[proj]systembuild.prop,打包system.img,重下软件验证。
【注1】在脚本文件中定义宏BIRD_PROXIMITY_CALIBRATION ,同时绑定与ro.bdfun.psensor_calibrate 的关系
【注2】mak文件开宏,开发人员一般不用去上传,由SPL管理。


程序员灯塔
转载请注明原文链接:【Makefile】宏控
喜欢 (0)