2021年6月2日晚,华为正式发布HarmonyOS 2及多款搭载HarmonyOS 2的新产品。这也意味着“搭载HarmonyOS(鸿蒙)的手机”已经变成面向市场的正式产品。6月9日,“HarmonyOS Sans”公开上线,可以免费商用。

那么,鸿蒙系统究竟是什么呢?

鸿蒙系统(HarmonyOS)定位

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

  • 对消费者而言,HarmonyOS能够将生活场景中的各类终端进行能力整合,可以实现不同的终端设备之间的快速连接、能力互助、资源共享,匹配合适的设备、提供流畅的全场景体验。
  • 对应用开发者而言,HarmonyOS采用了多种分布式技术,使得应用程序的开发实现与不同终端设备的形态差异无关。这能够让开发者聚焦上层业务逻辑,更加便捷、高效地开发应用。
  • 对设备开发者而言,HarmonyOS采用了组件化的设计方案,可以根据设备的资源能力和业务特征进行灵活裁剪,满足不同形态的终端设备对于操作系统的要求。

鸿蒙系统代码开发支持的语言

HarmonyOS代码开发支持多语言,包括Java、XML(Extensible Markup Language)、C/C++ 、 JS(JavaScript)、CSS(Cascading Style Sheets)和HML(HarmonyOS Markup Language)。

搭建鸿蒙应用开发环境

开发一款鸿蒙应用,首先就需要开发鸿蒙应用的IDE。开发HarmonyOS应用使用的IDE是DevEco Studio,目前支持Windows(64-bit)和Mac平台。
点击跳转至DevEco Studio下载页面

我的电脑系统是Windows,所以下面以Windows版本为例,讲解安装DevEco Studio的操作。

下载完成后,双击下载的"deveco-studio-x.x.x.xxx.exe",运行DevEco Studio安装向导。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android

点击Next进入下一步。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_02

在此页面选择安装的位置,一般选择在非系统盘安装。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_03

在这个页面选择是否需要创建桌面快捷方式,是否需要把“Open Folder as Project”添加到右键快捷方式,是否需要把启动器目录添加到环境变量PATH里面。不知道就全选或者选择第一个即可。继续下一步。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_04

等待安装,可能需要几分钟。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_05

安装完成后,可以选择重启(主要让添加到环境变量里面的值生效)。如果你之前没有选择把启动器目录添加到环境变量PATH里面,也就不用重启。对我来说重不重启无所谓,所以我就没有重启。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_06


启动DevEco Studio,问你同不同意,一定得同意的啦。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_07


接下来说运行需要npm配置信息,默认就行了。继续下一步。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_08


接下来是sdk安装,默认就行了。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_09


接下来是提示设置信息,下一步。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_ide_10


选择同意,继续下一步。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_11


等待下载,可能需要几分钟。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_12


下载完成,开启DevEco Studio欢迎界面。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_13


个人喜好界面风格为黑色,可以在欢迎界面左下角,选择Configure,选择Settings,在APPearance选项卡中,把Theme改为黑色主题,点击OK立即生效。

接下来我们就可以新建项目了,选择Android,如果提示需要下载Android SDK,按步骤点击下载即可,这里不再细讲。

开始创建项目

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_14


在欢迎界面选择Create HamonyOS Project,新建项目。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_ide_15


选择Empty Ability(Java),

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_16


接下来是项目的配置信息,填写项目名称,选择项目类型,设置项目包名,设置项目存储位置,SDK版本等信息。最后我打算写个手机应用,所以设备类型选择了Phone。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_17


可以看到项目打开后DevEco Studio的开发界面跟Android Studio界面类似。因为DevEco Studio和Android Studio都是基于IntelliJ IDEA社区版二次开发,所以对用过 Android Studio 或者 IntelliJ IDEA 的开发者来说使用 DevEco Studio 比较容易上手。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_18


接下来对模拟器进行管理。点击菜单栏Tools,在菜单中选择Device Manager,打开虚拟器设备管理器。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_19


接下来会弹出登录华为账号的网页,需要你登录已实名的账号才能运行虚拟设备。没有华为账号的话要注册一个。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_ide_20


接下来是开发者实名认证,一般自己开发都选择个人开发者。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_21


提示是否会将下面类型的应用上传到应用市场,反正以后可以修改,先点否以后有事再说。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_ide_22


接下来选择认证方式,有个人银行卡认证和身份证人工审核认证,要快和方便的话,选择个人银行卡认证是种不错的选择。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_ide_23


上面是个人银行卡认证的界面。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_ide_24


上面是身份证人工审核认证的界面。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_25


终于实名认证成功了(真没想到这么麻烦)。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_26


重新进入DevEco Studio,登录华为账号,因为项目刚刚选择的设备是手机,于是我选择了P40虚拟设备进行模拟运行。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_27


点击右上方运行按钮,运行测试“你好,世界”程序。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_开发者_28


上面是将鸿蒙应用安装在虚拟机上运行的结果。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_29


对代码进行简单修改,在修改过程中发现了一些问题,例如修改.xml文件时,预览界面不会像在Android Studio写.xml一样实时更新,要手动刷新。

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_Android_30


最后运行结果如上图。我完成了一个简单的鸿蒙应用。

工程目录结构

鸿蒙根据当前位置获取天气信息java 鸿蒙定位_鸿蒙根据当前位置获取天气信息java_31


.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:编写测试文件的目录。

我的第一个鸿蒙应用代码

MainAbilitySlice.java

package com.example.firstapplication.slice;

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(Color.rgb(57, 129, 248)));
        text.setTextSize(70);
        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);
    }
}

MainAbility.java

package com.example.firstapplication;

import com.example.firstapplication.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());
    }
}

MyApplication.java

package com.example.firstapplication;

import ohos.aafwk.ability.AbilityPackage;

public class MyApplication extends AbilityPackage {
    @Override
    public void onInitialize() {
        super.onInitialize();
    }
}

resources>config.json

把"label"属性改为"$string:app_name"

resources>base>element>string.json新增

{
    "name": "app_name",
    "value": "菜籽鸿蒙应用"
}

总体感觉

这一番体验下来感觉还行,在开发工具的某些方面还有待改进。让我们开发者一起拥抱鸿蒙,为鸿蒙应用生态做贡献。