前言

在进行OpenHarmony应用开发前,应该掌握OpenHarmony应用的逻辑结构,并且了解应用的基础配置文件,从而能更加高效的进行应用开发。

工程简介

OpenHarmony应用发布形态为APP Pack(Application Package,简称APP),它是由一个或多个HAP(OpenHarmony Ability Package)包以及描述APP Pack属性的pack.info文件组成。

一个HAP在工程目录中对应一个Module,它是由代码、资源、第三方库及应用配置文件组成,可以分为Entry和Feature两种类型。

  • Entry: 应用的主模块,可独立安装运行。在一个工程中同一个设备类型只支持一个Entry类型的模块。

  • Feature: 应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。

HAP是Ability的部署包,OpenHarmony应用代码围绕Ability组件展开,它是由一个或多个Ability组成。Ability分为两种类型:FA(Feature Ability,中文名称:元程序)和PA(Particle Ability,中文名称:元服务)。FA/PA是应用/服务的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。

工程环境

IDE: DevEco Studio Beta3(build:3.0.0.993)

SDK: Api Version9

apiType: stageMode

工程目录结构

MyApplication ├── AppScope │   ├── resources │       └── base │           ├── element │           └── media │   └── app.json5 ├── entry │   ├── src │       ├── main │           ├── ets │               ├── Application │               ├── MainAbility │               └── pages │           ├── resources │               └── base │                   ├── element │                       ├── string.json                        └── color.json │                   ├── media │                   └── profile │                       └── main_pages.json │           └── module.json5 │       └── ohosTest │   ├── build-profile.json5 │   ├── hvigorfile.js │   └── package.json ├── build-profile.json5 ├── hvigorfile.js └── package.json

AppScope: 应用全局目录。用于存放多个hap所用到的公共资源文件,如图形、多媒体、字符串、布局文件等,以及全局应用配置。

  • resouces: 全局资源目录。

    • base > element: 包括字符串、整型数、颜色、样式等资源的json文件,每个资源均由json格式进行定义。

      • string.json 字符串资源。

      • color.json 颜色资源。

    • base > media: 多媒体文件,如图形、视频、音频等文件,支持的文件格式包括:.png、.gif、.mp3、.mp4等。

    • base > profile: 表示其他类型文件,以原始文件形式保存。

      • main_pages.json 模块下所有需要引用的页面集合。

  • app.json5: 应用的全局配置,同一应用的不同.hap文件必须使用相同的应用配置。

entry: OpenHarmony工程模块,编译构建生成一个Hap包。

  • src > main: 模块主业务目录。

    • ets: 用于存放ets源码。

      • Application > AbilityStage.ts: 模块的入口。

      • MainAbility > MainAbility.ts: 模块对应ability的入口。

      • pages: 模块包含的页面。

  • src > ohosTest: 模块单元测试目录。

  • build-profile.json5: 模块级build-profile配置。主要包含当前的模块信息、编译信息配置项,包括buildOption、targets配置等。

  • hvigorfile.js: hvigor使用的模块级配置文件。主要配置了模块级编译构建任务脚本。

  • package.json: 模块级package.json配置。主要配置npm模块级的依赖、版本配置等。

build-profile.json5: 应用级build-profile配置。主要包括签名、产品配置等。

hvigorfile.js: hvigor使用的应用级配置文件。主要配置了应用级编译构建任务脚本。

package.json: 应用级package.json配置。主要配置npm应用级级的依赖、版本配置等。

配置文件含义

工程级package.json

工程级package.json主要放在根目录下,它里面的配置项如下:

{     "name": "myapplication",     "version": "1.0.0",     "ohos": {    "org": "huawei",    "buildTool": "hvigor",    "directoryLevel": "project"  },  "description": "example description",  "repository": {},  "license": "ISC",  "dependencies": {    "@ohos/hypium": "1.0.2",    "@ohos/hvigor": "1.2.2",    "@ohos/hvigor-ohos-plugin": "1.2.2"  } }

name:类型string。项目名称。

version:类型string。版本号。

