华为鸿蒙开发——开发及引用静态共享包(HAR)、应用配置文件

简述

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

一、创建HAR模块

步骤一:点击工程目录顶部,右击
在这里插入图片描述
步骤二:进入页面,点击static library,之后点击next
在这里插入图片描述
创建成功!
在这里插入图片描述

二、编译HAR模块

按照图中操作:
在这里插入图片描述
编译构建的HAR可在模块下的build目录下获取,包格式为*.har。
在这里插入图片描述

三、应用配置文件(Stage模型)

在基于Stage模型开发的应用项目代码下,都存在一个app.json5及一个或多个module.json5这两种配置文件。
app.json5主要包含以下内容:

  • 应用的全局配置信息,包含应用的包名、开发厂商、版本号等基本信息。
  • 特定设备类型的配置信息。

app.json5示例:

{
   
  "app": {
   
    "bundleName": "com.application.myapplication",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name",
    "description": "$string:description_application",
    "minAPIVersion": 9,
    "targetAPIVersion": 9,
    "apiReleaseType": "Release",
    "debug": false,
    "car": {
   
      "minAPIVersion": 8,
    }
  },
}
属性名称 含义 构成及是否可省
bundleName 标识应用的Bundle名称,用于标识应用的唯一性。该标签不可缺省。 字符串以字母、数字、下划线和符号“.”组成。
bundleType 标识应用的Bundle类型,用于区分应用或者原子化服务。该标签可选值为app和atomicService : 该标签可以缺省,缺省为app。
debug 标识应用是否可调试,该标签由IDE编译构建时生成。 布尔值 / 该标签可以缺省,缺省为false。
icon 标识应用的图标,标签值为图标资源文件的索引。 该标签不可缺省。
label 标识应用的名称,标签值为字符串资源的索引。 该标签不可缺省。
description 标识应用的描述信息,标签值是字符串类型(最大255个字节)或对描述内容的字符串资源索引。 该标签可缺省,缺省值为空。
vendor 标识对应用开发厂商的描述。该标签的值是字符串类型(最大255个字节)。 该标签可以缺省,缺省为空。
versionCode 标识应用的版本号,该标签值为32位非负整数。此数字仅用于确定某个版本是否比另一个版本更新,数值越大表示版本越高。开发者可以将该值设置为任何正整数,但是必须确保应用的新版本都使用比旧版本更大的值。 该标签不可缺省。
versionName 标识应用版本号的文字描述,用于向用户展示。该标签仅由数字和点构成,推荐采用“A.B.C.D”四段式的形式。四段式推荐的含义如下所示。 第一段:主版本号/Major,范围0-99,重大修改的版本,如实现新的大功能或重大变化。 第二段:次版本号/Minor,范围0-99,表示实现较突出的特点,如新功能添加或大问题修复。 第三段:特性版本号/Feature,范围0-99,标识规划的新版本特性。 第四段:修订版本号/Patch,范围0-999,表示维护版本,修复bug。标签最大字节长度为127。 该标签不可缺省。
minAPIVersion 标识应用运行需要的SDK的API最小版本。 由build-profile.json5中的compatibleSdkVersion生成。
targetAPIVersion 标识应用运行需要的API目标版本。 由build-profile.json5中的compileSdkVersion生成。
apiReleaseType 标识应用运行需要的API目标版本的类型,采用字符串类型表示。取值为“CanaryN”、“BetaN”或者“Release”,其中,N代表大于零的整数。Canary:受限发布的版本。Beta:公开发布的Beta版本。Release:公开发布的正式版本。该字段由DevEco Studio读取当前使用的SDK的Stage来生成。 该标签可缺省,由IDE生成并覆盖。
multiProjects 标识当前工程是否支持多个工程的联合开发。 布尔值
car 标识对car设备做的特殊配置,可以配置的属性字段有上文提到的:minAPIVersion、distributedNotificationEnabled。如果使用该属性对car设备做了特殊配置,则应用在car设备中会采用此处配置的属性值,并忽略在app.json5公共区域配置的属性值 该标签可缺省,缺省时car设备使用app.json5公共区域配置的属性值。

module.json5主要包含以下内容:

  • Module的基本配置信息,例如Module名称、类型、描述、支持的设备类型等基本信息。
  • 应用组件信息,包含UIAbility组件和ExtensionAbility组件的描述信息。
  • 应用运行过程中所需的权限信息。

module.json5实例:
查表:
module表格

四、应用配置文件(FA模型)

每个应用项目必须在项目的代码目录下加入配置文件,这些配置文件会向HarmonyOS的编译工具、HarmonyOS操作系统和应用市场提供描述应用的基本信息

