harmonyos(鸿蒙)——全面入门,始于而不止于helloworld -金沙1005

目录一、前言二、创建并运行项目2.1创建项目2.2开启远程模拟器2.3运行项目三、ability&页面的初步认识3.1、简介3.1.1什么是页面3.1.2harmonyos(鸿蒙)中的页面3.2、ability3.2.1简介3.2.2pageability3.2.3serviceability3.2.4dataability3.3、harmonyos页面的设计3.3.1原子化服务与hap简介3.3.2可分.

大家好,我是你的好朋友思创斯。网站金沙1005首页:https://ispacesoft.com

目录

一、前言

二、创建并运行项目

2.1 创建项目

2.2 开启远程模拟器

2.3 运行项目

三、ability&页面的初步认识

3.1、简介

3.1.1 什么是页面

3.1.2 harmonyos(鸿蒙)中的页面

3.2、ability

3.2.1 简介

3.2.2 page ability

3.2.3 service ability

3.2.4 data ability

3.3、harmonyos页面的设计

3.3.1 原子化服务与hap简介

3.3.2 可分可合思想

3.3.3 hap中的ability

四、配置文件config.json了解

4.1、简介

4.1.1 结构

4.1.2 编辑视图

4.2、配置文件详细介绍

4.2.1 app

4.2.2 deviceconfig

4.2.3 module

五、harmonyos应用程序的运行流程

5.1、准备

5.1.1 创建项目

5.1.2 运行项目

5.2、分析启动流程

5.2.1 启动流程图

5.2.2 解析config.json文件

5.2.3 初始化

5.2.4 获取入口ability全类名

5.2.5 运行ability

5.2.6 运行ability的子界面

5.2.7 加载xml文件,展示内容

六、精选好文


大多数程序员学习一门编程语言的第一个程序都是hellworld,虽然harmonyos(鸿蒙)并不是一门编程语言,但是我们仍然通过一个helloworld程序来全面学习和了解harmonyos(鸿蒙)。
文中并不是仅仅教你搭建一个harmonyos(鸿蒙)的helloworld的应用程序,那样一点意义也没有,而是通过如下四个方面,全面的讲解harmonyos(鸿蒙)的入门的必备知识点。

全面入门harmonyos.png

通过创建一个helloworld项目,运行起来之后,再来分析入门鸿蒙开发需要掌握的一些知识点。如您想直接通过金沙1005官网学习,我这里给您贴出金沙1005官网地址,或者你也可以先根据我的文章内容,看看是否对鸿蒙开发感兴趣再去金沙1005官网认真学习!

知识金沙1005官网地址:

2.1 创建项目

打开开发工具deveco studio,选择file -> new -> new project

image.png

选择ability模板,我们这里选择empty ability(java)

image.png

填写项目名称project name,包名称package name,项目存储路径save location,设备类型 device type(我这里选择的是手机phone),最后点击finish!

image.png

项目创建完毕后将会看到如下工程

image.png

2.2 开启远程模拟器

harmonyos现在项目开发暂时只支持远程调试,因此我们需要通过登录华为账号(这个账号没有的可以先去实名认证一下,我的上篇文章有详细的介绍!),开启模拟器进行预览调试,每次调试的时间为一个小时,一小时之后会回收资源,如果有需要重启开启即可!

选择tools -> device manager,进入设备选择界面

image.png

点击login,会自动打开浏览器,进入登录页面

image.png

通过认证的账户密码进行登录

image.png

登录时弹出授信,我们点击允许即可!

image.png

接下来会看到如下页面,这样代表登录成功,但是并不意味着远程模拟器开启成功了!

image.png

此时回到deveco studio的控制台,看到如下输出则代表成功!如果输出的时login fail,这个时候我们去浏览器清空session,然后重新点击上面的login进行再次登录即可!

image.png

登录成功后选择p40,点击右边绿色的启动按钮!image.png

