如何在java环境下使用feature option(如何添加FeatureOption.xxx)

本文介绍如何在Java环境中使用ProjectConfig.mk定义的宏,并通过创建FeatureOption类来管理这些宏,实现特性开关的功能。

[Description]

要在java环境下使用ProjectConfig.mk定义的宏不是简单的添加到

AUTO_ADD_GLOBAL_DEFINE_BY_NAMEAUTO_ADD_GLOBAL_DEFINE_BY_NAMEAUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE宏中。

而是在java环境下定义一个类FeatureOption,然后java代码就可以通过访问这个类来确认哪些feature是否打开

 

[Keyword]

FeatureOption

 

[Solution]

那么如何在类FeatureOption中添加自己的featureoption呢?

添加方法如下:

.   首先需要在$prject目录下的ProjectConfig.mk定义一个宏,这个宏的值只能为yesno

比如:

XXX_SUPPORT= yes

#this is XXX feature

注意:注释请另外加一行放在下面,请不要这样’XXX_SUPPORT = yes#this is XXX feature’(因为这样有可能导致脚本模式匹配错误!)

.   既然已经定义了宏,然后将该宏添加到mediatek\build\tools\javaoption.pm,这只文件放的所有宏都是会添加到FeatureOption这个类中

.   最后脚本会生成:mediatek/source/frameworks/featureoption/java/com/mediatek/FeatureOption.java,这样就可以在java环境下使用FeatureOption类了
MTK(MediaTek)平台在构建过程中确实具备根据 `ProjectConfig.mk` 自动生成 `FeatureOption.h` 和 `FeatureOption.java` 的机制。这一机制主要用于将项目配置中的宏定义同步到 C/C++ 和 Java 层,以便在不同模块中根据宏定义启用或禁用特定功能。 ### 自动生成机制概述 在 MTK 的编译系统中,`ProjectConfig.mk` 中定义的宏开关会通过编译脚本被提取,并用于生成 `FeatureOption.h` 和 `FeatureOption.java` 文件。这些文件通常位于 `out` 目录下的对应路径中,例如: - `out/target/product/<project>/obj/INCLUDES/FeatureOption.h` - `out/target/product/<project>/obj/JAVA_LIBRARIES/featurelib_intermediates/FeatureOption.java` 生成机制依赖于 `build/core` 和 `mediatek/build` 中的编译脚本,主要涉及 `config/` 和 `tools/` 路径下的 Python 或 Shell 脚本。 ### 生成逻辑路径与实现方式 1. **FeatureOption.h 的生成路径**: - 生成脚本通常位于 `build/core/` 或 `mediatek/build/tools/` 目录下。 - 宏定义由 `ProjectConfig.mk` 提取后,通过脚本生成 `FeatureOption.h`。 - 具体实现逻辑可在 `build/core/base_rules.mk` 中找到对 `FeatureOption.h` 的生成规则定义。 - 脚本路径示例:`mediatek/build/tools/generate_featureoption.py` 或 `build/tools/generate_feature_headers.py`。 2. **FeatureOption.java 的生成路径**: - Java 层的 `FeatureOption.java` 通常由 `FeatureOption.xml` 文件通过 AAPT(Android Asset Packaging Tool)处理生成。 - `FeatureOption.xml` 的生成同样依赖于 `ProjectConfig.mk` 中的宏定义。 - 生成规则可在 `mediatek/config/feature_config.mk` 或 `build/core/java_library.mk` 中找到。 - 脚本路径示例:`mediatek/build/tools/generate_feature_java.py`。 3. **关键 Makefile 规则**: 在 `build/core/base_rules.mk` 和 `mediatek/build/Makefile` 中,通常包含如下规则: ```makefile $(intermediates)/FeatureOption.h: $(PROJECT_CONFIG) $(MAKEFILE_LIST) $(hide) python $(MTK_SCRIPTS)/generate_featureoption.py --header $@ $(PROJECT_CONFIG_FLAGS) ``` ```makefile $(java_intermediates)/FeatureOption.java: $(PROJECT_CONFIG) $(MAKEFILE_LIST) $(hide) python $(MTK_SCRIPTS)/generate_featureoption.py --java $@ $(PROJECT_CONFIG_FLAGS) ``` 上述规则表明,`FeatureOption.h` 和 `FeatureOption.java` 是根据 `ProjectConfig.mk` 中的配置动态生成的。 4. **FeatureOption.xml 的生成逻辑**: - `FeatureOption.xml` 通常位于 `out/target/product/<project>/obj/PACKAGING/FeatureOption.xml`。 - 此文件由 `mediatek/build/tools/generate_feature_xml.py` 生成,用于 Android Framework 层的 Feature 检测。 - 生成规则在 `mediatek/build/Makefile` 中定义。 ### 总结 MTK 确实具备根据 `ProjectConfig.mk` 自动生成 `FeatureOption.h` 和 `FeatureOption.java` 的机制,其核心实现依赖于 Python 脚本与 Makefile 规则。具体代码逻辑路径包括: - `build/core/base_rules.mk`(定义生成规则) - `mediatek/build/tools/generate_featureoption.py`(生成 C/C++ 和 Java 头文件) - `mediatek/build/tools/generate_feature_xml.py`(生成 XML 配置) 通过这些机制,MTK 实现了从项目配置到代码层的宏定义同步,确保功能开关的统一性与可维护性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值