HarmonyOS鸿蒙Next中如何在一个project里面同时打出元服务和应用的包

HarmonyOS鸿蒙Next中如何在一个project里面同时打出元服务和应用的包 有没有什么办法在一个project里面,同时打出元服务和应用的包

5 回复

【解决方案】

通过IDE提供的多产物构建的能力实现一个工程同时开发应用和元服务,具体可参见单团队开发场景方案设计

更多关于HarmonyOS鸿蒙Next中如何在一个project里面同时打出元服务和应用的包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以通过DevEco Studio可以创建应用与元服务的混合工程。

建议先创建一个应用工程,然后在工程内创建元服务模块。

参考地址

https://developer.huawei.com/consumer/cn/doc/atomic-faqs/faqs-technology-6

可以

官方明确支持「一个 Project 里同时打出应用和元服务两份包」,做法就是「混合工程」——在同一个 DevEco Studio 工程里分别建立两个模块(module)

一个普通 Ability 模块(打成 App HAP)  一个 Atomic Service 模块(打成元服务 HAP) 打包时只要各自配上对应的签名配置(p7b 不一样),再执行 Build ▸ Build Hap(s)/APP(s) ▸ Build APP(s) IDE 会同时输出两个 .app 文件: xxx-normal.app(应用)和 xxx-atomic.app(元服务),各自独立上架即可 。

注意事项:

  1. 元服务模块只能调用元服务 API 集,混用普通 API 会编译报错 。
  2. 两个模块的包名可以相同也可以不同,但上架后台要分别创建两条记录、分别申请 Profile(p7b)。

在HarmonyOS Next中,一个工程可同时构建元服务(Atomic Service)和应用(Application)的HAP包。配置方法:在工程的AppScope目录下的app.json5文件中,同时声明"app"和"atomicService"模块。构建时,DevEco Studio会根据配置生成对应的HAP包。

在HarmonyOS Next中,可以通过配置模块类型和构建脚本来实现在一个工程(Project)中同时构建出元服务(Atomic Service)包(.app)和应用(Application)包(.hap)。

核心方法是:将元服务模块配置为"type": "entry",并启用其"atomicService"能力;同时,确保应用模块(通常作为主入口)也配置为"type": "entry",但不启用(或按需启用)原子化服务特性。

以下是具体步骤和配置要点:

  1. 工程结构规划: 假设工程名为MyProject,它包含两个模块:

    • entry: 作为主应用入口模块,编译输出为应用的.hap包。
    • atomicService: 作为元服务模块,编译输出为元服务的.app包。
  2. 模块配置文件(module.json5)关键配置

    • 对于元服务模块(atomicService: 在其src/main/module.json5文件中,必须将type设置为"entry",并在abilities中为需要暴露为元服务的Ability配置"atomicService"字段为true

      {
        "module": {
          "name": "atomicService",
          "type": "entry", // 必须为entry类型
          "description": "$string:module_desc",
          "mainElement": "EntryAbility",
          "deviceTypes": ["phone", "tablet"],
          "deliveryWithInstall": true,
          "installationFree": true, // 建议开启,符合元服务特性
          "pages": "$profile:main_pages",
          "abilities": [
            {
              "name": "EntryAbility",
              "srcEntry": "./ets/entryability/EntryAbility.ets",
              "description": "$string:EntryAbility_desc",
              "icon": "$media:icon",
              "label": "$string:EntryAbility_label",
              "startWindowIcon": "$media:icon",
              "startWindowBackground": "$color:start_window_background",
              "exported": true, // 需要对外导出
              "skills": [
                {
                  "entities": ["entity.system.home"],
                  "actions": ["action.system.home"]
                }
              ],
              "atomicService": {
                "preloads": [ // 定义元服务的预加载页面
                  {
                    "moduleName": "atomicService",
                    "src": "./pages/Index"
                  }
                ]
              }
            }
          ]
        }
      }
      

      注意:"atomicService"配置是定义该Ability为元服务入口的关键。

    • 对于主应用模块(entry: 其module.json5type同样为"entry",但其Ability通常不配置"atomicService"字段(或根据需求配置为false)。它作为独立应用安装和运行。

      {
        "module": {
          "name": "entry",
          "type": "entry",
          "description": "$string:module_desc",
          "mainElement": "MainAbility",
          "deviceTypes": ["phone", "tablet"],
          "pages": "$profile:main_pages",
          "abilities": [
            {
              "name": "MainAbility",
              "srcEntry": "./ets/mainability/MainAbility.ets",
              "description": "$string:MainAbility_desc",
              "icon": "$media:icon",
              "label": "$string:MainAbility_label",
              "startWindowIcon": "$media:icon",
              "startWindowBackground": "$color:start_window_background",
              "exported": true,
              "skills": [
                {
                  "entities": ["entity.system.home"],
                  "actions": ["action.system.home"]
                }
              ]
              // 不配置"atomicService"字段,默认为普通应用Ability
            }
          ]
        }
      }
      
  3. 构建输出: 当使用ohpm build或DevEco Studio的构建功能对整个工程进行编译时,构建系统会分别处理每个typeentry的模块。

    • entry模块会生成一个标准的应用包,例如entry-unsigned.hap
    • atomicService模块会生成一个元服务包,例如atomicService-unsigned.app。 这两个包会同时输出在工程build目录下各自模块的outputs文件夹中。

重要补充说明

  • 依赖关系:元服务模块可以依赖共享模块("type": "har"),主应用模块也可以依赖同一个共享模块,实现代码复用。
  • 安装与运行:生成的.hap(应用)和.app(元服务)是独立的包,可以分别安装到设备上。元服务包安装后,其入口会出现在服务中心(如负一屏卡片、应用建议等),而主应用则出现在桌面。
  • 工程级配置:确保工程根目录的build-profile.json5文件中正确包含了这两个entry模块。
    {
      "app": {
        "signingConfigs": [],
        "products": [
          {
            "name": "default",
            "signingConfig": "default",
            "compileSdkVersion": 4,
            "compatibleSdkVersion": 4,
            "runtimeOS": "HarmonyOS"
          }
        ],
        "targets": [
          {
            "name": "default",
            "applyToProducts": ["default"]
          }
        ]
      },
      "modules": [
        {
          "name": "entry",
          "srcPath": "./entry"
        },
        {
          "name": "atomicService",
          "srcPath": "./atomicService"
        }
        // ... 其他模块
      ]
    }
    

通过以上配置,即可在一个HarmonyOS Next工程中,一次构建过程同时产出应用包和元服务包。

回到顶部