OpenHarmony应用工程详解
前言
在进行OpenHarmony应用开发前,应该掌握OpenHarmony应用的逻辑结构,并且了解应用的基础配置文件,从而能更加高效的进行应用开发。
工程简介
OpenHarmony应用发布形态为APP Pack(Application Package,简称APP),它是由一个或多个HAP(OpenHarmony Ability Package)包以及描述APP Pack属性的pack.info文件组成。
-
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值。
-
-
更多推荐
所有评论(0)