# 部件 ### 部件é…置规则 部件的bundle.json放在部件æºç çš„æ ¹ç›®å½•ä¸‹ã€‚ä»¥æ³›sensorå系统的sensoræœåŠ¡éƒ¨ä»¶ä¸ºä¾‹ï¼Œéƒ¨ä»¶å±žæ€§å®šä¹‰æè¿°æ–‡ä»¶å—段说明如下: ```shell { "name": "@ohos/sensor_lite", # HPM部件英文åç§°ï¼Œæ ¼å¼"@组织/部件åç§°" "description": "Sensor services", # 部件功能一å¥è¯æè¿° "version": "3.1", # 版本å·ï¼Œç‰ˆæœ¬å·ä¸ŽOpenHarmony版本å·ä¸€è‡´ "license": "MIT", # 部件License "publishAs": "code-segment", # HPM包的å‘布方å¼ï¼Œå½“å‰é»˜è®¤éƒ½ä¸ºcode-segment "segment": { "destPath": "" }, # å‘布类型为code-segment时为必填项,定义å‘布类型code-segment的代ç 还原路径(æºç 路径) "dirs": {"base/sensors/sensor_lite"}, # HPMåŒ…çš„ç›®å½•ç»“æž„ï¼Œå—æ®µå¿…填内容å¯ä»¥ç•™ç©º "scripts": {}, # HPMåŒ…å®šä¹‰éœ€è¦æ‰§è¡Œçš„è„šæœ¬ï¼Œå—æ®µå¿…填,值éžå¿…å¡« "licensePath": "COPYING", "readmePath": { "en": "README.rst" }, "component": { # 部件属性 "name": "sensor_lite", # 部件åç§° "subsystem": "", # 部件所属å系统 "syscap": [], # 部件为应用æä¾›çš„系统能力 "features": [], # 部件对外的å¯é…置特性列表,一般与buildä¸çš„sub_component对应,å¯ä¾›äº§å“é…ç½® "adapted_system_type": [], # è½»é‡(mini)å°åž‹(small)å’Œæ ‡å‡†(standard),å¯ä»¥æ˜¯å¤šä¸ª "rom": "92KB", # 部件ROM值 "ram": "~200KB", # 部件RAM估值 "deps": { "components": [ # 部件ä¾èµ–的其他部件 "samgr_lite", "ipc_lite" ], "third_party": [ # 部件ä¾èµ–的三方开æºè½¯ä»¶ "bounds_checking_function" ], "hisysevent_config": [] # 部件HiSysEvent打点é…ç½®æ–‡ä»¶ç¼–è¯‘å…¥å£ } "build": { # 编译相关é…ç½® "sub_component": [ ""//base/sensors/sensor_lite/services:sensor_service"", # éƒ¨ä»¶ç¼–è¯‘å…¥å£ ], # 部件编译入å£ï¼Œæ¨¡å—在æ¤å¤„é…ç½® "inner_kits": [], # éƒ¨ä»¶é—´æŽ¥å£ "test": [] # éƒ¨ä»¶æµ‹è¯•ç”¨ä¾‹ç¼–è¯‘å…¥å£ } } } ``` > **注æ„**:lite上旧的部件在build/lite/components目录下对应å系统的json文件ä¸ï¼Œè·¯å¾„规则为:**{领域}/{å系统}/{部件}**ï¼Œéƒ¨ä»¶ç›®å½•æ ‘è§„åˆ™å¦‚ä¸‹ï¼š ```shell component ├── interfaces │ ├── innerkits # 系统内接å£ï¼Œéƒ¨ä»¶é—´ä½¿ç”¨ │ └── kits # 应用接å£ï¼Œåº”用开å‘者使用 ├── frameworks # framework实现 ├── services # service实现 └── BUILD.gn # 部件编译脚本 ``` 部件é…ç½®ä¸éœ€è¦é…置部件的åç§°ã€æºç 路径ã€åŠŸèƒ½ç®€ä»‹ã€æ˜¯å¦å¿…选ã€ç¼–è¯‘ç›®æ ‡ã€RAMã€ROMã€ç¼–译输出ã€å·²é€‚é…çš„å†…æ ¸ã€å¯é…置的特性和ä¾èµ–ç‰å±žæ€§å®šä¹‰ã€‚ > **注æ„**:部件é…ç½®ä¸HiSysEvent打点é…置文件使用说明,请å‚考文档[HiSysEvent打点é…ç½®](subsys-dfx-hisysevent-logging-config.md)。 新增部件时需è¦åœ¨å¯¹åº”å系统jsonæ–‡ä»¶ä¸æ·»åŠ ç›¸åº”çš„éƒ¨ä»¶å®šä¹‰ã€‚äº§å“æ‰€é…置的部件必须在æŸä¸ªå系统ä¸è¢«å®šä¹‰è¿‡ï¼Œå¦åˆ™ä¼šæ ¡éªŒå¤±è´¥ã€‚ ### 新增并编译部件 1. æ·»åŠ éƒ¨ä»¶ã€‚ æœ¬èŠ‚ä»¥æ·»åŠ ä¸€ä¸ªè‡ªå®šä¹‰çš„éƒ¨ä»¶ä¸ºä¾‹ï¼Œæè¿°å¦‚何编译部件,编译库ã€ç¼–è¯‘å¯æ‰§è¡Œæ–‡ä»¶ç‰ã€‚ 示例部件partAç”±feature1ã€feature2å’Œfeature3组æˆï¼Œfeature1çš„ç¼–è¯‘ç›®æ ‡ä¸ºä¸€ä¸ªåŠ¨æ€åº“,feature2çš„ç›®æ ‡ä¸ºä¸€ä¸ªå¯æ‰§è¡Œç¨‹åºï¼Œfeature3çš„ç›®æ ‡ä¸ºä¸€ä¸ªetcé…置文件。 示例部件partAçš„é…ç½®éœ€è¦æ·»åŠ åˆ°ä¸€ä¸ªå系统ä¸ï¼Œæœ¬æ¬¡ç¤ºä¾‹å°†æ·»åŠ åˆ°subsystem_exampleså系统ä¸ï¼ˆsubsystem_exampleså系统定义在test/examples/目录)。 示例部件partA的完整目录结构如下: ```shell test/examples/partA ├── feature1 │ ├── BUILD.gn │ ├── include │ │ └── helloworld1.h │ └── src │ └── helloworld1.cpp ├── feature2 │ ├── BUILD.gn │ ├── include │ │ └── helloworld2.h │ └── src │ └── helloworld2.cpp └── feature3 ├── BUILD.gn └── src └── config.conf ``` 示例1:编写动æ€åº“gn脚本test/examples/partA/feature1/BUILD.gn,示例如下: ```shell config("helloworld_lib_config") { include_dirs = [ "include" ] } ohos_shared_library("helloworld_lib") { sources = [ "include/helloworld1.h", "src/helloworld1.cpp", ] public_configs = [ ":helloworld_lib_config" ] part_name = "partA" } ``` 示例2ï¼šç¼–å†™å¯æ‰§è¡Œæ–‡ä»¶gn脚本test/examples/partA/feature2/BUILD.gn,示例如下: ```shell ohos_executable("helloworld_bin") { sources = [ "src/helloworld2.cpp" ] include_dirs = [ "include" ] deps = [ # ä¾èµ–éƒ¨ä»¶å†…æ¨¡å— "../feature1:helloworld_lib" ] external_deps = [ "partB:module1" ] # (å¯é€‰ï¼‰å¦‚果有跨部件的ä¾èµ–ï¼Œæ ¼å¼ä¸ºâ€œéƒ¨ä»¶å:模å—å†install_enable = true # 坿‰§è¡Œç¨‹åºç¼ºçœä¸å®‰è£…,需è¦å®‰è£…æ—¶éœ€è¦æŒ‡å®š part_name = "partA" } ``` 示例3:编写etc模å—gn脚本test/examples/partA/feature3/BUILD.gn,示例如下: ```shell ohos_prebuilt_etc("feature3_etc") { source = "src/config.conf" relative_install_dir = "init" #å¯é€‰ï¼Œæ¨¡å—安装相对路径,相对于默认安装路径;默认在/system/etc目录 part_name = "partA" } ``` 示例4:在部件的bundle.json䏿·»åŠ æ¨¡å—é…置:test/examples/bundle.json。æ¯ä¸ªéƒ¨ä»¶éƒ½æœ‰ä¸€ä¸ªbundle.jsoné…ç½®æ–‡ä»¶ï¼Œåœ¨éƒ¨ä»¶çš„æ ¹ç›®å½•ä¸‹ã€‚ç¤ºä¾‹è§ï¼š[部件的bundle.json](subsys-build-component.md#部件é…置规则) 2. å°†éƒ¨ä»¶æ·»åŠ åˆ°äº§å“é…ç½®ä¸ã€‚ 在产å“çš„é…ç½®ä¸æ·»åŠ éƒ¨ä»¶ï¼Œäº§å“对应的é…置文件://vendor/{product_company}/{product-name}/config.json。下é¢ä»¥vendor/hisilicon/hispark_taurus_standard/config.json为例: ```shell { "product_name": "hispark_taurus_standard", "device_company": "hisilicon", "device_build_path": "device/board/hisilicon/hispark_taurus/linux", "target_cpu": "arm", "type": "standard", "version": "3.0", "board": "hispark_taurus", "inherit": [ "productdefine/common/base/standard_system.json", "productdefine/common/inherit/ipcamera.json" ], "enable_ramdisk": true, "subsystems": [ { "subsystem": "subsystem_examples", # 部件所属å系统 "components": [ { "component": "partA", # 部件åç§° "features": [] # 部件对外的å¯é…置特性列表 } ] }, ······ } ``` 从ä¸å¯ä»¥çœ‹å‡ºäº§å“åç§°ã€èŠ¯ç‰‡åŽ‚å®¶ç‰ï¼›inherit指出ä¾èµ–的通用组件;subsystems指出通用组件以外的部件。 在产å“é…ç½®æ–‡ä»¶ä¸æ·»åŠ "subsystem_examples:partA",表示该产å“ä¸ä¼šç¼–译并打包partA到版本ä¸ã€‚ 3. 编译。 ä¸»è¦æœ‰ä¸¤ç§ç¼–译方å¼ï¼Œ[命令行方å¼å’Œhbæ–¹å¼](subsys-build-all.md#编译命令),下é¢ä»¥å‘½ä»¤è¡Œæ–¹å¼ä¸ºä¾‹ï¼š 部件å¯ä»¥ä½¿ç”¨"--build-target 部件å"进行å•独编译,以编译产å“hispark_taurus_standardçš„musl部件为例,编译命令如下: ``` ./build.sh --product-name hispark_taurus_standard --build-target musl --ccache ``` 也å¯ä»¥ç¼–译相应产å“,以编译hispark_taurus_standard为例,编译命令如下: ```shell ./build.sh --product-name hispark_taurus_standard --ccache ``` 4. 编译输出。 编译所生æˆçš„æ–‡ä»¶éƒ½å½’档在out/hispark_taurus/目录下,结果镜åƒè¾“出在 out/hispark_taurus/packages/phone/images/ 目录下。