ohos:类型object。OpenHarmony应用/服务的扩展字段,表示在npm标准规范的基础上叠加了OpenHarmony npm包。

  • org:类型string。标识npm包的维护主体。默认huawei。

  • buildTool:类型string。标识OpenHarmony npm包的构建工具是hvigor。默认hvigor。

  • directoryLevel:类型string。标识npm包是工程的依赖。默认project。

description:类型string。项目描述简介。

repository:类型object。指定项目存放的地址,如git仓库存放的url。

license:类型string。开源许可证。默认ISC。

dependencies:类型object。项目运行所需要的依赖(开发和生产都包括在内)。

工程级build-profile.json5

工程级build-profile.json5主要放在根目录下,它里面的配置项如下:

{   "app": {     "signingConfigs": [        {         "name": "default",         "material": {           "certpath": "",           "storePassword": "",           "keyAlias": "",           "keyPassword": "",           "profile": "",           "signAlg": "",           "storeFile": ""        }      }    ],     "compileSdkVersion": 9,     "compatibleSdkVersion": 9,     "products": [      {         "name": "default",         "signingConfig": "default",      }    ]  },   "modules": [    {       "name": "entry",       "srcPath": "./entry",       "targets": [        {           "name": "default",           "applyToProducts": [             "default"          ]        }      ]    }  ] }

app:类型object。OpenHarmon应用项目级配置信息,所有FA/PA模块共享,包括编译API级别、签名和产品信息。

  • signingConfigs:类型array。签名配置信息,可同时配置多个签名信息。

    • name:类型string。标识签名方案的名称。

    • material:类型string。该方案的签名材料。

      • certpath:类型string。调试或发布证书文件,格式为.cer。

      • storePassword:类型string。密钥库密码,以密文形式呈现。

      • keyAlias:类型string。密钥别名。

      • keyPassword:类型string。密钥密码,以密文形式呈现。

      • profile:类型string。调试或发布证书Profile文件,格式为.p7b。

      • signAlg:类型string。密钥库signAlg参数。默认SHA256withECDSA。

      • storeFile:类型string。密钥库文件,格式为.p12。

  • compileSdkVersion:类型integer。指定OpenHarmony应用/服务编译时的SDK版本。

  • compatibleSdkVersion:类型integer。指定OpenHarmony应用/服务兼容的最低SDK版本。

  • products:类型array。该字段用于描述openHarmon应用程序定义的不同产品类型。默认存在默认产品,可以指定不同的签名材料。

    • name:类型string。定义产品的名称。

    • signingConfig:类型string。指定当前产品品类对应的签名信息,签名信息需要在signingConfigs中进行定义。

modules:类型array。描述openHarmon应用程序中的所有模块。模块配置包括名称、路径和目标产品关联配置。

  • name:类型string。模块名称。

  • srcPath:类型string。标明src目录相对工程根目录的相对路径。

  • targets:类型array。定义构建的产物,由product和各模块定义的targets共同定义。

    • name:类型string。target名称,由各个模块的build-profile.json5中的targets字段定义。

    • applyToProducts:类型array。产品品类名称,由products字段进行定义。

模块级package.json

模块级package.json主要放在对应的模块下,它里面的配置项如下:

{  "license": "ISC",  "devDependencies": {},  "name": "entry",  "ohos": {  "org": "huawei",  "directoryLevel": "module",  "buildTool": "hvigor"  },  "description": "example description",  "repository": {},  "version": "1.0.0",  "dependencies": {} }

license:类型string。开源许可证。默认ISC。

devDependencies:类型object。开发环境所需要的依赖(比如测试、文档或者日志等无需在生产环境使用的框架),生产环境下不参与编译,通过npm install --production指令不会安装这个闭包下的依赖。

name:类型string。项目名称。

ohos:类型object。OpenHarmony应用/服务的扩展字段,表示在npm标准规范的基础上叠加了OpenHarmony npm包。

  • org:类型string。标识npm包的维护主体。默认huawei。

  • directoryLevel:类型string。标识npm包是工程的依赖。默认project。

  • buildTool:类型string。标识OpenHarmony npm包的构建工具是hvigor。默认hvigor。