此时deveco studio的右边会出现p40的远程模拟器,我们开发的代码将会在这个上面展示,手机最上面时每次调试的时间倒计时,时间到了重新开启远程模拟器即可!

image.png

2.3 运行项目

点击右上角的三角形直接运行项目,或者点击甲壳虫进入调试模式都可以,点击后项目会通过gradle进行构建,需要等待一会儿。

image.png

此时远程模拟器展示项目输出——“你好,世界”,第一个项目运行成功!

harmonyos(鸿蒙)——全面入门,始于而不止于helloworld

输出内容的修改路径在src->main->resources->zh->element->string.json

image.png

3.1、简介

3.1.1 什么是页面

信息以页面信息组织,信息页面由语言来实现,在各个信息页面之间建立超文本链接以便浏览,这就是页面。页面一般包括:文本、图像、表格、超链接等基本元素。

3.1.2 harmonyos(鸿蒙)中的页面

当我们打开手机app之后看到的都是页面!

image.png

image.png

在harmonyos中,一个页面可以被当做一个ability,更准确的说是page ability中的abilityslice(指应用的单个页面及其控制逻辑的总和),这里先简单介绍ability。

3.2、ability

3.2.1 简介

ability是应用所具备能力的抽象(我感觉也可以理解为模板,模块),也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个ability),harmonyos支持应用以ability为单位进行部署。
ability分为两种:

  1. fa(feature ability)
  2. pa(particle ability)
ability类型 支持模板 描述
feature ability page ability page模板:用于提供与用户交互的能力。一个page实例可以包含一组相关页面,每个页面用一个abilityslice实例表示。

| particle ability | service ability和data ability | service模板:用于提供后台运行任务的能力。
data模板:用于对外部提供统一的数据访问抽象。 |

3.2.2 page ability

page ability是 feature ability唯一支持的模板。
用于提供与用户的交互能力,其实就是页面的父级。一个page可以由一个或多个abilityslice构成,abilityslice是指应用的单个页面及其控制逻辑的总和。官方认为当一个page由多个abilityslice共同构成时,这些abilityslice页面提供的业务能力应具有高度相关性。

page与abilityslice.png

harmonyos支持不同page之间的跳转,并可以指定跳转到目标page中某个具体的abilityslice。

3.2.3 service ability

service ability是 particle ability支持的模板之一。
用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。service可由其他应用或ability启动,即使用户切换到其他应用,service仍将在后台继续运行。
service是单实例的。在一个设备上,相同的service只会存在一个实例。如果多个ability共用这个实例,只有当与service绑定的所有ability都退出后,service才能够退出。由于service是在主线程里执行的,因此,如果在service里面的操作时间过长,开发者必须在service里创建新的线程来处理,防止造成主线程阻塞,应用程序无响应。

如下是harmonyos线程间通信开发概述金沙1005官网地址:

3.2.4 data ability

data ability是 particle ability支持的模板之一。
用于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。data既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。数据的存放形式多样,可以是数据库,也可以是磁盘上的文件。data对外提供对数据的增、删、改、查,以及打开文件等接口,这些接口的具体实现由开发者提供。

3.3、harmonyos页面的设计

3.3.1 原子化服务与hap简介

harmonyos中的应用与传统app应用有一个很大的亮点,harmonyos提供了一种面向未来的服务提供方式,原子化服务。
原子化服务可以免安装(无需显示安装,由系统后台按需主动安装非常方便),它支持运行在1 8 n设备上。
原子化服务与传统的app应用对比如下:

项目 原子化服务 传统app应用
件包形态 (.app) (.app)
分发平台 由原子化服务平台(huawei ability gallery)管理和分发 由应用市场(appgallery)管理和分发
安装后有无桌面icon 无桌面icon,但可手动添加到桌面,显示形式为 有桌面icon
hap包免安装要求 所有均需满足要求 所有hap包(包括entry hap和feature hap)均为非免安装的

