# OpenHarmonyéƒ¨ä»¶è®¾è®¡å’Œå¼€å‘æŒ‡å— ## 基本概念 组件化ã€éƒ¨ä»¶åŒ–ã€æ¨¡å—化是指软件基于组件ã€éƒ¨ä»¶ã€æ¨¡å—解耦,实现å„个领域软件分而治之的软件设计方法。它们的关系如下:  ### 部件定义 OpenHarmonyå‚考机械装é…领域的零部件的概念将系统能力抽象为部件,通过拼装和é…置部件的方å¼å®šåˆ¶é€‚用于ä¸åŒè®¾å¤‡çš„æ“ä½œç³»ç»Ÿã€‚ **部件**:系统能力的基本å•元,以æºç ä¸ºåˆ’åˆ†ä¾æ®ï¼Œå…·æœ‰ç‹¬ç«‹çš„æ–‡ä»¶å’Œç›®å½•,在ä¸åŒè®¾å¤‡ä¸Šå¯ä»¥å®žä¾‹åŒ–ä¸ºå¯¹åº”çš„åº“æˆ–å¯æ‰§è¡Œæ–‡ä»¶ã€‚ éƒ¨ä»¶åŒ–çš„ç›®æ ‡æ˜¯å®žçŽ°ä¸€å¥—OSä»£ç æ”¯æŒå¤šç§äº§å“å½¢æ€ï¼Œè§£å†³åƒè¡Œç™¾ä¸šç¡¬ä»¶å’Œäº§å“碎片化问题,æé«˜è®¾å¤‡å¼€å‘的效率。  ## 部件设计 ### 划分原则 当开å‘一个新的功能时,应该新增部件还是模å—?如果是系统éžå¿…é€‰çš„åŠŸèƒ½ã€æœ‰å¯è£å‰ªçš„产å“åŒ–è¯‰æ±‚ï¼Œåˆ™éœ€ç‹¬ç«‹ä¸ºéƒ¨ä»¶ã€‚å¹¶ä¸”éœ€è¦æ»¡è¶³å¦‚ä¸‹è¦æ±‚: - 具备独立的代ç 目录,å¯ç‹¬ç«‹ç¼–è¯‘å‡ºåº“æˆ–å¯æ‰§è¡Œæ–‡ä»¶ã€‚ - å°åž‹å’Œæ ‡å‡†ç³»ç»Ÿä¸å…·å¤‡ç‹¬ç«‹éƒ¨ç½²çš„能力,éžå¿…选的功能被è£å‰ªåŽä¸ä¼šå¯¼è‡´ç³»ç»Ÿå¼‚常。 - å¯ç‹¬ç«‹æµ‹è¯•和验è¯ã€‚ ### 规则和建议 部件的设计应éµå¾ªå¦‚下规则和建议: **规则1.1** éƒ¨ä»¶åº”å½“å®žçŽ°ç‹¬ç«‹è‡ªåˆ¶åŽŸåˆ™ï¼Œä¿æŒéƒ¨ä»¶æœ¬èº«çš„解耦和独立。 **规则1.2** ç¦æ¢ç³»ç»Ÿé€šç”¨çš„部件ä¾èµ–特定的芯片ã€å¼€å‘æ¿æˆ–产å“å½¢æ€ï¼Œé©±åŠ¨å’Œå†…æ ¸ç›¸å…³çš„éƒ¨ä»¶ä¾‹å¤–ã€‚ **规则1.3** 最å°ç³»ç»Ÿéƒ¨ä»¶é›†ä¸çš„éƒ¨ä»¶ä¸ºå¿…é€‰éƒ¨ä»¶ï¼Œç¦æ¢ä¾èµ–最å°ç³»ç»Ÿä»¥å¤–çš„å¯é€‰éƒ¨ä»¶ã€‚ > 说明:最å°ç³»ç»Ÿå®šä¹‰ä»¥åŠå¯¹åº”的部件集åˆè¯·åœ¨[OpenHarmony产å“兼容性规范](https://www.openharmony.cn/certification/document/pcs)PCSç« èŠ‚ä¸‹æŒ‰ç‰ˆæœ¬æŸ¥è¯¢ã€‚ **规则1.4** 新增部件需è¦ç»è¿‡æž¶æž„师和本领域的设计人员评审。 **规则1.5** ç¦æ¢éƒ¨ä»¶é—´åå‘ä¾èµ–ã€å¾ªçޝä¾èµ–ï¼Œä¸‹å±‚éƒ¨ä»¶ç¦æ¢ä¾èµ–上层部件。 **规则1.6** 部件æä¾›çš„应用接å£åº”ä¿æŒç¨³å®šå’Œç‰ˆæœ¬å…¼å®¹æ€§ï¼Œæ ‡è¯†ä¸ºåºŸå¼ƒçš„æŽ¥å£é¡»æŒ‰è®¡åˆ’有节å¥çš„回收。 **规则1.7** 对于具有å¯é…ç½®ç‰¹æ€§çš„éƒ¨ä»¶ï¼Œç‰¹æ€§å¯æŒ‰éœ€é…ç½®ï¼Œç‰¹æ€§æœ‰æ— ä¸åº”导致部件对外æä¾›çš„æŽ¥å£å˜åŒ–。 **规则1.8** 部件英文命å规则:åè¯å½¢å¼ï¼Œéœ€ä½“现部件的功能,在系统内全局唯一,ä¸è¶…过63个有效英文å—符,使用å°å†™åŠ ä¸‹åˆ’çº¿çš„å†…æ ¸é£Žæ ¼å‘½å,例如:unix_like。 **规则1.9** éƒ¨ä»¶ä¸æ–‡å‘½å规则:åè¯å½¢å¼ï¼Œéœ€ä½“现部件的功能,ä¸è¶…过16ä¸ªä¸æ–‡å—符,ä¸å»ºè®®ä¸è‹±æ–‡æ··åˆã€‚ **规则1.10** 部件仓命å规则:部件仓å使用英文,命å规则:<å系统>_<部件>,例如:文件管ç†å系统的å˜å‚¨æœåŠ¡éƒ¨ä»¶çš„ä»“å为“filemanagement_storage_serviceâ€ã€‚仓忀»é•¿åº¦ä¸è¶…过100个å—符。 > 说明: > > 1)部件和仓原则上是一一对应关系,特殊情况下多个部件å¯ä»¥å…±äº«ä¸€ä¸ªä»“,但部件的目录必须独立。 > > 2)第三方开æºçš„部件åä¿æŒç¬¬ä¸‰æ–¹åŽŸå§‹çš„å‘½å,仓å剿·»åŠ â€œthird_partyâ€å‰ç¼€ã€‚第三方开æºéƒ¨ä»¶ç»Ÿä¸€æ”¾åˆ°third_party目录下。 > > 3)仓å和路径åä¸çš„å系统åå‡ä¸å¸¦ä¸‹åˆ’线。 **规则1.11** 部件æºç 路径规则:<领域>/<å系统>/<部件>, 例如:foundation/filemanagement/storage_service。 **规则1.12** 部件目录结构规则如下: ```xml ├── interfaces # æŽ¥å£ â”‚ ├── kits # 应用接å£ï¼Œå¯é€‰ │ │ ├── js # JS接å£ï¼Œå¯é€‰ │ │ └── native # C/C++接å£ï¼Œå¯é€‰ │ └── inner_api # ç³»ç»Ÿå†…éƒ¨ä»¶é—´æŽ¥å£ â”œâ”€â”€ frameworks # éƒ¨ä»¶æ— ç‹¬ç«‹è¿›ç¨‹çš„å®žçŽ°ï¼Œå¯é€‰ │ ├── native # C/C++实现,å¯é€‰ │ └── js # JS API的实现,å¯é€‰ │ ├── napi # napi代ç 实现,å¯é€‰ │ ├── builtin # 仅用于LiteOS-M,å¯é€‰ │ └── plugin # ArkUI特有,å¯é€‰ ├── services # 独立进程的实现,å¯é€‰ ├── test # 测试代ç ,必选 ├── BUILD.gn # 编译入å£ï¼Œå¿…选 └── bundle.json # 部件æè¿°æ–‡ä»¶ï¼Œå¿…选 ``` **建议1.1** 部件应支æŒè‡ªåŠ¨åŒ–æž„å»ºå’ŒéªŒè¯çš„能力。 ### 系统能力(SysCap) SysCap(全称SystemCapability),å³ç³»ç»Ÿèƒ½åŠ›ï¼Œç”±éƒ¨ä»¶æä¾›ï¼Œæ¯ä¸ªSysCap绑定一个或多个应用API。SysCap是设备开å‘和应用开å‘的桥æ¢ï¼Œè®¾å¤‡éƒ¨ä»¶è£…é…的差异体现为SysCap差异,å³ä¸åŒè®¾å¤‡ä¸Šå¯ä½¿ç”¨API的范围也ä¸åŒã€‚完整的SysCap使用场景如下:  1ã€åº”用开å‘è€…ä½¿ç”¨å½’ä¸€åŒ–çš„ã€æ”¯æŒå¤šè®¾å¤‡çš„SDK进行应用开å‘,其ä¸åŒ…å«äº†å…¨é‡çš„SysCap集åˆï¼ˆåŒ…括å¯é€‰å’Œå¿…选)以åŠå¯¹åº”çš„API。 2ã€è®¾å¤‡å¼€å‘è€…å¯æŒ‰éœ€è£…é…å¯é€‰éƒ¨ä»¶ã€æ·»åŠ ç§æœ‰çš„部件形æˆç›®æ ‡è®¾å¤‡çš„SysCap集åˆã€‚ 3ã€è£…é…完æˆåŽçš„SysCap集åˆéšç¼–译和打包自动写入设备。 4ã€PCID(Product Compatibility ID),å³è®¾å¤‡å…¼å®¹æ€§æ ‡è¯†ã€‚它设备编译时自动生æˆï¼Œåœ¨å¼€å‘特定设备的应用时å¯å¯¼å…¥IDE,便于应用在开å‘阶段获å–设备的SysCap集åˆã€‚ 5ã€RPCID(Required Product Compatibility ID),å³è¦æ±‚的产å“å…¼å®¹æ€§æ ‡è¯†ã€‚å®ƒåœ¨åº”ç”¨ç¼–è¯‘æ‰“åŒ…æ—¶è‡ªåŠ¨ç”Ÿæˆï¼Œä¸ºåº”ç”¨è¦æ±‚çš„SysCap集åˆã€‚ 6ã€åº”用市场分å‘应用时,将应用的RPCID与设备的PCID进行匹é…,如果设备的SysCap集åˆèƒ½è¦†ç›–åº”ç”¨è¦æ±‚çš„SysCap则分å‘。 7ã€åœ¨åº”用æµè½¬åœºæ™¯ä¸‹ï¼ŒSysCapå°†åœ¨è®¾å¤‡é—´åŒæ¥ã€‚ 8ã€åœ¨å…å®‰è£…åœºæ™¯ä¸‹ï¼Œäº‘ä¾§å¯æŸ¥è¯¢è®¾å¤‡çš„SysCap。 #### 应用开å‘者如何使用SysCap? 应用开å‘者å¯ä»¥é€šè¿‡CanIUse接å£åœ¨è¿è¡Œæ—¶æŸ¥è¯¢è®¾å¤‡å…·å¤‡æŸä¸ªSysCap,从而ä¿è¯åº”用在ä¸åŒè®¾å¤‡ä¸Šçš„兼容性。示例代ç 如下: ```javascript import geolocation from '@ohos.geolocation' const isLocationAvailable = canIUse('SystemCapability.Location.Location'); if (isLocationAvailable) { geolocation.getCurrentLocation((location) => { console.log(location.latitude, location.longitue); }); } else { console.log('Location not by this device.') } ``` æ¤å¤–,SDKä¸å®šä¹‰äº†å…¸åž‹è®¾å¤‡ç±»åž‹åŒ…å«çš„SysCap集åˆï¼Œåº”ç”¨å¼€å‘æ—¶é€‰å®šè®¾å¤‡ç±»åž‹çš„æƒ…况下,如果API调用了超出设备类型必选SysCap对应的API范围,IDE会æç¤ºAPIä¸è¢«è¯¥è®¾å¤‡æ”¯æŒï¼Œå¯¼è‡´åº”用编译失败。 #### 设备开å‘者如何定义SysCap? 部件与SysCap为一对一关系,SysCap之间是æ£äº¤çš„,ä¸åŒçš„SysCapä¹‹é—´æ˜ å°„çš„APIæ— é‡å 。SysCapå‘½åæ ¼å¼ï¼šSystemCapability.分类.特性.å特性(å¯é€‰ï¼‰ï¼Œä¾‹å¦‚:SystemCapability.Media.Cameraå’ŒSystemCapability.Media.Camera.Front。å特性一般独立的部件实现,该部件ä¾èµ–基础特性对应的部件,须一起装é…到产å“ä¸ã€‚ 1ã€åœ¨éƒ¨ä»¶çš„bundle.jsonä¸å£°æ˜ŽSysCap,示例代ç 片段如下: ```json { ... "component": { "name": "camera", # 部件åç§° "syscap": [ "SystemCapability.Media.Camera" ] # 部件的Syscap }, ... } ``` 2ã€åœ¨å¯¹åº”çš„d.ts文件ä¸å£°æ˜ŽAPIçš„SysCap属性,完æˆAPI与SysCap的绑定,示例代ç 片段如下: ```js /** * @name camera * @syscap SystemCapability.Media.Camera * @ since 9 */ declare namespace camera { ... } ``` ### 部件评审 部件的新增ã€ä¿®æ”¹ï¼ˆåŠŸèƒ½å’ŒæŽ¥å£å˜åŒ–ï¼‰å’Œåˆ é™¤éœ€ç»æž¶æž„SIG(Special Interest Group)和[相关领域的SIG leader](https://gitee.com/openharmony/community/blob/master/sig/sigs_subsystem_list.md)评审,æµç¨‹å¦‚下: 1ã€å‡†å¤‡å¦‚下的部件属性列表: 表1. 部件属性评审表 | 部件属性 | 说明 | | ------------ | ------------------------------------------------------------ | | 英文åç§° | åè¯å½¢å¼ï¼Œéœ€ä½“现部件的功能,在系统内全局唯一,ä¸è¶…过63个有效英文å—符,使用å°å†™åŠ ä¸‹åˆ’çº¿çš„å†…æ ¸é£Žæ ¼å‘½å,例如:unix_like。 | | 䏿–‡åç§° | åè¯å½¢å¼ï¼Œéœ€ä½“现部件的功能,ä¸è¶…过16ä¸ªä¸æ–‡å—符,ä¸å»ºè®®ä¸è‹±æ–‡æ··åˆã€‚ | | å系统 | 部件归属的å系统。 | | 功能æè¿° | 一å¥è¯ç®€è¦æè¿°éƒ¨ä»¶åŠŸèƒ½ï¼Œ100å—以内。 | | å¯é…置特性 | 部件对外å¯é…置的特性。 | | SysCap | 系统能力,示例:SystemCapability.Media.Cameraã€SystemCapability.Media.Camera.Front | | 适用系统类型 | 部件适用的系统类型:å°åž‹ã€è½»é‡å’Œæ ‡å‡†ï¼Œå¯ä»¥åŒæ—¶æ”¯æŒå¤šç§ã€‚ | | æºç 目录 | 部件的æºç æ ¹ç›®å½•ã€‚ | | ROM | 部件设计的ROM基线值。 | | RAM | 部件设计的RAM基线值。 | | ä¾èµ– | 部件ä¾èµ–的其他部件和开æºè½¯ä»¶ã€‚ | 2ã€å‘邮件给架构SIG(dev@openharmony.io)å’Œ[相关领域的SIG leader](https://gitee.com/openharmony/community/blob/master/sig/sigs_subsystem_list.md)è¿›è¡Œé‚®ä»¶è¯„å®¡ï¼Œé‚®ä»¶æ ‡é¢˜ã€OpenHarmony部件新增/修改/åˆ é™¤è¯„å®¡ç”³è¯·ã€‘ï¼Œé‚®ä»¶æ£æ–‡ä¸æŒ‰éƒ¨ä»¶å®žé™…情况填写“表1.部件属性评审表" 。 > è¯´æ˜Žï¼šåˆ é™¤çš„éƒ¨ä»¶éœ€æä¾›éƒ¨ä»¶åœæ¢ç»´æŠ¤çš„è®¡åˆ’ã€‚åˆ é™¤å’Œå˜æ›´éƒ¨ä»¶è¦è°¨æ…Žï¼Œè¦è¯„估对å˜é‡ç‰ˆæœ¬çš„å½±å“。 3ã€è¯„审通过åŽï¼Œè¯·æŒ‰[SIG管ç†ç« 程](https://gitee.com/openharmony/community/tree/master/sig)新建部件仓和修改manifest,SIGåµåŒ–完æˆåŽåˆå…¥OpenHarmony组织代ç 主库。 ## å¼€å‘一个部件 部件评审通过åŽï¼Œéƒ¨ä»¶çš„åç§°ã€ä»“å’Œæºç 路径ç‰ä¿¡æ¯éƒ½å·²ç»ç¡®å®šã€‚å¼€å‘è€…å¯æŒ‰å¦‚下的æ¥éª¤è¿›è¡Œè¯¦ç»†çš„å¼€å‘: ### æ·»åŠ æè¿°æ–‡ä»¶ åœ¨å¼€å‘æ€ï¼Œé¦–先需è¦åœ¨éƒ¨ä»¶æ ¹ç›®å½•下创建一个bundle.jsonæè¿°æ–‡ä»¶ã€‚该文件ä¸åŒ…å«äº†éƒ¨ä»¶çš„åç§°ã€ç¼–è¯‘ã€æµ‹è¯•ã€SysCapã€ç‰¹æ€§å’Œç³»ç»Ÿå†…部件间接å£ç‰ä¿¡æ¯ï¼Œå—段的详细说明请è§[部件æè¿°](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-component-building-rules.md#%E6%8F%8F%E8%BF%B0%E6%96%87%E4%BB%B6)。示例如下: ```json { "name": "@ohos/my_component", "description": "my first component", "version": "4.0", "license": "Apache License 2.0", "publicAs": "code-segment", "segment": { "destPath": "my_domain/my_subsystem/my_component" }, "component": { "name": "my_component", "subsystem": "my_subsystem", "syscap": [ "SystemCapability.MySubsystem.MyComponent" ], "build": { "moudles": [ "//my_domain/my_subsystem/my_component/my_module:my_module" ], "inner_api": [ "name": "//my_domain/my_subsystem/my_component/my_module:inner_api", "header_base": "//my_domain/my_subsystem/my_component/interfaces/inner_api/my_module" ], "test": [ "//my_domain/my_subsystem/my_component:unit_test" ] } } } ``` inner_api是部件声明的系统内部件间的接å£ï¼Œæ˜¯éƒ¨ä»¶é—´ä¾èµ–的唯一途径。其他部件å¯é€šè¿‡externel_deps的方å¼ä¾èµ–,示例: ```c ohos_executable("other_component") { ... external_deps = [ "my_module:inner_api" ] } ``` ### æ·»åŠ ç¼–è¯‘è„šæœ¬ bundle.jsonä¸çš„build:moudles列表为部件编译入å£ï¼ŒåЍæ€åº“my_module模å—的编译脚本示例如下: ```c ohos_shared_library("my_module") { sources = [ ... ] ... external_deps = [ ... ] part_name = "my_component" subsystem_name = "my_subsystem" } ``` 部件编译脚本的编写须è¦éµä»Žéƒ¨ä»¶åŒ–ç›¸å…³çš„è¦æ±‚,请è§[部件编译构建规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-component-building-rules.md#%E9%83%A8%E4%BB%B6%E7%BC%96%E8%AF%91%E6%9E%84%E5%BB%BA%E8%A7%84%E8%8C%83)。 ### ç¼–è¯‘éªŒè¯ æ·»åŠ å®Œéƒ¨ä»¶çš„æè¿°æ–‡ä»¶å’Œç¼–译脚本åŽï¼Œå°±å¯ä»¥ç¼–å†™ä»£ç æºæ–‡ä»¶å¼€å‘部件的功能。è¦ä½¿èƒ½éƒ¨ä»¶çš„编译需è¦å°†éƒ¨ä»¶é…置到产å“é…置文件ä¸ï¼Œç¤ºä¾‹å¦‚下: ```json { "product_name": "my_product", "device_company": "my_device_company", "target_cpu": "arm", ... "subsystems": [ { "subsystem": "my_subsystem", "components": [ { "component": "my_component" } ] }, ... ] } ``` å•独编译部件的命令示例如下: ```c ./build.sh --product-name my_product --build-target my_domain/my_subsystem/my_component/my_module:my_module ``` å°†éƒ¨ä»¶çš„ç¼–è¯‘äº§ç‰©å’Œæµ‹è¯•ç”¨ä¾‹ä¸Šä¼ åˆ°è®¾å¤‡ä¸å³å¯éªŒè¯åŠŸèƒ½ã€‚ 当然,全é‡ç¼–译产å“也å¯ä»¥éªŒè¯æ–°å¢žçš„部件,更多详细使能部件编译的信æ¯è¯·è§[新增并编译部件](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-component.md#%E6%96%B0%E5%A2%9E%E5%B9%B6%E7%BC%96%E8%AF%91%E9%83%A8%E4%BB%B6)。 ## 装é…部件 产å“é…置文件vendor/{company}/{product}/config.jsonå¯ä»¥æŒ‰éƒ¨ä»¶å’Œç‰¹æ€§ç»´åº¦æŒ‰éœ€è£…é…ç›®æ ‡äº§å“å½¢æ€ã€‚它å¯ä»¥è®©è®¾å¤‡å¼€å‘è€…å¿«é€Ÿæž„å»ºç›®æ ‡äº§å“ï¼Œå¹¶ä¸”æ— éœ€ä¾µå…¥å¼ä¿®æ”¹OpenHarmonyæºä»£ç 。产å“é…置主è¦åŒ…括产å“åç§°ã€å¼€å‘æ¿ã€æ‰€é€‰å系统和部件ç‰ä¿¡æ¯ï¼Œç¤ºä¾‹å¦‚下: ```json { "product_name": "my_product", "device_company": "my_device_company", "target_cpu": "arm64", "subsystems": [ { "subsystem": "my_subsystem", "components": [ { "component": "my_component", "features": [] } ] }, ... ] } ``` 编译命令:`./build.sh --product-name my_product` 更多详细的产å“è£…é…æŒ‡å¯¼è¯·è§[部件化编译最佳实践](https://gitee.com/openharmony/build/blob/master/docs/%E9%83%A8%E4%BB%B6%E5%8C%96%E7%BC%96%E8%AF%91%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md#%E9%83%A8%E4%BB%B6%E5%8C%96%E7%BC%96%E8%AF%91%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5)。 ### éƒ¨ä»¶æœ‰æ— äº§å“坿Œ‰ç¡¬ä»¶æƒ…况和产å“功能需è¦é…置部件集åˆï¼Œæ¯”如在没有NFC的设备上ä¸é…ç½®NFC相关的部件。 > 说明: > > 1)OpenHarmony最å°ç³»ç»Ÿå®šä¹‰éƒ¨ä»¶é›†é»˜è®¤éœ€è¦é…置。 > > 2)部件以åŠä¾èµ–的部件需è¦ä¸€èµ·é…置,编译框架在构建时会检查ä¾èµ–部件是å¦è¢«é…置。 ### é…置特性 #### 编译时 部件bundle.jsonä¸çš„特性是部件对外声明的编译æ€é€‰é¡¹ï¼Œå®ƒå¯ä»¥æ˜¯å¸ƒå°”ã€æ•°å€¼æˆ–å—符串类型。产å“é…置文件ä¸çš„特性é…ç½®å€¼å¯æ”¹å†™éƒ¨ä»¶æä¾›çš„默认值。比如电æºç®¡ç†çš„å±ä¿ç‰¹æ€§é»˜è®¤æ˜¯å…³é—的,å¯ä»¥é€šè¿‡å¦‚下方å¼åœ¨äº§å“ä¸å¼€å¯ï¼š ```json { { "subsystem": "powermgr", "components": [ { "component": "powermgr", "features":[ "powermgr_screensaver_enable = true" ] } ] } } ``` 更详细的特性é…置说明请è§[编译构建特性é…ç½®](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-feature.md)。 #### è¿è¡Œæ—¶ å¯¹äºŽå¤æ‚的部件,å¯åœ¨è¿è¡Œæ—¶è¯»å–ç³»ç»Ÿå‚æ•°æˆ–者自定义的é…ç½®æ–‡ä»¶åŠ è½½ä¸åŒç‰¹æ€§ï¼Œä»Žè€Œæ»¡è¶³äº§å“的差异化诉求。è¿è¡Œæ—¶é…置的好处是部件åªéœ€è¦ç¼–译一次,ä¸åŒçš„产å“åœ¨è£…é…æ—¶ä¿®æ”¹ç³»ç»Ÿå‚数或é…置文件åŽå†åˆ¶ä½œé•œåƒå³å¯ã€‚ ### 继承 产å“é…置文件å¯é€šè¿‡inheritå—æ®µç»§æ‰¿éƒ¨ä»¶é›†åˆï¼Œå½“å‰OpenHarmonyæä¾›äº†ä¸¤ç±»ï¼šæœ€å°ç³»ç»Ÿéƒ¨ä»¶é›†å’Œå…¸åž‹äº§å“å½¢æ€é›†ï¼Œåˆ†åˆ«å®šä¹‰åœ¨productdefine/common/baseå’Œproductdefine/common/inherit目录下。继承最å°ç³»ç»Ÿéƒ¨ä»¶é›†çš„示例如下: ```json { "inherit": [ "productdefine/common/base/standard_system.json" ], } ``` 通过继承的方å¼å¯ä»¥ç®€åŒ–产å“é…置,æé«˜æ•ˆçŽ‡ã€‚