• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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