8

#盲盒+码# #跟着小白一起学鸿蒙#[十七]如何编译hap程序-开源基础软件社区-51CTO.COM

 1 year ago
source link: https://ost.51cto.com/posts/19494
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.

#盲盒+码# #跟着小白一起学鸿蒙#[十七]如何编译hap程序 原创 精华

作者:王石,胡瑞涛

在#跟着小白一起学鸿蒙# [六]如何编写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’。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK