HarmonyOS 鸿蒙Next中应用的穿戴版本如何配置到项目工程里最好?

HarmonyOS 鸿蒙Next中应用的穿戴版本如何配置到项目工程里最好? 鸿蒙5.0刚公开我的项目便起步了,最初的设想就是想做一个跨手机平板电视穿戴的全平台app。

现在手表端终于开放给个人看开发者了,但是开发指南却让我看不懂了。

我之前就设想过很久,所以直接就在工程里新建了单独的wearable手表entry模块,开发的很顺利,在deveco上也构建跑通了。

打包app的时候也正常,但到鸿蒙电脑上安装我的应用时却显示一个应用只能有一个entry包。安装时提醒的报错:安装HAP时提示“code:9568287 error: install invalid number of entry hap”-应用调试-DevEco Studio-开发 - 华为HarmonyOS开发者

然后我又去看了穿戴开发指南,指南上也写了由于穿戴设备和平板电脑手机显示差异过大建议单独分包,给我看的好凌乱。智能穿戴应用开发-穿戴-多端设备体验提升 - 华为HarmonyOS开发者

所以现在是什么情况呢?首先肯定是要分包的吧,穿戴跟手机一个入口太困难了。但是只能打hap包才不报错,hap包的话那要单独上架手表的包吗?好懵逼


更多关于HarmonyOS 鸿蒙Next中应用的穿戴版本如何配置到项目工程里最好?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

install invalid number of entry hap 的关键是同一次安装包里命中了多个 entry HAP。手机/平板/PC/穿戴如果都做成 entry,需要确保同一设备类型最终只会匹配一个 entry,不能把多个对当前设备都可用的 entry 一起装进去。

建议按设备类型拆 product/target 或模块 deviceTypes:手机端 entry 只声明 phone/tablet,穿戴端 entry 只声明 wearable。本地调试时单独构建/安装穿戴 target;上架时再按平台多设备包要求配置。

更多关于HarmonyOS 鸿蒙Next中应用的穿戴版本如何配置到项目工程里最好?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我明白了,如果您的方案正确的我就懂了。等于我打的app包到agc能自动分发,但是自己调测的时候要分开构建是吧,感谢解惑。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

是的,不同的包

【解决方案】
开发者您好,您可参考多设备工程部署与发布创建三层架构工程,包括common层、features层以及products层。
其中products层为Entry入口,可以为手机平板、智能穿戴设备、PC/2in1设备创建不同的Entry模块入口(根据智能穿戴设备包管理策略,智能穿戴设备需要创建单独的Entry模块入口)。
同时products层与features层的module.json5配置文件中"deviceTypes"字段需要实现同一设备只能匹配一个Entry模块入口,每个features层模块匹配单一设备(手机平板设备可考虑共用)。(PC的报错即为products层有多个Entry模块入口,2楼已详细说明)。
参考发布一多应用,无需智能穿戴设备单独上架,应用程序(.app文件)在流水线或应用市场上被解包为N个Entry类型的HAP,根据HAP中的deviceTypes声明的设备类型,分发到不同设备。
如以上方案仍然无法解决问题,请及时反馈。

我一开始就是这么做的,开发过程也一切正常,测试调试也正常,唯独安装PC的时候报错了显示不能多个entry给我搞懵了

你的困惑根源:entry vs feature 概念没搞清楚

一个应用可以打包多个 entry HAP,分别对应不同设备类型,但安装到某一台具体设备时,该设备类型的 entry 只能有一个。

你的报错 9568287 就是因为:一个 App Bundle 里塞了手机 entry + 手表 entry 两个 entry,拿到电脑上安装——电脑发现有两个 entry,不知道用哪个,所以报错。

然后HarmonyOS 的模块分三种,看下面的表

模块类型 能不能独立安装 能不能有页面(Ability) 用途
entry 可以 可以(主入口) 每个设备类型需要一个 entry
feature 不能独立安装 可以(子入口) 公共功能模块,被 entry 调用
har 不能独立安装 没有页面 纯代码/资源共享库

穿戴设备和平板、手机差异太大,官方建议单独做 entry 模块,这没问题。 但 feature 模块不是用来做穿戴设备的——feature 是用来装公共业务代码的,不是用来装另一个设备的入口的。

多 entry 模块的工程结构应该是这样的

MyApp/
├── entry_phone/          ← 手机入口(HAP,打手机包)
│   └── module.json5 → deviceTypes: ["phone"]
│
├── entry_wearable/       ← 穿戴入口(HAP,打穿戴包)
│   └── module.json5 → deviceTypes: ["wearable"]
│
├── entry_tablet/          ← 平板入口(HAP,打平板包,可选)
│   └── module.json5 → deviceTypes: ["tablet"]
│
└── common/                ← HAR,封装共享业务代码
    └── module.json5 → type: har

每个 entry 的 module.json5 里,deviceTypes 只声明自己对应的设备:

// entry_wearable 的 module.json5
{
  "module": {
    "name": "entry_wearable",
    "type": "entry",
    "deviceTypes": ["wearable"],    // ← 只声明穿戴
    "deliveryWithInstall": true,
    "pages": "$profile:main_pages"
  }
}

打包和上架流程,这个应该不用说了吧, 如有帮助给个采纳谢谢

感谢,解决了,我一开始就是按你这种方案配置的。手机平板手表调测都正常,就是PC安装的时候报错给我搞懵了。

在 DevEco Studio 中,为项目添加 wearable 模块作为独立 HAP,在 build-profile.json5multiDevice 配置中指定 wearable 类型。主 entry 模块与穿戴模块通过 dependencies 引用公共资源库,编译时自动生成穿戴专用包。

在鸿蒙应用工程中,一个 bundleName 只允许一个 entry 模块,因为 entry 代表应用主入口。您同时创建了手机和手表两个 entry,安装时就会报错。

正确做法:保留手机/平板端作为 entry,手表端改为 feature 类型的模块。feature 模块可以共享 entry 的资源和能力,并通过独立 HAP 编译。然后在 AppGallery Connect 上为项目配置设备分发规则,让手表设备仅下载安装手表 feature HAP(以及共享的公共 HAP),不会安装手机 entry。

这样无需单独上架手表包,一套应用即可覆盖多设备。手表端如果完全独立、差异极大,才建议创建不同 bundleName 的应用单独上架。

回到顶部