HarmonyOS 多设备短视频开发 : 09 多 HAP 包管理:一次开发多端部署实践
发布时间:2026/8/31 12:25:29 作者:尧图编辑部 阅读量:1,286

09 多 HAP 包管理一次开发多端部署实践一、引言HarmonyOS 的多 HAP 机制允许应用按设备形态分发不同的安装包。本项目中手机/平板、电脑、智慧屏、手表分别使用独立的 HAP 包共享同一套业务代码实现一次开发、多端部署。二、HAP 包结构2.1 四个产品 HAPHAP 名称安装包名目标设备入口 Abilitymultishortvideodefaultsampleproducts/default手机、平板MultiShortVideoDefaultAbility.etsmultishortvideopcsampleproducts/pc电脑MultiShortVideoPcAbility.etsmultishortvideotvsampleproducts/tv智慧屏MultiShortVideoTvAbility.etsmultishortvideowearablesampleproducts/wearable手表MultiShortVideoWearableAbility.ets2.2 共享模块模块类型被哪些 HAP 引用multishortvideobasecommon 共享库全部multishortvideoadaptivevideofeatures 共享库全部multishortvideocommentfeatures 共享库全部multishortvideoindividualfeatures 共享库全部三、产品差异化入口3.1 手机/平板default— 底部标签导航使用MSVTabs配合 Navigation支持底部浮动标签Entry ComponentV2 struct Index { build() { Navigation(this.pathStack) { MSVTabs({ data: this.data, ... }) } .navBarWidth(new WidthBreakpointTypenumber(410, 410, 700, 700).getValue(this.windowInfo.widthBp)) .mode(NavigationMode.Stack) } }3.2 电脑pc— 侧边栏导航使用SideBarContainer实现桌面风格的侧边栏菜单Entry ComponentV2 struct Index { build() { SideBarContainer(SideBarContainerType.Embed) { Column() { /* 侧边图标菜单 */ } Column() { /* 主内容区域 */ } } .sideBarWidth(112) .autoHide(false) .showControlButton(false) } }3.3 智慧屏tv— 顶部标签栏使用TVTabs配合遥控器焦点导航Entry ComponentV2 struct Index { build() { Navigation(this.pathStack) { Stack({ alignContent: Alignment.Top }) { TVTabs() // 顶部标签 Column() { /* 内容区域 */ } } } .navBarWidth(880) .mode(NavigationMode.Split) } }3.4 手表wearable— 精简标签取消 HDS 浮动效果使用精简原生 TabsEntry ComponentV2 struct Index { build() { Navigation(this.pathStack) { MSVTabs({ data: this.data, useFloating: false, barPosition: BarPosition.End, barFontsize: 15 }) } .mode(NavigationMode.Stack) } }四、模块依赖配置4.1 根 build-profile.json5{ modules: [ { name: multishortvideodefaultsample, srcPath: ./products/default }, { name: multishortvideopcsample, srcPath: ./products/pc }, { name: multishortvideotvsample, srcPath: ./products/tv }, { name: multishortvideowearablesample, srcPath: ./products/wearable }, { name: multishortvideobase, srcPath: ./common/multishortvideobase }, { name: multishortvideoadaptivevideo, srcPath: ./features/multishortvideoadaptivevideo }, { name: multishortvideoindividual, srcPath: ./features/multishortvideoindividual }, { name: multishortvideocomment, srcPath: ./features/multishortvideocomment }, ] }4.2 各 HAP 的 oh-package.json5{ dependencies: { multishortvideobase: file:../../common/multishortvideobase, multishortvideoadaptivevideo: file:../../features/multishortvideoadaptivevideo, multishortvideocomment: file:../../features/multishortvideocomment, multishortvideoindividual: file:../../features/multishortvideoindividual } }五、多设备资源管理每个 HAP 有独立的资源目录products/default/src/main/resources/ products/pc/src/main/resources/ products/tv/src/main/resources/ products/wearable/src/main/resources/各 HAP 可定义设备特定的颜色、字符串、图片等资源与公共资源层级区分。六、最佳实践差异化最小化只在 products 层处理设备特有 UI 差异业务逻辑统一在 features 层共享最大化common 层的工具类和组件尽可能通用减少重复代码模块化构建每个 HAP 独立编译减少构建依赖资源分级设备特有资源放入各 HAP 的 resources 目录通用资源放入共享模块入口轻量化Ability 入口只做初始化页面布局交给 Component 组件