应用配置文件需申明以下内容:

  • 应用的软件包名称,应用的开发厂商,版本号等应用的基本配置信息,这些信息被要求设置在app这个字段下。
  • 应用的组件的基本信息,包括所有的Ability,设备类型,组件的类型以及当前组件所使用的语法类型。
  • 应用在具体设备上的配置信息,这些信息会影响应用在设备上的具体功能。

在FA模型的应用开发过程中,需要在config.json配置文件中对应用的包结构进行声明。

1、配置文件的内部结构

config.jsonappdeviceConfigmodule三个部分组成,缺一不可。

属性名称 含义 是否可缺省
app 标识应用的全局配置信息。同一个应用的不同HAP的app配置必须保持一致 不可缺省
deviceConfig 标识应用在具体设备上的配置信息 不可缺省
module 标识HAP的配置信息。该标签下的配置只对当前HAP生效 不可缺省

(1)app

app对象内部结构

(2)deviceConfig

deviceConfig对象内部结构

(3)module

module对象内部结构

config.json实例:

{
   
  "app": {
   
    "vendor": "example",
    "bundleName": "com.example.demo",
    "version": {
   
      "code": 1000000,
      "name": "1.0.0"
    }
  },
  "deviceConfig": {
   
  },
  "module": {
   
    "mainAbility": ".MainAbility_entry",
    "deviceType": [
      "tablet"
    ],
    "commonEvents": [
      {
   
        "name": ".MainAbility",
        "permission": "ohos.permission.GET_BUNDLE_INFO",
        "data": [
          "com.example.demo",
          "100"
        ],
        "events": [
          "install",
          "update"
        ]
      }
    ],
    "abilities": [
      {
   
        "skills": [
          {
   
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "unspecified",
        "visible": true,
        "srcPath": "MainAbility_entry",
        "name": ".MainAbility_entry",
        "srcLanguage": "ets",
        "icon": "$media:icon",
        // $string:MainAbility_entry_desc为资源索引
        "description": "$string:MainAbility_entry_desc",
        "formsEnabled": false,
        // $string:MainAbility_entry_label为资源索引
        "label": "$string:MainAbility_entry_label",
        "type": "page",
        "launchType": "standard"
      }
    ],
    "distro": {
   
      "moduleType": "entry",
      "installationFree": false,
      "deliveryWithInstall": true,
      "moduleName": "myapplication"
    },
    "package": "com.example.myapplication",
    "srcPath": "",
    "name": ".myapplication",
    "js": [
      {
   
        "mode": {
   
          "syntax": "ets",
          "type": "pageAbility"
        },
        "pages": [
          "pages/index"
        ],
        "name": ".MainAbility_entry",
        "window": {
   
          "designWidth": 720,
          "autoDesignWidth": false
        }
      }
    ]
  }
}

五、资源分类与访问

应用开发中使用的各类资源文件,需要放入特定子目录中存储管理。资源目录的示例如下所示,base目录、限定词目录、rawfile目录称为资源目录,element、media、profile称为资源组目录。
说明
stage模型多工程情况下,共有的资源文件放到AppScope下的resources目录。

分类

  • 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表现。
  • 系统资源:开发者直接使用系统预置的资源定义(即分层参数,同一资源ID在设备类型、深浅色等不同配置下有不同的取值)。

相关推荐

  1. 华为鸿蒙HarmonyOS应用开发者高级认证试题答案

    2023-12-08 12:40:01       143 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 12:40:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 12:40:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 12:40:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 12:40:01       18 阅读

热门阅读

  1. 力扣labuladong——一刷day68

    2023-12-08 12:40:01       37 阅读
  2. Python:核心知识点整理大全7-笔记

    2023-12-08 12:40:01       31 阅读
  3. Flask中redis的配置与使用

    2023-12-08 12:40:01       36 阅读
  4. 1-Hadoop原理与技术

    2023-12-08 12:40:01       32 阅读
  5. Pytorch当中transpose()和permute()函数的区别

    2023-12-08 12:40:01       39 阅读
  6. 最新PyTorch机器学习与深度学习实践技术应用

    2023-12-08 12:40:01       39 阅读
  7. InterLM代码解析

    2023-12-08 12:40:01       33 阅读
  8. 处理合并目录下的Excel文件数据并指定列去重

    2023-12-08 12:40:01       39 阅读
  9. Next.js 中的中间件

    2023-12-08 12:40:01       28 阅读
  10. [C#]文件的读写-1

    2023-12-08 12:40:01       37 阅读
  11. zookeeper常用接口

    2023-12-08 12:40:01       31 阅读