# 鸿蒙
# 鸿蒙前置工具配置
# 鸿蒙联调方案
- 模拟器
- 远程真机模拟
- 本地真机
不同版本可能存在配置真机信息的设置
# 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在鸿蒙系统中可以分为以下几类:
- Feature Ability(简称FA):
- 带有界面,也被称为元程序。
- 类似于Android中的Activity,FA支持Page Ability,代表了UI的能力。
- Page模板是FA唯一支持的模板,用于提供与用户交互的能力。
- 一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。
- 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的详细解释:
定义与功能:
- Page Ability是Feature Ability唯一支持的模板,用于提供与用户的交互能力,是页面的父级。
- 它由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。
- 当一个Page由多个AbilitySlice共同构成时,这些AbilitySlice页面提供的业务能力应具有高度相关性。
特点:
- Page并不会初始化具体的内容(即没有自己的UI布局),它只负责控制页面入口(如首页,第一个展示的AbilitySlice)和路由。
- 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在不同设备上的兼容性。
arkts →