MTK平台,自定义编译开关

在Android里有时候经常会用到一些开关,来控制需要编译的功能模块。在ProjectConfig.mk文件中可以定义这样的宏变量(宏的值只有yes和no),并在*.c/h/mk/java等文件中获取该宏的值来判断需要编译特定的模块。

ProjectConfig.mk中定义:
TEST_SUPPORT = yes

但是这样定义在源文件是找不到TEST_SUPPORT的,所以要加入对应的属性。


1.AUTO_ADD_GLOBAL_DEFINE_BY_NAME

只有定义和没有定义之分,并不能传值,比如test.c中:

#ifdef TEST_SUPPORT
......
#endif
注意:如果添加的宏的值为no/none/false(无论大小写)则该宏不会被定义,不会添加进系统;如果值为yes,则会被定义。

2.AUTO_ADD_GLOBAL_DEFINE_BY_VALUE:
同上,但是差别在于这样可以将宏的值传给源文件,比如定义了:
TEST_TP = CTP#RTP or CTP
......
#elif RTP
......
#endif


3.AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE:

它与AUTO_ADD_GLOBAL_DEFINE_BY_NAME差别在于AUTO_ADD_GLOBAL_DEFINE_BY_NAME只有定义和没有定义之分,而AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE还可以知道它的值是多少(注意这个值是字符串),比如:
TEST_NUM = 1#1 or 2
那么加入AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE之后:
在源文件中就可以这样用(比如aa.c):
if (!strcmp(TEST_NUM, "1"))
{
}
else
{
}


另外,要在java环境下使用ProjectConfig.mk定义的宏不是简单的添加到
AUTO_ADD_GLOBAL_DEFINE_BY_NAME、AUTO_ADD_GLOBAL_DEFINE_BY_NAME和AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE宏中。
而是在java环境下定义一个类FeatureOption,然后java代码就可以通过访问这个类来确认哪些feature是否打开

在类FeatureOption中添加自己的feature option,添加方法如下:
1. 首先需要在$project目录下的ProjectConfig.mk定义一个宏,这个宏的值只能为yes和no。
比如:

XXX_SUPPORT = yes
#this is XXX feature
注意:注释请另外加一行放在下面,请不要这样'XXX_SUPPORT = yes#this is XXX feature' (因为这样有可能导致脚本模式匹配错误!)
2. 既然已经定义了宏,然后将该宏添加到mediatek\build\tools\javaoption.pm,这只文件放的所有宏都是会添加到FeatureOption这个类中
3. 最后脚本会生成:
GB/ICS: mediatek/source/frameworks/featureoption/java/com/mediatek/FeatureOption.java
JB: mediatek/frameworks/common/src/com/mediatek/common/freatureoption/FeatureOption.java
KK: out/target/product/$proj/obj/JAVA_LIBRARIES/mediatek-common_intermediates/FeatureOption.java
这样就可以在java环境下使用FeatureOption类了

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值