1# 特性 2### 特性配置规则 3 4下面介绍feature的声明、定义以及使用方法。 5 6- feature的声明 7 8 在部件的bundle.json文件中通过feature_list来声明部件的feature列表,每个feature都必须以"**{部件名}**"开头。示例如下: 9 10 ``` 11 { 12 "name": "@ohos/xxx", 13 "component": { 14 "name": "partName", 15 "subsystem": "subsystemName", 16 "features": [ 17 "{partName}_feature_A" 18 ] 19 } 20 } 21 ``` 22 23 features中可以为部件声明多个feature。 24 25- feature的定义 26 27 在部件内可通过以下方式定义feature的默认值: 28 29 ``` 30 declare_args() { 31 {partName}_feature_A = true 32 } 33 ``` 34 35 该值是此部件的默认值,产品可以在部件列表中重载该feature的值。 36 37 feature需给部件内多个模块使用时,建议把feature定义在部件的全局gni文件中,各个模块的BUILD.gn中import该gni文件。 38 39- feature的使用 40 41 BUILD.gn文件中可通过以下方式进行根据feature决定部分代码或模块参与编译: 42 43 ``` 44 if ({partName}_feature_A) { 45 sources += [ "xxx.c" ] 46 } 47 48 # 某个特性引入的依赖,需要通过该feature进行隔离 49 if ({partName}_feature_A) { 50 deps += [ "xxx" ] 51 external_deps += [ "xxx" ] 52 } 53 54 # bundle.json中不支持if判断,如果bundle.json中包含的sub_component需要被裁减,可以定义group进行裁减判断 55 group("testGroup") { 56 deps = [] 57 if ({partName}_feature_A) { 58 deps += [ "xxx" ] 59 } 60 } 61 ``` 62 63 也可以通过以下方式为模块定义代码宏进行代码级差异化配置: 64 65 ``` 66 if ({partName}_feature_A) { 67 defines += ["FEATUREA_DEFINE"] 68 } 69 ``` 70 71