登录后台

页面导航

本文编写于 141 天前,最后修改于 141 天前,其中某些信息可能已经过时。

01 示例应用介绍

涉及到的技术:一次开发、多段部署

一次开发、多端部署示意图:

image-20201128093013355

分布式任务调度示意图

基于

分布式软总线、数据管理

分布式Profile

分布式安全认证

构成

支持跨设备应用、远程访问启动、远程调用、链接、迁移等操作,能够根据不同设备的能力、位置、业务运行状态、资源使用情况、用户的习惯和意图选择合适的设备运行分布式任务。

image-20201128093038444

02 编写一个HarmonyOS应用

2.1 HarmonyOS .app 组成

HarmonyOS应用软件包使用app pack(.app)的形式发布,它是由一个或者多个hap包以及描述每个hap属性pakc.info组成,hap是abilities的部署包,HarmonyOS应用围绕abilities组件展开,一个hap是由代码(abilities)资源(resources)第三方库(libs)以及应用配置文件(config.json)组成。可分为Entry.hapFeature.hap

如图:

image-20201128094004376

Entry是应用的主模块,一个APP中,对于同一个设备类型必须有且只有一个Entry类型的hap可独立安装运行。

Feature是应用的动态特性模块,一个APP可以包含一个或多个Feature类型的hap,也可以不包含。

只有包含abilities的hap才能独立运行。

2.2 应用UI布局的编写

2.2.1 布局类组件

提供不同规范的组件容器

image-20201128094718944

  • DirectionalLayout
    以单一方向排列
  • DependentLayout
    以相对位置排列
  • PositionLayout
    以确切位置排列
  • StackLayout
  • AdaptiveBoxLayout

2.2.2 显示类组件

提供单纯的内容显示

image-20201128094832743

  • Text
    用于文本显示
  • Image
    用于图像显示
  • Clock
  • ProgressBar

2.2.3 交互类组件

提供具体场景下和用户交互响应的功能

image-20201128095104078

  • Button
    提供点击响应的功能
  • Slider
    提供进度选择的功能
  • RadioButton
  • TextFiled
  • CheckBox

2.3 在XML中声明UI布局

在鸿蒙系统的JavaUI框架中,提供了两种编写布局的方式。

  1. 在代码中创建UI布局
  2. 通过在XML中声明UI布局

两者创建出的布局没有本质的差别。

以下以在XML中声明UI布局为例

image-20201128095452222

ability_main.xml文件按照层次结构描述了界面上各种结构之间的关系。图库部分被声明为一个AdaptliveBoxLayout类型的组件,且包含两个图库对象,这两个对象分别为独立的DirectionalLayout组件,通过对组件设定布局参数和属性值来确定最终的UI布局效果。

在xml中完成布局声明后,需要将其添加到代码中,添加为页面的根布局或者其他布局的子布局。

image-20201128095811969

2.4 实现应用功能

鸿蒙系统中所有的应用均在应用沙盒内运行,对资源的访问权限均需要对系统进行申请,有系统进行管理。默认情况下应用只能访问有限的资源。

应用权限会受到abilities、应用、系统以及用户等多方面进行共同管理,保证了受限权限接口是在约定好的规则下正常使用。避免权限接口被滥用而导致用户、应用或设备受损。

权限申请

示例中将使用多设备协同访问权限(DISTRIBUTED_DATASYNC)

image-20201128100017926

在config.json中使用reqPermissions属性对该权限进行声明。(若未进行权限声明,应用将无法申请和获取权限)

在MainAvility.java中基于用户可治可控的原则,在程序运行时主动调用系统动态申请权限的接口,通过系统的弹窗获得用户的授权,敏感权限的使用需要得到用户允许。用户结合应用运行场景的上下文识别出应用申请相应权限的合理性,从而做出正确的选择。即便用户向应用授权了请求的权限,应用在调用权限管控接口前也应该检查自己是否已经获得了权限,而不能把之前获得的权限持久化,因为用户授权后还可以通过设置取消授权。

实现应用迁移

分布式任务调度平台对打在鸿蒙系统的终端提供了统一的组件管理能力,这是远程启动、远程调用、业务无缝迁移等分布式任务。

开发者可以通过Ability中实现IAbilityContinuation接口,调用Ability的迁移方法continueAbility即可将本地业务无缝迁移到指定的设备中。

image-20201128101358889

IAbilityContinuation接口为应用提供了如下几种回调方法:

  • IAbilityContinuation.onStartContinuation()
    可以用于完成迁移前的准备工作。
  • IAbilityContinuation.onSaveData()
    可以用于完成迁移前保存迁移所需的数据
  • IAbilityContinuation.onRestoreData()
    可以用于恢复迁移后所需要的数据
  • IAbilityContinuation.onCompleteContinuation()
    可以用于完成迁移后的工作。
  • Ability.onStart()
    正常的程序启动

响应用户事件

用户事件主要包括手势事件、按键事件

  • 手势事件——可穿戴设备、手机等可触屏设备
  • 按键事件——智慧屏等由遥控器按键操作的设备

为迁移按钮绑定一个用户点击屏幕事件(Conponent.ClickedListener),和一个用于智慧屏按键监听的事件(Conponent.KeyEventListener)。

代码中:

//点击事件,用户轻击屏幕
@Override
public void onClick(Conponent.component) {
    continueAbility();
}
//按键事件,用户按下遥控器中心按钮
@Override
public boolean onKeyEvent(Conponent.component,KeyEvent keyEvent) {
    if(keyEvent.isKeyDown() && keyEvent.getKeyCode() == keyEvent.KEY_DPAD_CENTER) {
        continueAbility();
    }
    return true
}

03 应用的编译、安装、运行

使用DevEco Studio打开工程。

目录和IDEA、AndroidStudio基本一致。

源码(java)存放在entry-src-main-java

资源文件(resources)存放在entry-src-main-resoures

配置文件(config.json)存是entry-src-main-config.json

每个应用.hap根目录下都存在一个config.json配置文件,主要蕴含应用的全局配置信息应用在具体设备上的配置信息应用包的配置信息

config.json:

  • 应用全局配置信息

    • 包名
    • 厂商名
    • 版本
  • hap包配置信息

    • 包含具体的Ability所包含的具体属性,该标签下的配置只针对当前hap包生效。
    • 包名
    • 类名
    • 类型
    • Ability提供的能力
    • 应用访问系统或其他应用受保护部分所需要的权限
  • 应用所需要的权限

    • 权限名

resources目录:

按照两级目录性质组成,目录命名必须符合规范,以便根据设备形态匹配相应目录下的资源文件

  • 一级目录
    base目录,是默认存在的目录,当相应的resources资源目录中没有于当前设备形态相匹配的限定词目录时,会自动引用该目录中的资源文件。
  • 二级目录
    资源目录,存放字符串、颜色、布尔值等基础语言元素,以及媒体、动画、布局等资源文件。