部件
部件配置規(guī)則
部件的bundle.json放在部件源碼的根目錄下。以泛sensor子系統(tǒng)的sensor服務(wù)部件為例,部件屬性定義描述文件字段說明如下:
開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
{
"name": "@ohos/sensor_lite", # HPM部件英文名稱,格式"@組織/部件名稱"
"description": "Sensor services", # 部件功能一句話描述
"version": "3.1", # 版本號,版本號與OpenHarmony版本號一致
"license": "MIT", # 部件License
"publishAs": "code-segment", # HPM包的發(fā)布方式,當(dāng)前默認(rèn)都為code-segment
"segment": {
"destPath": ""
}, # 發(fā)布類型為code-segment時為必填項,定義發(fā)布類型code-segment的代碼還原路徑(源碼路徑)
"dirs": {"base/sensors/sensor_lite"}, # HPM包的目錄結(jié)構(gòu),字段必填內(nèi)容可以留空
"scripts": {}, # HPM包定義需要執(zhí)行的腳本,字段必填,值非必填
"licensePath": "COPYING",
"readmePath": {
"en": "README.rst"
},
"component": { # 部件屬性
"name": "sensor_lite", # 部件名稱
"subsystem": "", # 部件所屬子系統(tǒng)
"syscap": [], # 部件為應(yīng)用提供的系統(tǒng)能力
"features": [], # 部件對外的可配置特性列表,一般與build中的sub_component對應(yīng),可供產(chǎn)品配置
"adapted_system_type": [], # 輕量(mini)小型(small)和標(biāo)準(zhǔn)(standard),可以是多個
"rom": "92KB", # 部件ROM值
"ram": "~200KB", # 部件RAM估值
"deps": {
"components": [ # 部件依賴的其他部件
"samgr_lite",
"ipc_lite"
],
"third_party": [ # 部件依賴的三方開源軟件
"bounds_checking_function"
],
"hisysevent_config": [] # 部件HiSysEvent打點(diǎn)配置文件編譯入口
}
"build": { # 編譯相關(guān)配置
"sub_component": [
""//base/sensors/sensor_lite/services:sensor_service"", # 部件編譯入口
], # 部件編譯入口,模塊在此處配置
"inner_kits": [], # 部件間接口
"test": [] # 部件測試用例編譯入口
}
}
}
注意 :lite上舊的部件在build/lite/components目錄下對應(yīng)子系統(tǒng)的json文件中,路徑規(guī)則為: {領(lǐng)域}/{子系統(tǒng)}/{部件} ,部件目錄樹規(guī)則如下:
component
├── interfaces
│ ├── innerkits # 系統(tǒng)內(nèi)接口,部件間使用
│ └── kits # 應(yīng)用接口,應(yīng)用開發(fā)者使用
├── frameworks # framework實(shí)現(xiàn)
├── services # service實(shí)現(xiàn)
└── BUILD.gn # 部件編譯腳本
部件配置中需要配置部件的名稱、源碼路徑、功能簡介、是否必選、編譯目標(biāo)、RAM、ROM、編譯輸出、已適配的內(nèi)核、可配置的特性和依賴等屬性定義。
注意 :部件配置中HiSysEvent打點(diǎn)配置文件使用說明,請參考文檔[HiSysEvent打點(diǎn)配置]
新增部件時需要在對應(yīng)子系統(tǒng)json文件中添加相應(yīng)的部件定義。產(chǎn)品所配置的部件必須在某個子系統(tǒng)中被定義過,否則會校驗(yàn)失敗。
新增并編譯部件
添加部件。 本節(jié)以添加一個自定義的部件為例,描述如何編譯部件,編譯庫、編譯可執(zhí)行文件等。
示例部件partA由feature1、feature2和feature3組成,feature1的編譯目標(biāo)為一個動態(tài)庫,feature2的目標(biāo)為一個可執(zhí)行程序,feature3的目標(biāo)為一個etc配置文件。
示例部件partA的配置需要添加到一個子系統(tǒng)中,本次示例將添加到subsystem_examples子系統(tǒng)中(subsystem_examples子系統(tǒng)定義在test/examples/目錄)。
示例部件partA的完整目錄結(jié)構(gòu)如下: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:編寫動態(tài)庫gn腳本test/examples/partA/feature1/BUILD.gn,示例如下:
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:編寫可執(zhí)行文件gn腳本test/examples/partA/feature2/BUILD.gn,示例如下:
ohos_executable("helloworld_bin") { sources = [ "src/helloworld2.cpp" ] include_dirs = [ "include" ] deps = [ # 依賴部件內(nèi)模塊 "../feature1:helloworld_lib" ] external_deps = [ "partB:module1" ] # (可選)如果有跨部件的依賴,格式為“部件名:模塊名” install_enable = true # 可執(zhí)行程序缺省不安裝,需要安裝時需要指定 part_name = "partA" }
示例3:編寫etc模塊gn腳本test/examples/partA/feature3/BUILD.gn,示例如下:
ohos_prebuilt_etc("feature3_etc") { source = "src/config.conf" relative_install_dir = "init" #可選,模塊安裝相對路徑,相對于默認(rèn)安裝路徑;默認(rèn)在/system/etc目錄 part_name = "partA" }
示例4:在部件的bundle.json中添加模塊配置:test/examples/bundle.json。每個部件都有一個bundle.json配置文件,在部件的根目錄下。示例見:[部件的bundle.json]
將部件添加到產(chǎn)品配置中。 在產(chǎn)品的配置中添加部件,產(chǎn)品對應(yīng)的配置文件://vendor/{product_company}/{product-name}/config.json。下面以vendor/hisilicon/hispark_taurus_standard/config.json為例:
{
"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", # 部件所屬子系統(tǒng)
"components": [
{
"component": "partA", # 部件名稱
"features": [] # 部件對外的可配置特性列表
}
]
},
······
}
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
從中可以看出產(chǎn)品名稱、芯片廠家等;inherit指出依賴的通用組件;subsystems指出通用組件以外的部件。
在產(chǎn)品配置文件中添加 "subsystem_examples:partA",表示該產(chǎn)品中會編譯并打包partA到版本中。
編譯。 主要有兩種編譯方式,[命令行方式和hb方式],下面以命令行方式為例:
部件可以使用"--build-target 部件名"進(jìn)行單獨(dú)編譯,以編譯產(chǎn)品hispark_taurus_standard的musl部件為例,編譯命令如下:./build.sh --product-name hispark_taurus_standard --build-target musl --ccache
也可以編譯相應(yīng)產(chǎn)品,以編譯hispark_taurus_standard為例,編譯命令如下:
./build.sh --product-name hispark_taurus_standard --ccache
編譯輸出。 編譯所生成的文件都?xì)w檔在out/hispark_taurus/目錄下,結(jié)果鏡像輸出在 out/hispark_taurus/packages/phone/images/ 目錄下。
審核編輯 黃宇
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5121瀏覽量
98218 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2392瀏覽量
43059 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1982瀏覽量
30580 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3747瀏覽量
16592
發(fā)布評論請先 登錄
相關(guān)推薦
評論