作者:王石,胡瑞涛
上节回顾
在#跟着小白一起学鸿蒙# [六]如何编写hap文件,我们学习了hap文件的结构框架和如何自己开发一个简单的hap程序。接下来我们来学习如何在鸿蒙环境下编译hap程序。
安装使用说明(Open-Harmony)
在开源鸿蒙系统下
-
蓝牙专项应用程序路径为:foundation/communication/bluetooth/test/example/BluetoothTest
-
目录结构
. ├── example │ ├── BluetoothTest │ │ ├── build-profile.json5 │ │ ├── hvigorfile.js │ │ ├── package.json │ │ ├── package-lock.json │ │ ├── BUILD.gn │ │ ├── entry/src/main │ │ │ ├── config.json │ │ │ ├── ets │ │ │ │ ├── Component │ │ │ │ ├── MainAbility │ │ │ │ │ ├── app.ets │ │ │ │ │ ├── controller │ │ │ │ │ ├── model │ │ │ │ │ ├── pages │ │ │ │ │ └── res │ │ │ │ │ └── image │ │ │ │ ├── MainAbility2 │ │ │ │ └── Utils │ │ │ └── resources │ │ │ └── base │ │ │ ├── element │ │ │ └── media │ │ └── signature ├── fuzztest ├── moduletest └── unittest
-
在开源鸿蒙下的编译,是套用了原本系统中编写好的hap程序编译模板,因此保留了一些模板中的结构,如:MainAbility2 和config.json中的js语句;对程序本身的编译没有影响。
-
在bundle.json中添加编译命令
路径为:foundation/communication/bluetooth/bundle.json 命令为: "test": [ ... "//foundation/communication/bluetooth/test/example/example_btTest:BluetoothTest" ]
-
添加BUILD.gn
foundation/communication/bluetooth/test/example/BluetoothTest/BUILD.gn import("//test/xts/tools/build/suite.gni") ohos_hap("BluetoothTest") { hap_profile = "entry/src/main/config.json" hap_name = "BluetoothTest" subsystem_name = XTS_SUITENAME final_hap_path = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/testcases/${hap_name}.hap" deps = [ ":bluetooth_resources", ":bluetooth_ts_assets", ] certificate_profile = "signature/auto_ohos_default_com.ohos.bttest.p7b" } ohos_js_assets("bluetooth_ts_assets") { source_dir = "entry/src/main/ets" hap_profile = "entry/src/main/config.json" ets2abc = true } ohos_resources("bluetooth_resources") { sources = [ "entry/src/main/resources" ] hap_profile = "entry/src/main/config.json" }
-
创建signature文件夹,添加签名文件
路径为:foundation/communication/bluetooth/test/example/example_btTest/signature 签名文件为:Dev-Eco自动签名生成的文件:auto_ohos_default_com.ohos.bttest.p7b
-
config.json
{ "app": { "vendor": "samples", "bundleName": "ohos.samples.bttest", "version": { "code": 1000000, "name": "1.0.0" }, "apiVersion": { "compatible": 8, "target": 8 } }, "deviceConfig": {}, "module": { "mainAbility": ".MainAbility", "deviceType": [ "default", "phone" ], "reqPermissions": [ { "reason": "", "name": "ohos.permission.DISCOVER_BLUETOOTH" }, { "reason": "", "name": "ohos.permission.USE_BLUETOOTH" }, { "name": "ohos.permission.LOCATION" } ], "abilities": [ { "skills": [ { "entities": [ "entity.system.home" ], "actions": [ "action.system.home" ] } ], "orientation": "unspecified", "visible": true, "srcPath": "MainAbility", "name": ".MainAbility", "srcLanguage": "ets", "icon": "$media:icon", "description": "$string:MainAbility_desc", "formsEnabled": false, "label": "$string:MainAbility_label", "type": "page", "launchType": "singleton" }, { "orientation": "unspecified", "visible": true, "srcPath": "MainAbility2", "name": ".MainAbility2", "srcLanguage": "ets", "icon": "$media:icon", "description": "$string:MainAbility2_desc", "formsEnabled": false, "label": "$string:MainAbility2_label", "type": "page", "launchType": "singleton" } ], "distro": { "moduleType": "entry", "installationFree": false, "deliveryWithInstall": true, "moduleName": "entry" }, "package": "ohos.samples.bttest", "srcPath": "", "name": ".entry", "js": [ { "mode": { "syntax": "ets", "type": "pageAbility" }, "pages": [ "pages/homePage", "pages/manualApiTestPage", ... ], "name": ".MainAbility", "window": { "designWidth": 720, "autoDesignWidth": false } }, { "mode": { "syntax": "ets", "type": "pageAbility" }, "pages": [ "pages/index" ], "name": ".MainAbility2", "window": { "designWidth": 720, "autoDesignWidth": false } } ] } }
-
编译命令
# 全量编译 ./build.sh --product-name {product_name} # 单独编译HAP ./build.sh --product-name {product_name} --build-target BluetoothTest
-
生成文件
- 使用 find out -name "BluetoothTest.hap*" 查找生成文件,或者直接查看config.json所写的生成路径。
- 将生成文件拷到本地电脑上,连接板子,使用命令
hdc_std.exe install BluetoothTest
进行安装。 - 使用命令
hdc_std uninstall {安装包名}
进行卸载。 - 安装包名在
entry\src\main\config.json
如:"bundleName": "com.ohos.bttest"
-
补充
在鸿蒙系统下编译,仍存在高版本对低版本的编译不兼容性问题。即在mater版本下编译的hap无法在beta2版本运行;反之则可以。
-
可能出现的编译报错
- 一些属性必须初始化一个默认值。如:The @State property 'bgColor' 'settingArrow' 'settingSummary' must be specified a default value。
- 注意引用路径中的文件名大小写问题。
- 一些属性名与关键词或类名重复会起冲突。如:Property 'height'/"onClick"/"enabled" in type 'EntryComponent' is not assignable to the same property in base type 'CustomComponent。将其改成例如"isOnClick"/"isEnabled"即可。
- 一些资源,如:@State settingSummary: Resource 必须是resource 不能加 |string 或者赋值为string。Type 'Resource' is not assignable to type 'string'. 反之同理。Type 'string' is not assignable to type 'Resource'。
本文作者:左翼风发
https://ost.51cto.com/#bkwz
标签:盲盒,鸿蒙,编译,json,ohos,hap,entry,name From: https://blog.51cto.com/harmonyos/5890803