Harmony学习之元服务开发

Harmony学习之元服务开发

一、元服务概述

元服务(Atomic Service)是HarmonyOS提供的一种轻量级应用程序形态,具备免安装、即用即走、账号相随等核心特征。与传统应用相比,元服务具有秒开直达、纯净清爽、服务相伴、一体两面等优势,能够大幅提升信息与服务的获取效率。

元服务与传统应用的区别

维度 元服务 传统应用
安装方式 免安装,系统后台自动部署 需用户主动下载安装
包体大小 ≤10MB,单包≤2MB 通常>50MB
启动速度 秒开直达(<1秒) 冷启动>3秒
开发语言 ArkTS(元服务API集) 系统API
分发方式 服务找人模式(卡片、搜索等) 应用商店分发
跨设备流转 天然支持分布式能力 需显式处理多端适配

二、开发环境准备

1. AGC平台创建元服务项目

在开始开发前,需要先在AppGallery Connect平台创建元服务项目:

  1. 登录AGC平台,进入"我的项目"
  2. 点击"新增项目",选择"元服务"类型
  3. 填写基本信息(应用名称、包名等)
  4. 获取唯一的APP ID(包名格式:com.atomicservice.[appid])

2. DevEco Studio创建项目

使用DevEco Studio创建元服务项目:

File → New → Create Project → Atomic Service → Empty Ability

配置项目信息时,需要填写在AGC平台注册的包名,确保与平台一致。项目创建完成后,目录结构如下:

项目名称/
├─ entry/                 # 主模块
│  ├─ src/main/ets/       # ArkTS代码
│  │  ├─ entryability/    # 入口能力
│  │  ├─ pages/           # 页面
│  │  └─ widget/          # 卡片
└─ agconnect-services.json # AGC配置文件

三、元服务核心开发

1. 页面路由配置

main_pages.json中配置页面路由:

{
  "src": [
    "pages/HomePage",
    "pages/GamePage",
    "pages/UserAgreement"
  ]
}

2. 页面开发示例

以下是一个简单的首页实现:

// HomePage.ets
@Entry
@Component
struct HomePage {
  @State recentScores: ScoreItem[] = [];

  aboutToAppear() {
    this.loadScores();
  }

  loadScores() {
    const scores = AppStorage.Get('scores') || [];
    this.recentScores = scores.slice(0, 5);
  }

  build() {
    Column() {
      Text('舒尔特方格')
        .fontSize(32)
        .fontWeight(FontWeight.Bold)
        .margin(20)
      
      Button('开始游戏')
        .width('80%')
        .height(50)
        .backgroundColor('#007DFF')
        .fontColor('#FFFFFF')
        .onClick(() => router.pushUrl({ url: 'pages/GamePage' }))
        .margin(10)
      
      // 近期分数展示
      Column() {
        Text('近期成绩')
          .fontSize(18)
          .margin(10)
        List() {
          ForEach(this.recentScores, (item) => {
            ListItem() {
              Row() {
                Text(`${item.size}x${item.size}`)
                  .width(60)
                Text(item.time)
                  .flexGrow(1)
                Text(item.date)
                  .width(80)
              }
              .padding(10)
            }
          })
        }
      }
      .backgroundColor('#FFFFFF')
      .borderRadius(10)
      .padding(5)
      .margin(10)
      .width('90%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F5F5F5')
  }
}

interface ScoreItem {
  size: number;
  time: string;
  date: string;
}

四、服务卡片开发

服务卡片是元服务的重要入口,可以直接在桌面显示关键信息,支持快速交互。

1. 卡片配置文件

widget.json中配置卡片信息:

{
  "forms": [
    {
      "name": "ShulteWidget",
      "description": "舒尔特方格快捷卡片",
      "src": "./ShulteWidget.ets",
      "window": {
        "designWidth": 720,
        "autoDesignWidth": true
      },
      "colorMode": "auto",
      "isDefault": true,
      "updateEnabled": true,
      "scheduledUpdateTime": "00:00",
      "updateDuration": 1
    }
  ]
}

2. 卡片实现

// ShulteWidget.ets
@Entry
@Component
struct ShulteWidget {
  private formProvider: FormProvider = new FormProvider();

  build() {
    Column() {
      Text('舒尔特方格')
        .fontSize(16)
        .margin(5)
      
      Button('快速开始')
        .width('80%')
        .height(30)
        .fontSize(14)
        .backgroundColor('#007DFF')
        .onClick(() => {
          // 打开元服务
          this.formProvider.startAbility({
            bundleName: 'com.example.shultetable',
            abilityName: 'EntryAbility'
          });
        })
    }
    .padding(10)
  }
}

五、元服务图标设计

元服务需要准备两类图标:

  1. 应用图标:1024×1024px,用于服务入口
  2. 卡片图标:根据卡片尺寸设计(如2×2卡片为128×128px)

图标需符合鸿蒙设计规范,建议使用圆角设计,放置在entry/src/main/resources/base/media目录下。

六、打包与发布

1. 打包配置

build-profile.json5中配置发布签名:

{
  "app": {
    "signingConfigs": [
      {
        "name": "release",
        "certificate": "release.p12",
        "profile": "release.p7b"
      }
    ]
  }
}

2. 构建发布包

在DevEco Studio中构建发布包:

  1. 设置Build Mode为"release"
  2. 选择Build → Build Hap(s)/APP(s) → Build APP(s)
  3. 构建结果位于build目录下

3. 发布流程

  1. 在AGC平台创建发布
  2. 填写发布信息(应用描述、截图等)
  3. 提交审核
  4. 审核通过后正式发布

七、开发注意事项

1. 权限配置

module.json5中申请必要的权限:

"requestPermissions": [
  {
    "name": "ohos.permission.DISTRIBUTED_DATASYNC",
    "reason": "用于跨设备数据同步",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "inuse"
    }
  }
]

2. 包体大小限制

  • 单包大小:≤2MB
  • 总包大小:≤10MB(特殊情况可申请20MB)
  • 服务卡片最多16张

3. 性能优化

  • 按需加载资源
  • 使用分布式数据管理进行跨设备同步
  • 控制卡片刷新频率(建议≤30秒)

八、总结

元服务作为HarmonyOS生态的重要组成部分,为开发者提供了轻量化、免安装的服务形态。通过服务卡片、系统级入口等分发方式,元服务能够实现"服务找人"的智能触达,大幅提升用户体验和开发效率。

建议开发者在实际项目中,根据业务场景选择合适的服务形态(元服务或传统应用),充分利用HarmonyOS的分布式能力和原生智能特性,打造更优质的用户体验。

posted @ 2025-12-23 23:21  J_____P  阅读(0)  评论(0)    收藏  举报