金沙1005官网地址:

原子化服务由hap包组成,hap是ability的部署包,harmonyos应用代码围绕ability组件展开。一个hap是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型。
详细内容可以查看金沙1005官网:

一个原子化服务可以有一个或者多个hap组成,而一个hap对应1个fa或者1个pa,每个fa或pa均可独立运行,完成1个特定功能;1个或多个功能(对应fa或pa)完成1个特定的便捷服务。

所以harmonyos的app安装包的结构示意图如下:

原子化服务中的组成关系.png

3.3.2 可分可合思想

根据3.1中harmonyos的app安装包的结构可知,一个harmonyos安装包可以由任意需要的一个或者多个hap组成,这里的组成是可以选择的,可以根据用户需求和硬件设备做合理的选择进行应用组合。
打个比方使用搭载harmonyos系统的电视和手机分别可以具有如下的一些功能:

harmonyos电视机:

harmonyos视频—电视机.png

harmonyos手机:
harmonyos视频—手机.png

电视机没有短信和通话的功能,但是它拥有控制频道切换的功能,因此可以安装控制频道.hap;而手机拥有短信和通话的功能,因此可以安装短信.hap和通过.hap。两者都拥有游戏的功能,因此均可以安装游戏.hap。因此harmonyos的hap安装包,可以根据用户的实际需求或者硬件设施进行合理的安装,实现安装包的可分可合思想。
针对不同的功能,建议统一写入同一个hap中,比如短信.hap,这样可以减少用户使用某一个特定功能的时候,系统下载安装包的复杂度或者用户字段安装的复杂度。
 

3.3.3 hap中的ability

针对上面的游戏.hap,比如说是男人就下一百层,我们会开发一个ability,它会存在很多子功能,比如登录、注册、游戏、装备、聊天、等等。这些不同的功能都可以整合到不同的abilityslice中,一个abilityslice对应一个页面。
游戏.hap的ability与其abilityslice关系图如下:

游戏.hap.png

登录、注册、游戏、装备、聊天、等等abilityslice统一加入一个ability中,不同的abilityslice之间可以实现跳转,最终打包成一个可以运行的游戏.hap

4.1、简介

4.1.1 结构

应用的每个hap的根目录下都存在一个“config.json”配置文件。文件内容主要涵盖以下三个方面:

config.json.png

如下是一个简单的harmonyos应用程序创建后所看到的应用代码结构,entry -> src -> main -> config.json文件。其中三个模块分别为app、deviceconfig、module(我这里展示的三块是缩放后的内容。)
image.png

4.1.2 编辑视图

config.json文件采用json文件格式,其每一项都包含都由一个属性和值组成。其中属性值不分先后顺序,但是不能重复出现,必须唯一。值为json的基本数据类型。harmonyos的deveco studio支持两种编辑config.json的方式,分别是代码编辑视图和可视化编辑视图。
代码编辑视图:

image.png

可视化编辑视图:

image.png

4.2、配置文件详细介绍

配置文件由app、deviceconfig、module三部分组成,三者均必须存在。以下会根据上面的harmonyos的基础helloworld程序分析一个最基础的config.json配置文件,如果需要十分详细的介绍,请直接去harmonyos的金沙1005官网进行查阅,以下是直达的金沙1005官网地址:

4.2.1 app

app对象包含应用的全局配置信息,harmonyos的基础helloworld程序的config.json配置文件中的app部分如下所示:

 "app": {
    "bundlename": "com.example.demo",
    "vendor": "example",
    "version": {
      "code": 1000000,
      "name": "1.0.0"
    }
  }
属性名称 子属性名称 含义 数据类型 是否可缺省
bundlename 表示应用的包名,用于标识应用的唯一性。 字符串
vendor 表示对应用开发厂商的描述。字符串长度不超过255字节。 字符串 可缺省,缺省值为空。
version 表示应用的版本信息。 对象
code 表示应用的版本号,仅用于harmonyos管理该应用,不对应用的终端用户呈现。 | 数值 | 否 数值
name 表示应用的版本号,用于向应用的终端用户呈现。小于127个字节。 字符串