description:类型string。项目描述简介。

repository:类型object。指定项目存放的地址,如git仓库存放的url。

version:类型string。版本号。

dependencies:类型object。项目运行所需要的依赖(开发和生产都包括在内)。

模块级build-profile.json5

模块级build-profile.json5主要放在对应的模块下,它里面的配置项如下:

{   "apiType": 'stageMode',   "showInServiceCenter": false,   "buildOption": {     "externalNativeOptions": {       "path": "./src/main/cpp/CMakeLists.txt",       "arguments": "-v -DOHOS_STL=c++_shared",       "abiFilters": [          "armeabi-v7a",         "arm64-v8a"      ],       "cppFlags": ""    },     "napiLibFilterOption": {       "pickFirsts": [         "**/1.so"      ],       "pickLasts": [         "**/2.so"      ],       "excludes": [         "**/3.so"      ],       "enableOverride": true    },  },   "targets": [    {       "name": "default",    },    {       "name": "ohosTest",    }  ] }

apiType:类型string。API类型,API 8为FA模型,API 9为Stage模型。

showInServiceCenter:类型boolean。是否在服务中心展示

buildOption:类型object。配置模块在构建过程中使用的相关配置。

  • externalNativeOptions:类型object。cpp相关编译配置。

    • path:类型string。CMake配置文件,提供CMake构建脚本。

    • arguments:类型string。传递给CMake的可选编译参数。

    • abiFilters:类型array。用于设置本机的ABI编译环境。

    • cppFlags:类型string。设置C++编译器的可选参数

  • napiLibFilterOption:类型object。配置筛选har依赖.so资源文件的过滤规则。

    • pickFirsts:类型array。按照.so文件的优先级顺序,打包最高优先级的.so文件。

    • pickLasts:类型array。按照.so文件的优先级顺序,打包最低优先级的.so 文件。

    • excludes:类型array。排除的.so文件。

    • enableOverride:类型boolean。允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件。

targets:类型array。模块对应的产物配置

  • name:类型string。对应指定运行环境抽象产物名。

App.json5

app.json5主要放在AppScope目录下,它里面的配置项如下:

{   "app": {     "bundleName": "com.example.myapplication",     "vendor": "example",     "versionCode": 1000000,     "versionName": "1.0.0",     "icon": "$media:app_icon",     "label": "$string:app_name",     "distributedNotificationEnabled": true,     "debug": true,     "targetAPIVersion": 9,     "minAPIVersion": 8,     "minCompatibleVersionCode": 0,     "apiReleaseType": "Canary1",     "entityType": "media",     "keepAlive": true,     "removable": false,     "singleton": true,     "userDataClearable":false,     "accessible": true,     "phone": {  "minAPIVersion": 8,  "entityType": "media",  "keepAlive": true,  "removable": false,  "singleton": true,  "userDataClearable":false,  "accessible": true  }  } }

app:类型object。应用的全局配置,同一应用的不同.hap文件必须使用相同的应用配置。

  • bundleName:类型string。包名。

  • vendor:类型string。描述应用程序供应商。

  • versionName:类型string。应用版本的文本描述,应用市场等渠道分发的应用显示的版本号。

  • versionCode:类型string。应用程序的versionCode号。大于0的整数。值越大,通常代表较高的版本,系统根据标签值确定应用版本,此版本号不对用户可见,用来让开发者区分真实应用版本。

  • icon:类型string。应用图标。

  • label:类型string。应用名。

  • distributedNotificationEnabled:类型string。描述应用程序是否已分发通知。

  • debug:类型boolean。确定应用程序是否可以调试。

  • targetAPIVersion:类型integer。当前Api版本。

  • minAPIVersion:类型integer。支持的最低Api版本。

  • minCompatibleVersionCode:类型integer。最低兼容历史设备版本号,用于跨设备兼容性判断。

  • apiReleaseType:类型string。用于标识应用运行所需的目标API版本的类型。

  • entityType:类型string。描述应用类型。

  • keepAlive:类型boolean。指定应用程序是否将保持活动状态。

  • removable:类型boolean。描述应用程序是否可以删除。

  • singleton:类型boolean。描述应用程序是否为单例模式。

  • userDataClearable:类型boolean。描述是否允许应用程序清除用户数据。

  • accessible:类型boolean。描述是否访问应用程序安装目录,必须使用stage模式。

