一、下载与安装 DevEco Studio
要进行 HarmonyOS 开发,必须要切换开发工具了,菊花厂基于 IntelliJ IDEA Community 开源版本打造新打造了一个面向华为终端全场景多设备的一站式集成开发环境(IDE):DevEco Studio。
进入 DevEco Studio 官网下载。
DevEco Studio提供了 Windows 版本和 Mac 版本选择,可以根据操作系统选择对应的版本进行下载。关于安装的方法以及配套环境设置等,就不在文章里面输出了,大家去官网查看。
根据官方指导创建好第一个应用后,还是要仔细研究一下它的整个工程目录架构,有助于我们后续的开发工作。
二、基本工程目录
2.1 工程级目录
跟传统的 Android 项目目录对比,还是有很大区别的(起码名字上改的面目全非)。
我们详细看一下:
工程级目录 | 作用 |
---|---|
AppScope | 存放应用全局所需要的资源文件/全局配置文件 |
entry | 应用的主模块,存放 HarmonyOS 应用的代码、资源等 |
hvigor | 基于任务管理机制实现的一款全新的自动化构建工具,主要提供任务注册编排,工程模型管理、配置管理等核心能力 |
oh_module | 工程的依赖包,存放工程依赖的源文件 |
build-profile.json5 | 工程级配置信息,包括签名、产品配置等 |
hvigorfile.ts | 工程级编译构建任务脚本 |
oh-package.json5 | 工程级依赖配置文件,用于记录引入包的配置信息 |
在 AppScope,其中有 resources 文件夹和配置文件 app.json5。
# AppScope > resources
AppScope>resources>base中包含 element
和 media
两个文件夹。
AppScope | |
---|---|
element | 主要存放公共的字符串、布局文件等资源 |
media | 存放全局公共的多媒体资源文件 |
# AppScope > app.json5
app.json5 是应用的全局的配置文件,用于存放应用公共的配置信息,你可以把它理解为类似项目级别的 build.gradle。
{
"app": {
"bundleName": "com.example.firstharmonyproject", // 包名
"vendor": "example", // 应用程序供应商
"versionCode": 1000000, // 用于区分应用版本
"versionName": "1.0.0", // 版本号
"icon": "$media:app_icon", // 对应于应用的显示图标
"label": "$string:app_name" // 应用名
}
}
2.2 模块级目录
模块级目录 | 作用 |
---|---|
src | 主要包含总的 main 文件夹,单元测试目录 ohosTest,以及模块级的配置文件 |
main | - |
etc | 用于存放ets代码 |
entryability | 存放ability文件,用于当前ability应用逻辑和生命周期管理 |
pages | 存放UI界面相关代码文件,初始会生成一个Index页面 |
resources | 存放模块内的多媒体、字符串及布局文件等资源 |
module.json5 | 模块的配置文件 |
ohosTest | 单元测试目录 |
build-profile.json5 | 模块级配置信息,包括编译构建配置项 |
hvigorfile.ts | 模块级构建脚本 |
oh-package.json5 | 是模块级依赖配置信息文件 |
# entry > module.json5
module.json5 是模块的配置文件,包含当前模块的配置信息,你可以把它理解为类似应用级别的 build.gradle。
{
// module对应的是模块的配置信息,一个模块对应一个打包后的 hap 包 ( HarmonyOS Ability Package ),
// 其中包含了 ability、第三方库、资源和配置文件。
"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:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
]
}
}
我们看下 module.json5 的默认配置属性:
属性 | 描述 |
---|---|
name | 该标签标识当前 module 的名字,module 打包成 hap 后,表示 hap 的名称,标签值采用字符串表示(最大长度31个字节),该名称在整个应用要唯一 |
type | 表示模块的类型,类型有三种,分别是entry、feature和har |
srcEntry | 当前模块的入口文件路径 |
description | 当前模块的描述信息 |
mainElement | 该标签标识 hap 的入口 ability 名称或者 extension 名称。只有配置为 mainElement 的 ability 或者 extension 才允许在服务中心露出 |
deviceTypes | 该标签标识 hap 可以运行在哪类设备上,标签值采用字符串数组的表示 |
deliveryWithInstall | 标识当前 Module 是否在用户主动安装的时候安装,表示该 Module 对应的 HAP 是否跟随应用一起安装 - true:主动安装时安装 - false:主动安装时不安装 |
installationFree | 标识当前 Module 是否支持免安装特性 - true:表示支持免安装特性,且符合免安装约束 - false:表示不支持免安装特性 |
pages | 对应的是 main_pages.json 文件,用于配置 ability 中用到的 page 信息 |
abilities | 是一个数组,存放当前模块中所有的 ability 元能力的配置信息,其中可以有多个 ability |
name | 该标签标识当前 ability 的逻辑名,该名称在整个应用要唯一,标签值采用字符串表示(最大长度127个字节) |
srcEntry | ability的入口代码路径 |
description | ability的描述信息 |
icon | 该标签标识 ability 图标,标签值为资源文件的索引。该标签可缺省,缺省值为空。如果ability被配置为MainElement,该标签必须配置 |
label | ability的标签名 |
startWindowIcon | 启动页面的图标 |
startWindowBackground | 启动页面的背景色 |
exported | ability 是否可以被其他应用程序调用 - true:表示可以被其它应用调用 - false:表示不可以被其它应用调用 |
skills | 标识能够接收的意图的 action 值的集合,取值通常为系统预定义的 action 值,也允许自定义 |
entities | 标识能够接收的Want的Action值的集合,取值通常为系统预定义的action值,也允许自定义 |
actions | 标识能够接收Want的Entity值的集合 |
# entry > main_pages.json
src/main/resources/base/profile/main_pages.json 文件保存的是页面 page 的路径配置信息,所有需要进行路由跳转的 page 页面都要在这里进行配置。
{
"src": [
"pages/Index",
"pages/Second"
]
}