4.2.2 deviceconfig

deviceconfig包含在具体设备上的应用配置信息,可以包含default、phone、tablet、tv、car、wearable、litewearable和smartvision等属性。default标签内的配置是适用于所有设备通用,其他设备类型如果有特殊的需求,则需要在该设备类型的标签下进行配置。harmonyos的基础helloworld程序的config.json配置文件中的deviceconfig部分如下所示:

"deviceconfig": {}

4.2.3 module

module对象包含hap包的配置信息,包含每个ability必须定义的基本属性(如包名、类名、类型以及ability提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。harmonyos的基础helloworld程序的config.json配置文件中的module部分如下所示:

 "module": {
     "package": "com.example.demo",
     "name": ".myapplication",
     "mainability": "com.example.demo.mainability",
     "devicetype": [
       "phone"
     ],
     "distro": {
       "deliverywithinstall": true,
      "modulename": "entry",
      "moduletype": "entry",
      "installationfree": true
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "unspecified",
        "name": "com.example.demo.mainability",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "$string:entry_mainability",
        "type": "page",
        "launchtype": "standard"
      }
    ]
  }
属性名称 子属性名称 含义 数据类型 是否可缺省
package 表示hap的包结构名称,在应用内应保证唯一性。采用反向域名格式(建议与hap的工程目录保持一致)。字符串长度不超过127字节。 字符串
name 表示hap的类名。采用反向域名方式表示,前缀需要与同级的package标签指定的包名一致,也可采用“.”开头的命名方式。字符串长度不超过255字节。 字符串
mainability 表示hap包的入口ability名称。 字符串 page类型的ability为否
devicetype 表示允许ability运行的设备类型。系统预定义的设备类型包括:phone(手机)、tablet(平板)、tv(智慧屏)、car(车机)、wearable(智能穿戴)、litewearable(轻量级智能穿戴)等。 字符串数组
distro 表示hap发布的具体描述 对象

deliverywithinstall

表示当前hap是否支持随应用安装。

  • true:支持随应用安装。
  • false:不支持随应用安装

布尔类型

否 

modulename

hap的名称

字符串

moduletype

表示当前hap的类型,包括两种类型:entry和feature

字符串

installationfree

表示当前该fa是否支持免安装特性。

  • true:表示支持免安装特性,且符合免安装约束。
  • false:表示不支持免安装特性。

布尔类型

entry.hap可缺省,feature.hap不可缺省。

abilities

表示当前模块内的所有ability。采用对象数组格式,其中每个元素表示一个ability对象。

对象数组

skills

表示ability能够接收的intent的特征。

对象数组

orientation

表示该ability的显示模式。该标签仅适用于page类型的ability。取值范围如下:

  • unspecified:由系统自动判断显示方向。
  • landscape:横屏模式。
  • portrait:竖屏模式。
  • followrecent:跟随栈中最近的应用。

字符串

name

表示ability名称。取值可采用反向域名方式表示,由包名和类名组成,如“com.example.myapplication.mainability”;也可采用“.”开头的类名方式表示,如“.mainability”。该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。

字符串

icon

表示ability图标资源文件的索引。取值示例:$media:ability_icon。如果在该ability的“skills”属性中,“actions”的取值包含 “action.system.home”,“entities”取值中包含“entity.system.home”,则该ability的icon将同时作为应用的icon。如果存在多个符合条件的ability,则取位置靠前的ability的icon作为应用的icon。

字符串

description

表示对ability的描述。取值可以是描述性内容,也可以是对描述性内容的资源索引,以支持多语言。

字符串

label

表示ability对用户显示的名称。取值可以是ability名称,也可以是对该名称的资源索引,以支持多语言。

字符串

type

