5

跟着小白一起学鸿蒙—如何编译Hap程序(十七)

 1 year ago
source link: https://www.51cto.com/article/740598.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

跟着小白一起学鸿蒙—如何编译Hap程序(十七)

作者:王石 胡瑞涛 2022-11-24 14:34:41
本篇我们来学习如何在鸿蒙环境下编译Hap程序。
66fdb374300ebb08583707d12883ce8c022dbc.png

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

安装使用说明(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’。

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​​。

责任编辑:jianghua 来源: 51CTO开源基础软件社区

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK