在2020年9月10日的华为开发者大会上,华为方面将自家的华为鸿蒙系统升级至华为鸿蒙系统2.0版本,即 HarmonyOS 2.0。余承东表示,2020年12月份将面向开发者提供鸿蒙2.0的 beta 版本。不过目前只支持手表和智慧屏(TV)的版本,预计今年年底才支持手机的版本。
HarmonyOS 是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
俗话说:“工欲善其事,必先利其器。”那么一个好的开发环境对构建应用的开发是至关重要,开发 HarmonyOS 应用程序是使用到 DevEco Studio ,那么首先先到 HarmonyOS 官网下载安装包,下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio
下面以 Windows 系统为例,当安装包下载完成后接着就是安装 DevEco Studio 的操作。
首先双击下载的“deveco-studio-xxxx.exe”,进入 DevEco Studio 安装向导,在如下安装选项界面勾选 DevEco Studio launcher 后,点击 Next,直至安装完成。如下图:
接着就是配置开发环境的操作,DevEco Studio 开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用。
下载 HarmonyOS SDK,Devco Studio 提供 SDK Manager 统一管理 SDK 及工具链,下载各种编程语言的 SDK 包时,SDK Manager 会自动下载该 SDK 包依赖的工具链,我们这里只用到 Java SDK ,所以只需下载 Java SDK 即可。需要注意的是,HarmonyOS 支持 Java、JavaScript 以及 C/C++ 语言的开发。首次下载 HarmonyOS SDK 时,只会默认下载 Java SDK 和 Toolchains。因此,如果还需要使用 JS 或 C/C++ 语言开发应用时,需手动下载对应的 SDK 包。
如下图所示:
题外话,DevEco Studio 和开发 Android 程序用的 Android Studio 都是基于 IntelliJ IDEA 社区版二次开发的,所以对用过 Android Studio 或者 IntelliJ IDEA 的开发者来说使用 DevEco Studio 应该比较容易上手。
在 DevEco Studio 菜单栏,点击 Tools > HVD Manager。首次使用模拟器,需下载模拟器相关资源,请点击 OK,等待资源下载完成后,点击模拟器界面左下角的 Refresh 按钮;
在浏览器中弹出华为帐号登录界面,请输入已实名认证的华为帐号的用户名和密码进行登录;
登录后,请点击界面的允许按钮进行授权。如下图所示:
点击 DevEco Studio 工具栏中的点击三角按钮运行工程,或使用默认快捷键 Shift+F10 运行工程;
在弹出的Select Deployment Target界面选择Connected Devices,点击OK按钮;
DevEco Studio会启动应用的编译构建,完成后应用即可运行在Remote Device上。如下图所示:
在 DevEco Studio 创建 HarmonyOS Java 项目时,默认生成的Java工程目录结构如下图所示:
.gradle:Gradle配置文件,由系统自动生成,一般情况下不需要进行修改。
entry:默认启动模块(主模块),开发者用于编写源码文件以及开发资源文件的目录。
entry>libs:用于存放entry模块的依赖文件。
entry>.gitgnore:标识git版本管理需要忽略的文件。
entry>build.gradle:entry模块的编译配置文件。
entry>src>main>Java:用于存放Java源码。
entry>src>main>resources:用于存放资源文件。
entry>src>main>config.json:HAP清单文件。
entry>src>test:编写测试文件的目录。
项目工程生成 Java 代码文件有三个,分别是 TestDemo(项目名称).java、MainAbility.java 以及 MainAbilitySlice.java.。
TestDemo.java代码如下:
import ohos.aafwk.ability.AbilityPackage;
public class TestDemo extends AbilityPackage {
@Override
public void onInitialize() {
super.onInitialize();
}
}
本人还没来得急看 HarmonyOS 源码,不过我猜这个文件的作用类似 Android 工程中的 Application,相对于应用程序启动时的入口。
MainAbility.java代码如下:
import com.example.testdemo.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
}
}
这个文件继承于 Ability,Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability),HarmonyOS支持应用以Ability为单位进行部署。Ability可以分为FA(Feature Ability)和PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。
MainAbilitySlice.java代码如下:
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.DirectionalLayout.LayoutConfig;
import ohos.agp.components.Text;
import ohos.agp.colors.RgbColor;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.agp.utils.TextAlignment;
public class MainAbilitySlice extends AbilitySlice {
private DirectionalLayout myLayout = new DirectionalLayout(this);
@Override
public void onStart(Intent intent) {
super.onStart(intent);
LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT);
myLayout.setLayoutConfig(config);
ShapeElement element = new ShapeElement();
element.setRgbColor(new RgbColor(255, 255, 255));
myLayout.setBackground(element);
Text text = new Text(this);
text.setLayoutConfig(config);
text.setText("_彼岸雨敲窗_构建的第一个鸿蒙应用程序");
text.setTextColor(new Color(0xFF000000));
text.setTextSize(50);
text.setTextAlignment(TextAlignment.CENTER);
myLayout.addComponent(text);
super.setUIContent(myLayout);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
这个文件中作用类似于 Android 工程中的 Activity,其中覆写 MainAbilitySlice 的生命周期 onStart(Intent intent) 相当于 Activity 的 onCreate(Bundle savedInstanceState) 的生命周期。MainAbilitySlice 中 super.setUIContent(myLayout) 这行代码的作用是加载布局文件,类似于 Android 中的 Activity 的 setContentView(R.layout.activity_main)。在代码中首先先构建一个方向布局(DirectionalLayout),这个方向布局类似于Android中的线性布局(LinearLayout);myLayout.setLayoutConfig(config)是设置布局属性,比如布局的宽和高等;myLayout.setBackground(element)是设置布局的背景颜色;Text是文本控件,和Android中的TextView控件类似;text.setLayoutConfig(config)是设置文本控件的属性,比如文本控件的宽和高等;text.setText("")是设置文本的内容;text.setTextColor(new Color(0xFF000000))是设置文本的颜色;text.setTextSize(50)是设置文本的大小;text.setTextAlignment(TextAlignment.CENTER)是设置文本的对齐方式;myLayout.addComponent(text)的作用是将文本添加到布局文件中;super.setUIContent(myLayout)是将布局文件添加到界面上。
虽然 HarmonyOS 2.0 的推出在网上争议很大, HarmonyOS Java API 和 Android API 有很多相似之处,有不少 Android 原生开发者质疑是不是 HarmonyOS 直接是 Android 的“换皮”而已,或者是直接“抄袭” Android 系统的源码。不过,我们暂且不讨论这个问题,毕竟站在巨人的肩膀上做创新没有什么不好的。
让我们国内的开发者一起来拥抱鸿蒙吧,一起来为鸿蒙应用生态做贡献吧!
———————— The end ————————
码字不易,如果您觉得这篇博客写的比较好的话,可以赞赏一杯咖啡吧~~