news 2026/8/31 12:25:13

HarmonyOS 多设备短视频开发 : 09 多 HAP 包管理:一次开发多端部署实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS 多设备短视频开发 : 09 多 HAP 包管理:一次开发多端部署实践

09 多 HAP 包管理:一次开发多端部署实践

一、引言

HarmonyOS 的多 HAP 机制允许应用按设备形态分发不同的安装包。本项目中,手机/平板、电脑、智慧屏、手表分别使用独立的 HAP 包,共享同一套业务代码,实现"一次开发、多端部署"。

二、HAP 包结构

2.1 四个产品 HAP

HAP 名称安装包名目标设备入口 Ability

multishortvideodefaultsampleproducts/default手机、平板MultiShortVideoDefaultAbility.ets
multishortvideopcsampleproducts/pc电脑MultiShortVideoPcAbility.ets
multishortvideotvsampleproducts/tv智慧屏MultiShortVideoTvAbility.ets
multishortvideowearablesampleproducts/wearable手表MultiShortVideoWearableAbility.ets

2.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 WidthBreakpointType<number>(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 浮动效果,使用精简原生 Tabs:

@Entry @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 组件

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 12:21:33

360春招Windows开发笔试深度解析:核心考点与底层机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/8/31 12:21:31

IDM与鼓打贝斯声音设计:从Breakbeat到混音的完整技术解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/8/31 12:21:14

本地模型驱动的自动编程:从零实现最小 dev harness

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/8/31 12:19:38

车牌识别数据集实战:VOC标注与YOLOv5+LPRNet训练

简介&#xff1a;本资源是一套专为计算机视觉与智能交通领域研发者设计的高质量中国汽车车牌识别数据集&#xff0c;适用于车牌检测、OCR识别、模型训练与算法验证等任务&#xff0c;特别适合深度学习初学者及工业级项目开发者快速构建高精度识别系统。数据集共包含8493张真实场…

作者头像 李华
网站建设 2026/8/31 12:17:23

AI基准测试的理性解读:从NVIDIA AVO满分争议看模型评估本质

这次我们来看一个关于AI基准测试的讨论。NVIDIA最近发布了AVO&#xff08;AI Verification Orchestrator&#xff09;工具&#xff0c;并在ARC-AGI-3基准上取得了满分成绩。这听起来很厉害&#xff0c;但深度学习框架Keras的创建者Franois Chollet&#xff08;也是ARC基准的提出…

作者头像 李华
网站建设 2026/8/31 12:16:41

别再傻傻手动改论文格式[特殊字符]这才是毕业格式满分秘诀

毕业避坑&#xff5c;零失误论文排版&#xff5c;懒人福音&#xff5c;稳稳拿捏盲审分数✅ 真心劝所有毕业生&#xff01;别再把时间浪费在无效改格式上了。 很多同学都有个误区&#xff1a;觉得论文格式靠细心、靠手动微调就能完美过关。但亲身经历过才懂&#xff0c;论文格…

作者头像 李华