表示ability的类型。取值范围如下:

  • page:表示基于page模板开发的fa,用于提供与用户交互的能力。
  • service:表示基于service模板开发的pa,用于提供后台运行任务的能力。
  • data:表示基于data模板开发的pa,用于对外部提供统一的数据访问抽象。
  • ca:表示支持其他应用以窗口方式调起该ability。

字符串

launchtype

表示ability的启动模式,支持“standard”、“singlemission”和“singleton”三种模式:

  • standard:表示该ability可以有多实例。“standard”模式适用于大多数应用场景。
  • singlemission:表示此ability在每个任务栈中只能有一个实例。
  • singleton:表示该ability在所有任务栈中仅可以有一个实例。例如,具有全局唯一性的呼叫来电界面即采用“singleton”模式。

该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。

字符串

abilities -> skills

属性名称 子属性名称 含义 数据类型 是否可缺省
skills 表示ability能够接收的intent的特征 对象数组
entities 表示能够接收的intent的ability的类别(如视频、桌面应用等),可以包含一个或多个entity。 字符串数组
actions 表示能够接收的intent的action值,可以包含一个或多个action。 字符串数组

5.1、准备

5.1.1 创建项目

进入harmonyos(鸿蒙)正式开发之前,可以通过一个简单的helloworld的示例代码来了解其运行时的相关流程。如下是通过deveco studio创建的一个简单helloworld示例代码结构,接下来会分析其启动流程。

image.png

5.1.2 运行项目

运行上面的helloworld,展示效果如下所示:

image.png

5.2、分析启动流程

5.2.1 启动流程图

一个简单的harmonyos(鸿蒙)helloworld程序,其基本运行流程,可以分为如下几个阶段:

启动流程.png

5.2.2 解析config.json文件

config.json文件是harmonyos(鸿蒙)应用程序的主要配置文件,其位于entry -> src -> main -> config.json,配置文件分为三大块,具体的说明可以参考我的另一篇文件,

image.png

5.2.3 初始化

初始化主要通过config.json的module下的package和name来定位类com.example.demo.myapplication.

image.png

myapplication的内容如下,它会做一些应用的初始化工作

 package com.example.demo;
 
 import ohos.aafwk.ability.abilitypackage;
 
 public class myapplication extends abilitypackage {
     @override
     public void oninitialize() {
         super.oninitialize();
     }
}

5.2.4 获取入口ability全类名

入口ability的全类名,也在config.json文件中进行配置

image.png

mainability对应config.json中的abilities中的相关配置信息
image.png

mainability的主要内容如下,主界面中会加载子界面,通过 super.setmainroute(mainabilityslice.class.getname());的方式进行加载,关于页面的相关介绍可以查看我的另一篇文件

 1package com.example.demo;
 2
 3import com.example.demo.slice.mainabilityslice;
 4import ohos.aafwk.ability.ability;
 5import ohos.aafwk.content.intent;
 6
 7public class mainability extends ability {
 8    @override
 9    public void onstart(intent intent) {
10        super.onstart(intent);
11        super.setmainroute(mainabilityslice.class.getname());
12    }
13}

5.2.5 运行ability

这一步就是启动上面的类

5.2.6 运行ability的子界面

mainability运行后执行onstart方法会加载子页面,这里的子页面是mainabilityslice,其主要内容如下所示。

 package com.example.demo.slice;
 
 import com.example.demo.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);
    }
    @override
    public void onactive() {
        super.onactive();
    }
    @override
    public void onforeground(intent intent) {
        super.onforeground(intent);
    }
}

在mainabilityslice中我们发现,onstart加载类相关ui配置,resourcetable.layout_ability_main,resourcetable是harmonyos应用程序启动时动态生成的常量类,它会给每一个xml等文件分配一个标志id。要是想查看这个类,可以运行应用程序后在class文件中查阅

image.png

5.2.7 加载xml文件,展示内容

