鸿蒙开发-构建第一个鸿蒙应用程序

前 言

在2020年9月10日的华为开发者大会上,华为方面将自家的华为鸿蒙系统升级至华为鸿蒙系统2.0版本,即 HarmonyOS 2.0。余承东表示,2020年12月份将面向开发者提供鸿蒙2.0的 beta 版本。不过目前只支持手表和智慧屏(TV)的版本,预计今年年底才支持手机的版本。

HarmonyOS 系统定义

HarmonyOS 是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。

  • 对消费者而言,HarmonyOS 能够将生活场景中的各类终端进行能力整合,形成一个“超级虚拟终端”,可以实现不同的终端设备之间的快速连接、能力互助、资源共享,匹配合适的设备、提供流畅的全场景体验;
  • 对应用开发者而言,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,直至安装完成。如下图:

鸿蒙开发-构建第一个鸿蒙应用程序_第1张图片
接着就是配置开发环境的操作,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 包。

  • 在菜单栏点击 Configure > Settings 或者默认快捷键 Ctrl+Alt+S,打开 Settings 配置界面;
  • 进入 Appearance&Behavior > System Settings > HarmonyOS SDK 菜单界面,点击 Edit 按钮,设置 HarmonyOS SDK 存储路径;

如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第2张图片

  • 选择 HarmonyOS SDK 存储路径,然后点击 Next 。在弹出的 License Agreement 窗口,点击 Accept 开始下载 SDK;
  • 等待 HarmonyOS SD K及工具下载完成,点击 Finish,可以看到默认的 SDK Platforms>Java SDK及SDK Tools>Toolchains 已完成下载。

题外话,DevEco Studio 和开发 Android 程序用的 Android Studio 都是基于 IntelliJ IDEA 社区版二次开发的,所以对用过 Android Studio 或者 IntelliJ IDEA 的开发者来说使用 DevEco Studio 应该比较容易上手。

构建并运行第一个程序

  • 首先打开 DevEco Studio,在欢迎页点击 Create HarmonyOS Project,创建一个新工程;
  • 选择设备类型和模板,以 TV 为例,选择 Empty Feature Ability(Java),点击 Next。如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第3张图片

  • 填写项目相关信息,保持默认值即可,点击 Finish。如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第4张图片

  • 在 DevEco Studio 菜单栏,点击 Tools > HVD Manager。首次使用模拟器,需下载模拟器相关资源,请点击 OK,等待资源下载完成后,点击模拟器界面左下角的 Refresh 按钮;

  • 在浏览器中弹出华为帐号登录界面,请输入已实名认证的华为帐号的用户名和密码进行登录;

  • 登录后,请点击界面的允许按钮进行授权。如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第5张图片

  • 因为刚才创建的是 TV 项目,所以在设备列表中,选择 TV 设备,并点三角按钮,运行模拟器。如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第6张图片

  • 点击 DevEco Studio 工具栏中的点击三角按钮运行工程,或使用默认快捷键 Shift+F10 运行工程;

  • 在弹出的Select Deployment Target界面选择Connected Devices,点击OK按钮;

  • DevEco Studio会启动应用的编译构建,完成后应用即可运行在Remote Device上。如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第7张图片

工程及代码分析

在 DevEco Studio 创建 HarmonyOS Java 项目时,默认生成的Java工程目录结构如下图所示:

鸿蒙开发-构建第一个鸿蒙应用程序_第8张图片

  • .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 ————————

码字不易,如果您觉得这篇博客写的比较好的话,可以赞赏一杯咖啡吧~~
在这里插入图片描述


你可能感兴趣的:(鸿蒙开发随笔,移动开发,鸿蒙,HarmonyOS,华为,java)