一:什么是Ability

Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability)。HarmonyOS支持应用以Ability为单位进行部署。
Ability分为FA(Feature Ability)和PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。其中,FA支持Page Ability模板,以提供与用户交互的能力。一个Page Ability可以含有一个或多个页面(即Page),Page Ability与Page的关系如下图所示:
image.png

PA支持Service Ability 和Data Ability
Service模块:用于提供后台运行任务的能力
Data模块:用于对外部提供统一的数据访问抽象

二:目录结构

项目代码下都存在app.json5及module.json5两种配置文件
app.json5主要包含应用的全局配置信息,包含应用的包名,开发商,版本等基本信息

image.png
Module.json5主要包含以下内容:Module的基本配置信息,如名称,类型,描述,支持的设备类型等信息
应用组件信息,包含UIAbility组件和ExtensionAbility组件的描述信息

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ts",
        "description": "$string:ability_desc",
        "icon": "$media:icon",
        "label": "$string:ability_label",
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}

entry-->src-->main-->resources下文件
image.png

1,AppScope中存放应用的全局所需的资源文件
2,entry是应用的主模块,存放HarmonyOS应用的代码,资源等
3,oh_modules是工程依赖包,存放工程依赖的源文件
4,build-proflie.json5 是工程级配置信息,包括签名,产品配置等

{
  "app": {
    "signingConfigs": [],
    "compileSdkVersion": 9,
    "compatibleSdkVersion": 9,
    "products": [
      {
        "name": "default",
        "signingConfig": "default",
      }
    ]
  },
  "modules": [
    {
      "name": "entry",
      "srcPath": "./entry",
      "targets": [
        {
          "name": "default",
          "applyToProducts": [
            "default"
          ]
        }
      ]
    }
  ]
}

5,hvigorfile.ts是工程级编译构建任务脚本。hvigor是基于任务管理机制实现的一款全新的自动化构建工具,主要提供任务注册编排,工程模型管理,配置管理等核心能力
6,oh-package.json5是工程级依赖的配置文件,用于记录引入包的配置信息

{
  "name": "myapplication",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "",
  "author": "",
  "license": "",
  "dependencies": {
  },
  "devDependencies": {
    "@ohos/hypium": "1.0.6"
  }
}

image.png

三:entry内的目录结构

image.png
1.entry-->src目录中主要包含main文件夹,单元测试目录ohosTest,以及模块级的配置文件
2.build-proflie.json5 是模块级配置信息,包含编译构建的配置项

{
  "apiType": 'stageMode',
  "buildOption": {
  },
  "targets": [
    {
      "name": "default",
      "runtimeOS": "HarmonyOS"
    },
    {
      "name": "ohosTest",
    }
  ]
}

3.hvigorfile.ts文件,是模块级构建脚本
4.oh-package.json5是模块级依赖的配置信息文件

{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "",
  "author": "",
  "license": "",
  "dependencies": {}
}

四:main文件下的目录结构

1.entryability文件下,存放ability文件,用于当前的ability应用的逻辑和生命周期管理
2.pages存放UI界面相关的代码文件,初始化会生成一个index页面
image.png
3.resources文件夹下存放模块的公共的多媒体,字符串及布局文件等资源,分别存放在element,media文件夹中。

4.entry-->src-->main-->module.json5是模块的配置信息,包含当前模块的配置信息
一个模块对应一个打包后的hap包,hap包全称是HarmonyOS Ability Package,其中包含ability,第三方库,资源和配置文件。

五:module.json5文件字段名称

{
  "module": {
//该标签标识当前module的名字,module打包成hap后,表示hap的名称,标签值采用字符串表示(最大长度31个字节),该名称在整个应用要唯一
    "name": "entry",
//表示模块的类型,类型有三种分别是entry,feature 和har
    "type": "entry",
//当前模块的描述信息
    "description": "$string:module_desc",
//该标签标识hap的入口ability名称或者extension名称,只有配置mainElement的ability或者extension才允许在服务中心露出
    "mainElement": "EntryAbility",
//标签标识hap可以运行在哪些设备上,标签采用字符串数组表示
    "deviceTypes": [
      "phone",
      "tablet"
    ],
//标识当前module是否在用户主动按照的时候安装,标识该module对应的hap是否跟随应用一起安装,--true:主动安装是安装,--false:主动安装时候不安装
    "deliveryWithInstall": true,
//标识当前module是否支持免安装特性,true标识支持免安装特性,false:表示不支持免安装特性
    "installationFree": false,
//对应的main_pages.json文件,用于配置ability中用到的page信息
    "pages": "$profile:main_pages",
//是一个数组,存放当前模块中所有的ability元能力的配置信息,其中可以有多个ability
    "abilities": [
      {
//该标签标识当前ability的逻辑名,该名称在整个应用要唯一,标签值采用字符串表示(最大长度127个字节)
        "name": "EntryAbility",
//ability的入口路径
        "srcEntry": "./ets/entryability/EntryAbility.ts",
//ability的描述信息
        "description": "$string:ability_desc",
//ability的图标
        "icon": "$media:icon",
//ability的标签名
        "label": "$string:ability_label",
//启动页面的图标
        "startWindowIcon": "$media:icon",
//启动页面的背景色
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
//标识能够接收意图的action集合
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}

总结:新事物,新思想


Rocky_ruan
57 声望5 粉丝

不积跬步,无以至千里