HarmonyOS鸿蒙Next中如何在一个project里面同时打出元服务和应用的包
HarmonyOS鸿蒙Next中如何在一个project里面同时打出元服务和应用的包 有没有什么办法在一个project里面,同时打出元服务和应用的包
【解决方案】
通过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(元服务),各自独立上架即可 。
注意事项:
- 元服务模块只能调用元服务 API 集,混用普通 API 会编译报错 。
- 两个模块的包名可以相同也可以不同,但上架后台要分别创建两条记录、分别申请 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",但不启用(或按需启用)原子化服务特性。
以下是具体步骤和配置要点:
-
工程结构规划: 假设工程名为
MyProject,它包含两个模块:entry: 作为主应用入口模块,编译输出为应用的.hap包。atomicService: 作为元服务模块,编译输出为元服务的.app包。
-
模块配置文件(
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.json5中type同样为"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 } ] } }
-
-
构建输出: 当使用
ohpm build或DevEco Studio的构建功能对整个工程进行编译时,构建系统会分别处理每个type为entry的模块。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工程中,一次构建过程同时产出应用包和元服务包。