关于子页面中的内容,均可以通过xml文件来进行配置,这种基于xml配置内容样式的方式也比较方便,易于统一管理和系统解析。

image.png

至此一个harmonyos(鸿蒙)helloworld程序的执行流程就这么多了。

js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/4654.html

(1)

相关推荐

  • 华为编程语言实验室面向qq群人员发布了华为新语言试用报名问卷调查,并表示,“填写完信息后,请您及时查收邮箱信息,由于语言还未正式发布,因此后续会联系您签署保密协议,希望您能理解,再次感谢大家的支持~”其实华为自研编程语言的消息并非是一时兴起的。去年10月,在华为开发者大会2021(together)上,harmonyos3开发者预览版正式发布。同时,华为表示,将发布自研鸿蒙编程语言。华为副总裁、计算产品线总裁邓泰华去年9月在接受采访时表示,华为明年将推出自研的编程语

  • 怎样进行鸿蒙编程,在鸿蒙系统上使用mqtt编程[通俗易懂]

    我们使用的是pahomqtt软件包,这里介绍一下怎么使用mqtt协议编程。关于鸿蒙系统的mqtt移植好的软件包,相关github链接如下:https://gitee.com/qidiyun/harmony_mqtt这里提供一个简单的编程示例:这里我们使用mqttclient编程模型,他支持多任务多线程,非常适合用在鸿蒙系统上。1.网络初始化这里定义一个network结构体,然后指定我们的m…

  • harmonyos网络编程 –tcp服务端开发

    参考网上连老师的tcp自己整理一套tcp服务端的开发,整体思路大概如下:1、tcp服务首先需要连接wifi,采用的是sta模式,在学习tcp之前已经对wifi的功能学习过了,代码也编写好了,所以直接封装一下拿来使用就ok!…

  • re:从零开始的鸿蒙开发教程

    转载本文需注明出处:微信公众号eaworld,违者必究。概述金沙1005官网说:harmonyos是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的…

  • 零基础学鸿蒙编程-ui控件_text

    什么是texttext是用于展示文本内容的ui控件.常见效果如下:基础样例1.普通文本效果图代码2.设置字号效果图代码

  • 手把手教你写出第一个鸿蒙(harmonyos)程序

    运行完第一个app,真的有点鸿蒙(好懵)的感觉??就这??鸿蒙的开源地址:鸿蒙开源地址一、打开金沙1005官网harmonyos,源码编译请下载:源码编译器,开发应用请下载:huaweidevecostudio,开发环境需要配置好jdk、node.js,这个百度自己找!二、安装完成后,需要设置下sdk的安装位置。地址是可以修改成自己的路径,platforms和tools的勾全部打上!!!然后点击确定。三、创建第一个项目步骤如下图:它有支持三种类型的应用:tv设备应用、wearable

  • 别找了,这可能是全网最全的鸿蒙(harmonyos)刷机指南!

    本文的目的是将鸿蒙2.0刷到润和hi3861、hi3516和hi3518开发板上。目前网上已经有很多关于刷鸿蒙2.0的文章,我整理了一下,并结合自己的经验,在本文中阐述了从配置环境,到编译…

  • 我的harmonyos实战——鸿蒙系统开发入门学习

    1.为什么要学习鸿蒙开发?开发者的角度:安卓操作系统连接外部设备时,发现,配对,连接,组合,验证每一步都不能少。连接上了之后才能调用控制第三方设备。换一个设备之后,所有的代码需要重写。所有用安卓也可以连接外部设备并进行控制,但是太过于麻烦。而且不具备通用性鸿蒙操作系统就解决了这个痛点,设备与设备之间的连接就不需要我们开发者自己去写了,每一个设备都安装上鸿蒙操作系统之后,鸿蒙系统会通过软总线把这些设备都连接在一起。我们在应用开发的时候,只需要写很少的代码可以调用第三方设备,就好像是使用手机本身的设备一样

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图