module.json5

module.json5主要放在模块的src/main目录下,它里面的配置项如下:

{   "module": {     "name": "entry",     "type": "entry",     "srcEntrance": "./ets/Application/AbilityStage.ts",     "description": "$string:entry_desc",     "process": "",     "mainElement": "MainAbility",     "deviceTypes": [       "phone",       "tablet"    ],     "deliveryWithInstall": true,     "installationFree": false,     "virtualMachine": "default",     "pages": "$profile:main_pages",     "uiSyntax": "ets",     "metadata": [      {         "name": "",         "value": "",         "resource": ""      }    ],     "abilities": [      {         "launchType": "singleton",         "name": "MainAbility",         "srcEntrance": "./ets/MainAbility/MainAbility.ts",         "description": "$string:MainAbility_desc",         "icon": "$media:icon",         "label": "$string:MainAbility_label",         "visible": true,         "skills": [          {             "entities": [               "entity.system.home"            ],             "actions": [               "action.system.home"            ]          }        ]      }    ],     "requestPermissions": []  } }

module:类型object。.hap文件的配置。

  • name:类型string。模块名。

  • type:类型string。模块类型。

    • entry:类型string。应用的主模块。一个APP中,对于同一设备类型必须有且仅有一个entry类型的hap,可独立安装运行。

    • feature:类型string。应用的动态特性模块。一个APP可以包含一个或多个feature类型的hap,也可以不含。只有包含Ability的hap才能够独立运行。

    • har:类型string。应用的依赖模块。可以提供构建应用所需的所有内容,包括源代码、资源文件和配置文件。har不同于hap,har不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

  • srcEntrance:类型string。表示hap对应的入口代码路径。

  • description:类型string。当前.hap文件的描述信息。

  • process:类型string。运行模块的进程名称。

  • mainElement:类型string。当前hap的入口ability名。

  • deviceTypes:类型array。支持的设备类型。

  • deliveryWithInstall:类型boolean。表示当前HAP是否支持随应用安装。

  • installationFree:类型boolean。表示当前HAP是否支持免安装特性,如果此配置项设为true,包名则必须加上.hmservice后缀。

  • virtualMachine:类型string。确定当前运行hap的目标虚拟机的类型。

  • pages:类型string。用于列出组件中使用到的页面。

  • uiSyntax:类型string。ui组件的语法类型。

  • metadata:类型array。元数据。

    • name:类型string。元数据的键。

    • value:类型string。元数据的值。

    • resource:类型string。元数据引用的资源。

abilities:类型array。当前模块中的所有ability。

  • launchType:类型string。表示Ability的启动模式,支持"standard" 、"singleton"两种模式。

    • standard:表示该Ability可以有多实例。“standard”模式适用于大多数应用场景。

    • singleton:表示该Ability所有任务栈中仅可以有一个实例。

  • name:类型string。ability名。

  • srcEntrance:类型string。表示ability对应的入口代码路径。

  • description:类型string。当前ability的描述信息。

  • icon:类型string。当前ability的图标。

  • label:类型string。当前ability的标签。

  • visible:类型boolean。指定该ability是否可以被其他应用程序调用。

  • permissions:类型array。表示其他应用的Ability调用此Ability时需要申请的权限。通常采用反向域名格式,取值可以是系统预定义的权限,也可以是开发者自定义的权限。如果是自定义权限,取值必须与definePermissions标签中定义的某个权限的name标签值一致。

  • skills:类型array。指示ability可以接受的want类型。

    • entities:类型array。表示能够接收的Intent的Ability的类别(如视频、桌面应用等),可以包含一个或多个entity。

    • actions:类型array。表示能够接收的Intent的action值,可以包含一个或多个action。

    • uris:类型array。表示能够接收的Intent的uri,可以包含一个或者多个uri。

      • scheme:类型string。表示uri的scheme值。

      • host:类型string。表示uri的host值。

      • port:类型string。表示uri的port值。

      • path:类型string。表示uri的path值。

      • type:类型string。表示uri的type值。

  • backgroundModes:类型array。表示后台服务的类型,可以为一个服务配置多个后台服务类型。该标签仅适用于service类型的Ability。

    • dataTransfer:通过网络/对端设备进行数据下载、备份、分享、传输等业务。

    • audioPlayback:音频输出业务。

    • audioRecording:音频输入业务。

    • location:定位、导航业务。

    • bluetoothInteraction:蓝牙扫描、连接、传输业务。

    • multiDeviceConnection:多设备互联业务。

    • wifiInteraction:WLAN扫描、连接、传输业务。

    • taskKeeping:任务保持业务。

  • continuable:类型boolean。ability是否能被迁移。

