HarmonyOS APP 工程结构

4ec778202f2de037949c0c4e91f5ff71.png

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

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

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

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

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

工程目录结构对比

[$]

HarmonyOS 采用Java语言的工程目录结构如下图所示:

fc6f2b71030c719cf583720a748f5a3c.png

Android 工程目录如下图所示:

572cf79f0c4243ae97cfe8baa70da6c3.png

HarmonyOS 采用Java语言的工程目录结构 和 Android 工程目录结构对比如下:

目录结构AndroidHarmonyOS

源码目录project\entry\src\main\javaproject\app\src\main\java

资源文件目录project\app\src\main\resproject\entry\src\main\resources

清单文件project\app\src\main\AndroidManifest.xmlproject\entry\src\main\config.json

依赖文件目录project\app\libsproject\entry\libs

模块编译配置文件project\app\build.gradleproject\entry\build.gradle

gradle目录project\gradleproject\gradle

另外,HarmonyOS 还可以采用 Javascript 语言进行编写,工程目录结构如下图所示:

5d583cb074dd8fe061c98cc7a05a0d32.png

pages 目录:

pages 文件夹下可以包含1个或多个页面,每个页面都需要创建一个文件夹(如图中的index)。页面文件夹下主要包含3中文件类型:css、js和htm文件

pages/index/index.html 文件 :该html文件定义了页面的布局结构,使用到的组件,以及这些组件的层级关系。

pages/index/index.css 文件:该css文件定义了页面的样式与布局,包含样式选择器和各种样式属性 。

pages/index/index.js 文件: 该js文件描述了页面的行为逻辑,此文件里定义了页面里所用到的所有逻辑关系,比如数据、事件等。

app.js 目录:

该文件是全局的 Javascript 逻辑文件和应用的生命周期管理。

安装包内部对比

Android开发的小伙伴都知道,Android应用最终会被打包成 .apk文件,.apk也是Android 应用的安装包后缀。那么对于 HarmonyOS 应用,它的安装包到底是什么呢?

采用 HarmonyOS 开发的应用会被构建成 .hap文件,.hap是由代码、资源、第三方库及应用配置文件组成的模块包。

不同的 hap 可被部署到不同类型的设备上,那 hap 的内部结构 又是怎么样子的呢?

hap 和 apk 类似都是应用的归档文件,都是 基于的 ZIP 文件格式,你可以将后缀名改为.zip文件,然后对其进行解压,得到最终文件

.apk文件解压以后的文件如下图所示:

774412ab941e38a401409649a61776fe.png

.hap 文件解压以后的文件如下图所示:

3a2ccde24f4c2fa6ccfc5c21451b8b4d.png

清单文件对比

清单文件是开发一款应用必不可少的构成部分,接下来我们来对比下鸿蒙OS的清单文件和Android清单文件的异同。

在Android中的清单文件为 AndroidManifest.xml文件,而 鸿蒙OS的清单文件为 config.json

接下来我们来通过对比同一款应用的config.json与AndroidManifest.xml文件,来看下两者之间的异同:

config.json文件

{

"app": {

"bundleName": "com.example.helloword",

"vendor": "example",

"version": {

"code": 1,

"name": "1.0"

},

"apiVersion": {

"compatible": 3,

"target": 3

}

},

"deviceConfig": {},

"module": {

"package": "com.example.helloword",

"name": ".HelloWord",

"reqCapabilities": [

"video_support"

],

"deviceType": [

"tv"

],

"distro": {

"deliveryWithInstall": true,

"moduleName": "entry",

"moduleType": "entry"

},

"abilities": [

{

"skills": [

{

"entities": [

"entity.system.home"

],

"actions": [

"action.system.home"

]

}

],

"orientation": "landscape",

"formEnabled": false,

"name": "com.example.helloword.MainAbility",

"icon": "$media:icon",

"description": "$string:mainability_description",

"label": "HelloWord",

"type": "page",

"launchType": "standard"

},

{

"orientation": "landscape",

"name": "com.example.helloword.MeAbility",

"icon": "$media:icon",

"description": "$string:meability_description",

"label": "entry",

"type": "page",

"launchType": "standard"

}

]

}

}

AndroidManifest.xml

package="com.hbkykj.helloword">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

鸿蒙OS应用的配置文件“config.json”中由“app”、“deviceConfig”和“module”三个部分组成,缺一不可。

app :表示应用的全局配置信息。同一个应用的不同HAP包的“app”配置必须保持一致

deviceConfig:表示应用在具体设备上的配置信息。

module:表示HAP包的配置信息。该标签下的配置只对当前HAP包生效

[/$]

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