HarmonyOS环境搭建
HarmonyOS环境搭建
HarmonyOS环境搭建
第一节:注册华为开发者账号
华为开发者联盟将调动华为全球化平台和产业链资源,从应用推广、开发支持、应用变现、品牌宣传等方面为联盟成员提供业务发展机会,助力联盟成员提升在移动互联网领域的合作创新能力,为华为智能手机消费者打造卓越用户体验,实现共赢。
注册这个开发者,一是为了自己app可以在商店上线;二是为了得到自己客户群体。
要想注册成为华为开发者的会员,可以按照以下步骤进行注册完成。
第一步:输入https://developer.huawei.com/cn/网址,显示如下:
点击 HUAWEI MOBILE SERVICES 第一个按钮,进入开发者联盟的官网。
第二步:注册开发者账号有两种方式:
第一种是:手机号注册
第二种是:邮件地址注册
手机注册成功了,需要实名认证一下。
需要提交银行卡的相关信息。
第二节:搭建鸿蒙开发环境
2.1、搭建开发环境流程
DevEco Studio支持Windows系统和macOS系统,在开发HarmonyOS应用前,您需要准备HarmonyOS应用的开发环境。环境准备流程如下所示:
HUAWEI DevEco Studio (获取工具请点击链接下载,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用开发服务。通过使用DevEco Studio,开发者可以更高效的开发具备HarmonyOS分布式能力的应用,进而提升创新效率。
作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点:
- 多设备统一开发环境 :支持多种HarmonyOS设备的应用开发,包括手机(Phone)、平板(Tablet)、车机(Car)、智慧屏(TV)、智能穿戴(Wearable),轻量级智能穿戴(LiteWearable)和智慧视觉(Smart Vision)设备。
- 支持多语言的代码开发和调试 :包括Java、XML(Extensible Markup Language)、C/C++ 、 JS(JavaScript)、CSS(Cascading Style Sheets)和HML(HarmonyOS Markup Language)。
- 支持FA(Feature Ability)和PA(Particle Ability)快速开发 :通过工程向导快速创建FA/PA工程模板,一键式打包成HAP(HarmonyOS Ability Package)。
- 支持分布式多端应用开发 :一个工程和一份代码可跨设备运行,支持不同设备界面的实时预览和差异化开发,实现代码的最大化重用。
- 支持多设备模拟器 :提供多设备的模拟器资源,包括手机、平板、车机、智慧屏、智能穿戴设备的模拟器,方便开发者高效调试。
- 支持多设备预览器 :提供JS和Java预览器功能,可以实时查看应用的布局效果,支持实时预览和动态预览;同时还支持多设备同时预览,查看同一个布局文件在不同设备上的呈现效果。
2.2、HUAWEI DevEco Studio 安装步骤
下载和安装DevEco Studio
DevEco Studio的编译构建依赖JDK,DevEco Studio预置了Open JDK,版本为1.8,安装过程中会自动安装JDK。
Windows环境下安装:
- 进入
,点击下载列表后的
按钮,下载DevEco Studio。
- 下载完成后,双击下载的“deveco-studio-xxxx.exe”,进入DevEco Studio安装向导,在如下安装选项界面勾选 64-bit launcher 后,点击 Next ,直至安装完成。
- 安装完成后,点击Finish完成安装。
Mac环境下安装
DevEco Studio的编译构建依赖JDK,DevEco Studio预置了Open JDK,版本为1.8,安装过程中会自动安装JDK。
- 进入
,点击下载列表后的
按钮,下载DevEco Studio。
- 下载完成后,双击下载的“deveco-studio-xxxx.dmg”软件包。
- 在安装界面中,将“ DevEco-Studio.app ”拖拽到“ Applications ”中,等待安装完成
2.3、下载HarmonyOS SDK
DevEco Studio提供SDK Manager统一管理SDK及工具链,下载各种编程语言的SDK包时,SDK Manager会自动下载该SDK包依赖的工具链。
1、运行已安装的DevEco Studio,首次使用,请选择Do not import settings,点击OK。
2、根据向导设置国家/区域,然后点击Start using DevEco Studio。
3、工具会自动检查本地路径下是否存在HarmonyOS SDK,如果不存在,会弹出如下向导,提示下载HarmonyOS SDK。
4、默认情况下,SDK会下载到user目录下,您也可以指定对应的存储路径(不支持中文字符),然后点击Next。
5、默认会下载最新版本的HarmonyOS Java语言SDK和Toolchains。在弹出的License Agreement窗口,点击Accept开始下载SDK。
说明如果本地已有SDK包,请选择本地已有SDK包的存储路径,DevEco Studio会增量更新SDK及工具链。
6、等待HarmonyOS SDK及工具下载完成,点击Finish,界面会进入到DevEco Studio欢迎页。
7、SDK默认会下载HarmonyOS Java语言SDK和Toolchains,点击上图欢迎页中的Configure(或图标) > Settings,进入HarmonyOS SDK页面。
8、如果工程还会用到JS、C/C++语言和预览器,请在“SDK Platforms”中,勾选对应的SDK包,在“SDK Tools”中勾选Previewer,然后点击Apply,SDK Manager会自动将SDK包和预览器工具链,下载到3中设置的SDK存储路径中。
2.4、创建工程
DevEco Studio开发环境配置完成后,可以通过运行HelloWorld工程来验证环境设置是否正确。以Phone工程为例,在Phone的远程模拟器中运行该工程。
创建一个新工程
1、打开DevEco Studio,在欢迎页点击Create HarmonyOS Project,创建一个新工程。
2、选择设备类型和模板,以Phone为例,选择Empty Feature Ability(Java),点击Next。
3、配置工程的基本信息
2.5、运行工程
1、在DevEco Studio菜单栏,点击Tools > HVD Manager。
2、在浏览器中弹出华为开发者联盟帐号登录界面,请输入已实名认证的华为开发者联盟帐号的用户名和密码进行登录(查看远程模拟器登录常见问题)。
说明
推荐使用Chrome浏览器,如果使用Safari、360等其他浏览器,要取消阻止跨站跟踪和阻止所有Cookie功能。
3、登录后,请点击界面的允许按钮进行授权
4、启动模拟器
5、运行结果如下
第三节:HarmonyOS 项目结构
3.1、用户应用程序包结构
HarmonyOS的用户应用程序包以APP Pack(Application Package)形式发布,它是由一个或多个HAP(HarmonyOS Ability Package)以及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。
一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型,如 所示。
- entry :应用的主模块。一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。
- feature :应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。
Ability
Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:FA(Feature Ability)和PA(Particle Ability)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。
库文件
库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录。
资源文件
应用的资源文件(字符串、图片、音频等)存放于resources目录下,便于开发者使用和维护
配置文件
配置文件 (config.json) 是应用的Ability信息,用于声明应用的Ability,以及应用所需权限等信息
3.2、程序目录结构
首先有一个entry目录,结合上篇的内容,我们知道一个应用是由一个或多个Hap包所组成的,Hap包又可以分为entry类型和feature类型,每个Hap包由:代码、资源、第三方库及应用配置文件组成。所以我们代码中的entry目录其实就一个应用的Hap包,它的类型的entry类型的Hap包。一个Hap包由代码、资源、第三方库及应用配置文件组成,接着我们来看这些资源,代码等都分布在entry包的哪里。
在src/main/java下以包名命名的文件夹内分布着Java代码。这里的代码可以用来创建布局,动态调整布局以及为交互提供支撑服务。
和java文件夹同级的resources目录下分布应用资源,该目录的base目录下,按资源用途又分为多个文件夹资源:
element:表示元素资源,该文件夹下主要存放json格式的文件,主要用来表示 字符串、颜色值、布尔值等,可以在其他地方被引用
graphic:表示可绘制资源。用xml文件来表示,比如我们项目中设置的 圆角按钮、按钮颜色等都是通过引用这里的资源来统一管理的
layout:表示布局资源,用xml文件来表示,比如页面的布局资源,都放在这里
media:表示媒体资源,包括图片、音频、视频等非文本格式的文件。
config.json项目配置文件:
每一个hap包下都包含了该hap包的配置信息,这个配置文件位于:entry/src/main/目录下,由工具帮我们生成,命名为config.json,harmonyOS应用配置采用json格式的形式。下面我们来看一下这个配置文件中的内容,并简要介绍一下配置的作用。该配置文件中,主要有三个模块,如下所示:
app:表示应用的全局配置信息。同一个应用的不同HAP包的“app”配置必须保持一致。
deviceConfig:表示应用在具体设备上的配置信息。
module:表示HAP包的配置信息。该标签下的配置只对当前HAP包生效。
bundleName:表示应用的包名,用于标识应用的唯一性。通常采用反转的域名
vendor:表示开发应用的厂商
version:code表示内部版本号,用于系统管理版本使用,对用户不可见,name表示应用的版本号,用于向用户呈现
apiVersion:包含三个选项。
compatible:表示应用运行需要的API最小版本。
target:表示应用运行需要的API目标版本。
releaseType:表示应用运行需要的API目标版本的类型,取值为“CanaryN”、“BetaN”或者“Release”,其中,N代表大于零的整数。
Canary:受限发布的版本。
Beta:公开发布的Beta版本。
Release:公开发布的正式版本。
第四节:HarmonyOS快速入门
4.1、创建xml布局文件
第一个页面内有一个文本和一个按钮,使用DependentLayout布局,通过Text和Button组件来实现,其中vp和fp分别表示虚拟像素和字体像素。“ability_main.xml”的示例代码如下:
<?xml version="1.0" encoding="utf-8"?>
<DependentLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent">
<Text
ohos:id="$+id:text"
ohos:width="match_content"
ohos:height="match_content"
ohos:text="Hello World"
ohos:text_color="#000000"
ohos:text_size="32fp"
ohos:center_in_parent="true"/>
<Button
ohos:id="$+id:button"
ohos:width="match_content"
ohos:height="match_content"
ohos:text="Next"
ohos:text_size="19fp"
ohos:text_color="#FFFFFF"
ohos:top_padding="8vp"
ohos:bottom_padding="8vp"
ohos:right_padding="70vp"
ohos:left_padding="70vp"
ohos:center_in_parent="true"
ohos:below="$id:text"
ohos:background_element="$graphic:background_button"
ohos:margin="10vp"/>
</DependentLayout>
按钮的背景是蓝色胶囊样式,可以通过graphic目录下的XML文件来设置。
右键点击“graphic”文件夹,选择“New > File”,命名为“background_button.xml”,单击回车键。
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:shape="rectangle">
<corners
ohos:radius="100"/>
<solid
ohos:color="#007DFF"/>
</shape>
4.2、创建主程序
package com.sudojava.firstdemo.slice;
import com.sudojava.firstdemo.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
public class MainAbilitySlice extends AbilitySlice {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
Button button = (Button) findComponentById(ResourceTable.Id_button);
// 点击按钮跳转至第二个页面
button.setClickedListener(listener -> present(new SecondAbilitySlice(), new Intent()));
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
4.3、创建另一个界面
package com.sudojava.firstdemo.slice;
import com.sudojava.firstdemo.MainAbility;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.colors.RgbColor;
import ohos.agp.components.DependentLayout;
import ohos.agp.components.Text;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
public class SecondAbilitySlice extends AbilitySlice {
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
//声明布局
DependentLayout layout = new DependentLayout(this);
//设置布局的宽度和高度
layout.setWidth(DependentLayout.LayoutConfig.MATCH_PARENT);
layout.setHeight(DependentLayout.LayoutConfig.MATCH_CONTENT);
ShapeElement shapeElement = new ShapeElement();
shapeElement.setRgbColor(new RgbColor(255,255,255));
layout.setBackground(shapeElement);
Text text = new Text(this);
text.setText("Hi Here");
text.setWidth(DependentLayout.LayoutConfig.MATCH_PARENT);
text.setTextSize(100);
text.setTextColor(Color.BLACK);
// 设置文本的布局
DependentLayout.LayoutConfig textConfig = new DependentLayout.LayoutConfig(DependentLayout.LayoutConfig.MATCH_CONTENT, DependentLayout.LayoutConfig.MATCH_CONTENT);
textConfig.addRule(DependentLayout.LayoutConfig.CENTER_IN_PARENT);
text.setLayoutConfig(textConfig);
layout.addComponent(text);
super.setUIContent(layout);
}
}