definePermissions:类型object。应用程序定义的权限。

  • name:类型string。权限名称。为最大可能避免重名,采用反向域公司名+应用名+权限名组合。

  • grantMode:类型string。权限授予方式。未填值或填写了取值范围以外的值时,自动赋予默认值system_grant。不允许第三方应用填写user_grant,填写后会自动赋予默认值。

    • system_grant:安装后系统自动授予。

    • user_grant:在使用时动态申请,用户授权后才可使用。

  • availableLevel:类型string。权限级别。

    • system_core:该等级的应用服务提供操作系统核心能力。

    • system_basic:该等级的应用服务提供系统基础服务。

    • normal:普通应用。

  • label:类型string。权限标签。

  • description:类型string。权限的详细描述。

  • provisionEnable:类型boolean。是否支持证书方法申请权限。

  • distributedSceneEnable:类型string。是否支持分布式场景使用该权限。

requestPermissions:类型array。应用运行时向系统申请的权限。

  • name:类型string。填写需要使用的权限名称。

  • reason:类型string。当申请的权限为user_grant权限时此字段必填。描述申请权限的原因。

  • usedScene:类型object。当申请的权限为user_grant权限时此字段必填。描述权限使用的场景和时机。

    • ability:类型array。ability的名称。

    • when:类型string。inuse(使用时)、always(始终)。

extensionAbilities:类型array。当前模块中的所有扩展ability。

  • name:类型string。扩展名。

  • srcEntrance:类型string。表示扩展对应的入口代码路径。

  • icon:类型string。当前扩展的图标。

  • label:类型string。当前扩展的标签。

  • description:类型string。当前扩展的描述信息。

  • type:类型string。扩展类型。

    • form:表单。

    • workScheduler:任务调度。

    • inputMethod:输入法。

    • service:服务。

    • accessibility:辅助功能。

    • dataShare:数据共享。

    • fileshare:文件共享。

    • staticSubscriber:静态订阅通知。

    • wallpaper:壁纸。

  • permissions:类型array。表示其他应用的Ability调用此扩展时需要申请的权限。

  • uri:类型string。标识为当前扩展提供的URI数据。

  • readPermission:类型string。表示读取扩展的数据所需的权限。

  • writePermission:类型string。表示向扩展写数据所需的权限。

  • visible:类型boolean。指定该扩展是否可以被其他应用程序调用。

  • skills:类型array。指示扩展可以接受的want类型。

    • entities:类型array。表示能够接收的Intent的Ability的类别(如视频、桌面应用等),可以包含一个或多个entity。

    • actions:类型array。表示能够接收的Intent的action值,可以包含一个或多个action。

    • uris:类型array。表示能够接收的Intent的uri,可以包含一个或者多个uri。

      • scheme:类型string。表示uri的scheme值。

      • host:类型string。表示uri的host值。

      • port:类型string。表示uri的port值。

      • path:类型string。表示uri的path值。

      • type:类型string。表示uri的type值。

     

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