# 鸿蒙

# 鸿蒙前置工具配置

开发者地址 (opens new window)

# 鸿蒙联调方案

  1. 模拟器
  2. 远程真机模拟
  3. 本地真机

不同版本可能存在配置真机信息的设置

# Harmonyos 应用包结构

  • entry:应用的主模块,一个APP中,对于同一设备类型,可以有一个或多个entry类型的HAP(HarmonyOS Ability Package)
  • feature:应用的动态特性模块,一个APP可以包含一个或者多个feature类型的HAP,也可以不含。
  • Ability:能力的抽象,一个应用可以包含一个或多个Ability
  • config.json:文件包含了应用的包名、生产厂商、版本号等基本信息,以及应用的备份恢复、网络安全等能力配置。
  • pack.info:是一个重要的组成部分,它描述了应用软件包中每个HAP(HarmonyOS Ability Package)的属性,应用市场根据pack.info文件对HAP进行拆包和分类存储,以便用户能够方便地查找和安装所需的应用。

# Ability

具体来说,Ability在鸿蒙系统中可以分为以下几类:

  1. Feature Ability(简称FA):
    • 带有界面,也被称为元程序。
    • 类似于Android中的Activity,FA支持Page Ability,代表了UI的能力。
    • Page模板是FA唯一支持的模板,用于提供与用户交互的能力。
    • 一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。
  2. Particle Ability(简称PA):
    • 无界面,也被称为元服务。
    • 类似于Android中的Services,PA支持Service Ability和Data Ability。
    • Service模板:用于提供后台运行任务的能力,如播放音乐等。
    • Data模板:用于对外部提供统一的数据访问抽象,提供了统一的数据访问接口,方便FA的统一调用,例如对本地文件的读取。

Ability的三层架构:Page Ability(表示层) Service Ability(业务层) Data Ability(数据访问层)

# Page Ability

Page Ability在HarmonyOS中是用于提供与用户交互的能力的重要组件。以下是关于Page Ability的详细解释:

定义与功能:

  1. Page Ability是Feature Ability唯一支持的模板,用于提供与用户的交互能力,是页面的父级。
  2. 它由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。
  3. 当一个Page由多个AbilitySlice共同构成时,这些AbilitySlice页面提供的业务能力应具有高度相关性。

特点:

  1. Page并不会初始化具体的内容(即没有自己的UI布局),它只负责控制页面入口(如首页,第一个展示的AbilitySlice)和路由。
  2. HarmonyOS支持Page内部跳转,支持Page间跳转,还支持直接跳转到目标Page的AbilitySlice。

# 鸿蒙路由跳转

// MainAbility.java
package com.example.myapp01;

import com.example.myapp01.slice.MainAbilitySlice;
import com.example.myapp01.slice.PayAbilitySlice;
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(PayAbilitySlice.class.getName());
        //  // 设置动作路由  
        addActionRoute("action.pay", PayAbilitySlice.class.getName());
    }
}

present 方法通常用于在同一个 Ability 中切换不同的 AbilitySlice。如果想要启动一个新的 Ability,你应该使用 startAbility 方法。

// PayAbilitySlice.java
package com.example.myapp01.slice;

import com.example.myapp01.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Text;

public class PayAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_pay);

        // 绑定对应内容
        Text text = findComponentById(ResourceTable.Id_text_pay);
        // 点击事件
        text.setClickedListener(listen->{
            present(new MainAbilitySlice(),new Intent());
             // 或者,如果 MainAbilitySlice 是另一个 Ability 的一部分,你应该使用 startAbility  
            // startAbility(new Intent.Builder().setAbilityName(MainAbility.class.getName()).build()); 
        });

    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
  • 绑定id
  • 设置输出文本

resource/base/layout

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">

    <Text
        ohos:id="$+id:text_helloworld"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="$graphic:background_ability_main"
        ohos:layout_alignment="horizontal_center"
        ohos:text="$string:mainability_HelloWorld"
        ohos:text_size="40vp"
        />
</DirectionalLayout>

国际化

{
  "string": [
    {
      "name": "entry_MainAbility",
      "value": "entry_MainAbility"
    },
    {
      "name": "mainability_description",
      "value": "Java_Empty Ability"
    },
    {
      "name": "mainability_HelloWorld",
      "value": "Hello World"
    },
    {
      "name": "mainability_Pay",
      "value": "Pay page"
    }
  ]
}

# service Ability

pack-info属性详解:

  • delivery-with-install:表示该HAP是否支持随应用安装。值为“true”表示支持,值为“false”表示不支持。
  • name:HAP的文件名,用于唯一标识该HAP。
  • module-type:HAP的模块类型,可以是“entry”或“feature”。
  • device-type:表示支持该HAP运行的设备类型,这有助于确保HAP在不同设备上的兼容性。
最后更新: 7/23/2024, 8:09:19 AM