HarmonyOS-APPTMPL-Course:基于 HarmonyOS 多模块架构的端侧课程学习项目

HarmonyOS 学习课程应用模版:端侧课程浏览与播放实践

分支1Tags0

学习课程应用模板

学习课程目录、播放入口与收藏状态的模块组织,基于现有 ArkTS/ArkUI 工程完成业务定制。

模板界面参考

信息 内容
适合谁 已具备 ArkTS/ArkUI 基础、希望基于学习课程模板定制业务的开发者
难度与预计投入 进阶;阅读与体验预计 120 分钟(估算,未实测);不含环境准备与排障,可选二开投入另计
可以学到 当前工程入口、模块依赖、页面与数据关联、新增一节演示课程目录
完成成果 运行原模板,浏览课程目录与学习页面;可选尝试新增一节演示课程目录
实践环境 云端开发工作区或本地 DevEco Studio,使用匹配 SDK;兼容 6.0.1(21)、目标 6.1.1(24);设备与业务服务条件见“运行案例”

阅读入口:运行案例 · 二次开发 · 检查与排障

1. 案例介绍

课程和订单为演示数据,媒体可用性及许可需核对。默认支付宝 SDK 依赖包含 ARM64 原生库;工程另保留支付接口为空实现的模拟器兼容依赖,可按支付组件说明切换依赖并重新同步、构建。兼容实现的设备可用性以实际运行结果为准。

端侧业务按入口、特性、公共能力拆分成多个 HAR,entry 负责启动、登录与路由聚合;课程数据来自 commons/http 中的本地 mock 响应,不需要部署云函数即可浏览主要页面。

核心功能与体验

  1. 首页浏览推荐课程、直播课程、免费课程和导师课程,并通过搜索或分类进入课程列表。

  2. 进入录播课程详情后查看课程介绍、学习人数、章节目录,并从章节跳转学习。

  3. 视频页支持播放/暂停、进度调节、倍速、选集、分辨率、画中画、分享与收藏。

  4. 学习资料页提供章节练习、每日一练和模拟考试入口,答题后查看成绩与解析。

  5. “我的”支持登录、个人资料、订单、收藏、下载、观看记录、消息、意见反馈与设置。

课程首页,展示分类入口与热门课程 录播课程详情,展示课程简介、目录与试看入口
课程首页,展示分类入口与热门课程 录播课程详情,展示课程简介、目录与试看入口

技术方案一览

flowchart LR

    A["entry"] --> B["home / course / mine"]

    B --> C["http + commonlib"]

    B --> D["recorded_player / live_streaming"]

    B --> E["search / classification / open_ads"]

    B --> F["login_info / aggregated_payment / aggregated_share / feed_back"]

层级 模块/技术 作用
入口 entry 启动 Ability、隐私弹层、开屏广告、主 Tab、登录页和全局路由
特性 home、course、mine 承载首页/学习、课程视图与个人中心业务页面
公共 commonlib、http 提供路由、组件、模型、偏好存储、Axios 请求与本地 mock
能力组件 recorded_player、live_streaming、search、classification、open_ads 视频/直播、搜索、分类、广告与开播能力
账号与交易 login_info、aggregated_payment、aggregated_share、feed_back 登录、收银台、分享与反馈

AxiosMock 拦截 /course/data、/home/hotCourseData 等本地请求,返回 CourseData 中的演示课程。页面拿到数据后只做视图渲染与路由跳转,便于把 mock API 替换为真实后端。

边界说明

  • 本案例无 AGC 云函数和云数据库;课程、直播、学习记录等主要数据来自端侧本地 mock。

  • 华为账号登录依赖应用签名与 client_id;当前源码中为占位值,未完成配置时登录链路无法作为生产登录使用。

  • 支付、微信/QQ/微博分享、广告服务需要按对应平台申请账号、AppID 或广告位

  • installationFree 为 false,应用会安装为普通桌面应用,可正常从桌面图标拉起。

关键目录

内容 位置
构建、签名、安装、清理与回滚 docs/BUILD.md
组件与模块使用说明 docs/upstream-README.md
许可证 LICENSE

工程入口与模块

工程入口为 .,构建清单声明 15 个模块,其中 HAR 14 个、HSP 0 个。应用形态依据 AppScope/app.json5 的 bundleType 判断为应用

2. 运行案例

环境与配置

默认依赖的 ARM64 原生库不能直接用于 x86_64 模拟器。工程已提供 components/aggregated_payment/libs/swallow_alipay_sdk 接口兼容实现;需要模拟器体验时,按支付组件说明将组件依赖切换到该本地实现,再同步依赖并重新构建。切换后的构建与设备运行需按实际结果确认,不能把默认依赖的架构限制扩大为整个模板不支持模拟器。

条件 本案例要求 核对位置
工程目录 . build-profile.json5
SDK/API 兼容 6.0.1(21),目标 6.1.1(24);使用支持此配置的 DevEco Studio 与配套 SDK 构建配置的 products
设备 源码声明 phone;当前默认依赖包含仅适配 ARM64 的原生库,使用兼容 ARM64 设备体验模板 product/entry/src/main/module.json5
应用身份 course.1.xxxxxx,应用 AppScope/app.json5
入口 模块 entry,Ability EntryAbility product/entry/src/main/module.json5
签名 模拟器按其调试安装机制安装;真机使用自己的有效调试签名,核对实际产物是否适配目标设备 DevEco Studio 签名设置
权限 ohos.permission.INTERNET、ohos.permission.APP_TRACKING_CONSENT 模块 requestPermissions 与实际能力调用

费用与配额

本地演示使用端侧能力,无需部署云业务后端;云端工作区和模拟器的配额、费用及停止条件按平台实际规则核对。华为账号、支付、分享和广告属于可选联调能力;正式使用前应遵循对应服务的账号、审核和配额规则。

按需服务标识与凭据

占位符 含义 获取位置 存放位置
client_id 华为账号/AGC 应用 Client ID AppGallery Connect 应用信息 product/entry/src/main/module.json5
<平台 AppID> 微信、QQ、微博或广告位 ID 对应开放平台或媒体平台 组件配置或业务代码中的占位符处

仓库中没有提交任何真实密钥或证书。首次真机构建前请在 DevEco Studio 中配置自动签名或手动签名。

云端运行

平台云端模拟器(云手机)的 ROM 滚动提供最新 5 至 6 个版本;选择后核对实际 API 和 ABI,不能将其视为 ARM64 真机。

1. 创建项目并导入案例

打开在线开发工作区或从案例中心进入,登录并按页面引导创建工作区;选择本案例,未导入时使用案例仓库。

先查看平台当前可选 ROM 的 API、ABI 与费用配额,以匹配构建目标;完成编译后再创建并连接云手机。

复制给 AI:

请在已打开的云端工作区获取或识别课程案例仓库 main 分支,读取构建清单、AppScope/app.json5、product/entry 和支付组件说明;检测可选云端模拟器 ROM 的 API 与 ABI,列出 SDK、依赖和签名条件供我选择。

默认支付宝 SDK 含 ARM64 原生库;所选 ABI 不匹配时不得安装该正式 SDK 产物。若选 x86_64,可按组件说明选择仓内支付接口为空实现的模拟器兼容依赖,仅作界面体验并保留正式 SDK。遇到错误时,请结合工作区路径、所选 ROM API/ABI、依赖状态和首个错误核对组件说明后处理;未匹配时停止安装并选择适用设备或兼容路径。

完成标志:云端已定位课程工程,SDK、所选 ROM 架构及支付依赖方案明确,需确认的选择已列出。

2. 让 AI 编译打包

复制给 AI:

请按我确认的云端模拟器 ABI 与支付依赖方案同步依赖并构建 entry HAP,报告实际产物位置、模式、签名及适用设备;保留正式 SDK,不使用旧包。

正式 SDK 与选定 ABI 不匹配时停止正式 SDK 安装;x86_64 兼容实现的支付接口返回空结果,切换后必须重新构建。遇到错误时,请结合首个构建错误、SDK、依赖方案和 ABI 核对后最小修复或选择适用设备。

完成标志:本次云端构建成功,entry 产物、所选依赖、签名和 ABI 条件可核对。

3. 创建并连接云手机

在当前工作区打开云手机入口,选择与本次产物的 API、ABI 和签名条件匹配的 ROM,创建并连接云手机。平台滚动提供最新 5 至 6 个 ROM 版本;按页面完成连接授权,不能把云端模拟器当作 ARM64 真机,也不连接本机设备。若没有匹配的 ROM,先停止安装并让 AI 核对可用设备并调整构建目标以匹配可选云手机。

完成标志:云手机已创建,工作区可识别其在线连接,实际 API、ABI 与本次产物兼容。

4. 让 AI 安装并打开应用

复制给 AI:

请识别工作区可连接的云端模拟器并让我选择,复核所选 ROM 实际 API、ABI、签名和本次构建产物的依赖方案,安装并启动 EntryAbility;记录课程首页和媒体实际状态。

仅用选定云端模拟器和本次产物;遇到错误时,请结合模拟器标识、API、ABI、安装日志及媒体状态不匹配时选择适用设备或经确认的兼容构建。

完成标志:云端模拟器打开课程首页,课程及播放入口按实际页面可见。

5. 体验主要功能

  1. 在“首页”浏览热门课程与分类,打开一项录播课程。观察结果:课程简介、学习人数和章节目录可见;未登录时“学习”页可能为空,不要求先取得学习进度。
  2. 查看课程目录,并按资源条件打开一个测试条目。观察结果:所选目录与播放器或错误状态对应。
  3. 返回并查看个人中心中的收藏或观看记录入口。观察结果:不串课程;真实账号、媒体及订单服务分别配置。

完成标志:课程首页、录播课程简介和章节目录可浏览,播放器或资源错误对应所选条目;未登录的学习列表按实际空态处理。

6. 保存成果并停止云端资源

云工作区及云手机使用前查看实际配额、费用和资源状态;完成后保存所需工程,停止云手机与不再使用的工作区,按平台实际规则处理资源。

完成标志:已保存所需工程,云手机和不再使用的工作区按平台状态停止。

本地运行

源码入口:本案例 GitCode 仓库。请先将该仓库交给 AI;已有本地工程时直接使用原目录。

1. 准备开发工具

安装并打开“环境与配置”中要求的 DevEco Studio,在 SDK 管理中准备兼容本工程的 SDK 与配套工具,并启用本机可用的 AI 开发助手。已有开发环境时直接检查现有版本,无需重复安装。

完成标志:DevEco Studio 和 AI 开发助手可用,工程所需 SDK 与工具可在本机找到。

2. 让 AI 获取案例代码并核对工程

复制给 AI:

请获取本节源码入口所列仓库的 main 分支;已有工程时直接使用原目录,不覆盖已有修改。请读取课程工程的构建清单、AppScope/app.json5、product/entry 和支付组件依赖,核对 SDK 与设备架构,准备依赖并列出需我确认的兼容方案;保留正式 SDK 与原配置。

默认支付宝 SDK 包含 ARM64 原生库;遇到错误时,请结合架构、SDK 版本及首个依赖错误核对支付组件说明后最小修复并重试。

完成标志:IDE 识别模块,设备与依赖方案明确,缺失条件已列出。

3. 让 AI 编译打包

复制给 AI:

请依据确认的设备架构与支付依赖构建 entry HAP,记录所选依赖、实际产物和安装条件;保留官方 SDK,兼容实现只能用于演示。

按仓内支付组件说明切换依赖并重新同步构建;遇到错误时,请结合首个构建错误、设备架构和依赖状态定位后最小修复并重新构建。

完成标志:本次构建成功,entry 产物及所选支付依赖可核对。

4. 准备模拟器或真机

在 DevEco Studio 的设备管理中启动并选择兼容模拟器,或连接自己的鸿蒙真机并完成调试授权和签名。核对设备 API、ABI 与本次产物及原生依赖是否匹配,确认设备在开发工具中在线;不匹配时先选择适用设备再安装。

模拟器需由你启动选择;真机需你自己的签名。

完成标志:设备可连接,所选依赖与设备架构匹配,真机签名适用。

5. 让 AI 安装并打开应用

复制给 AI:

请在我选择的设备安装并启动本次产物,引导我浏览课程分类、录播详情和章节播放入口,记录实际页面与远程媒体状态。

媒体可用性和许可按资源确认。遇到错误时,请结合设备、章节、网络状态和原始日志区分安装、资源和账号条件后继续。

完成标志:课程首页、详情和章节入口可观察;播放成功或失败按实际结果说明。

6. 体验主要功能

  1. 在“首页”浏览热门课程与分类,打开一项录播课程。观察结果:课程简介、学习人数和章节目录可见;未登录时“学习”页可能为空,不要求先取得学习进度。
  2. 查看课程目录,并按资源条件打开一个测试条目。观察结果:所选目录与播放器或错误状态对应。
  3. 返回并查看个人中心中的收藏或观看记录入口。观察结果:不串课程;真实账号、媒体及订单服务分别配置。

本地体验结束后停止模拟器或断开调试设备;保留正式 SDK,按实际需要恢复或管理所选依赖配置。

完成标志:课程首页、录播课程简介和章节目录可浏览,播放器或资源错误对应所选条目;未登录的学习列表按实际空态处理。

3. 二次开发

可修改范围与约束

定制内容 修改入口 输入与约束 完成结果
新增一节演示课程目录 commons/http/src/main/ets/mocks/Data/CourseData.ets 核对 COURSE_CATALOG 的章节 id 在同一目录内唯一;多个课程可能共用目录,ChapterDetail 按 catalogIndex 和章节 videoUrl 构造播放列表;标题、视频和目录须对应且视频有授权,失败状态明确 新目录可选中,播放器对应新条目;原收藏、订单演示和返回不串状态

任务:新增一节演示课程目录

1. 设计演示课程章节

复制给 AI:

请读取 CourseData.ets 与 ChapterDetail 播放列表的调用,设计新增一节演示课程目录,明确章节 id、catalogIndex、videoUrl 和共享目录影响;先展示方案等待我确认。

同目录章节 id 唯一;标题、视频与目录对应,视频使用有授权资源,失败状态明确。遇到错误时,请结合未明确的目录与播放器调用关系或媒体许可 追踪,未确认前不实施。

完成标志:方案列出数据与播放映射、共享影响和验证方法,并由我确认。

2. 实现已确认方案:按确认方案添加章节

复制给 AI:

请按我确认的方案新增演示章节并连接现有目录与播放器,保留其他课程、收藏与订单演示行为,列出修改文件及未验证事项。

沿用 COURSE_CATALOG 和视频字段,保持 id 唯一,不加入未知来源媒体。遇到错误时,请结合章节 id、数据差异和首个错误 定位,最小修复后检查映射。

完成标志:新增章节有对应目录与视频,原课程结构保留。

3. 验证改造与原有功能:回归章节播放和原课程

复制给 AI:

请重新构建并在我选择的设备检查新目录选择和对应播放器,回归收藏、订单演示及返回;记录实际媒体结果和依赖条件。

网络或视频不可用时如实记录,不假称播放成功。遇到错误时,请结合章节、设备、网络状态和日志定位后复验失败分支。

完成标志:新增目录可选并指向对应媒体;原课程入口和返回按实际操作回归。

此任务可选,需由读者确认方案后实施。

既有实现与配置说明

工程结构解读


Course

├── AppScope/app.json5                 # bundleName、版本号与应用图标

├── build-profile.json5                # product、SDK 版本和模块注册

├── product/entry                      # 入口 HAP

├── features/home|course|mine          # 页面特性模块

├── commons/commonlib|http             # 通用模型、路由与数据层

├── components/...                     # 播放、直播、搜索、登录、支付等 HAR

└── docs/BUILD.md                      # 构建与联调手册

RouterTable.ets 把入口页和各 HAR 的页面 Builder 注册到同一个路由表,Index.ets 中的 Navigation.pageMap 根据路由名渲染目标页。新增页面时先实现页面 Builder,再注册路由。

数据与状态

  • commons/http/src/main/ets/apis/Apis.ets 暴露课程、首页、目录、观看记录等查询函数。

  • RequestMock.ets 使用 AxiosMock 拦截同名 URL,并返回 COURSE_DATA / COURSE_CATALOG。

  • 用户登录态、课程收藏、下载记录和观看记录通过 commonlib 的模型与 PreferenceUtil/AppStorageV2 在页面间共享。

  • 替换真实后端时,保留 Apis.ets 的函数签名,把 mock 拦截改为真实服务响应即可。

二次定制建议

  1. 修改 AppScope/app.json5 的 bundleName、versionCode 与应用名称资源。

  2. 调整 CourseData.ets 中的课程标题、讲师、时长、章节与封面,保持字段名不变。

  3. 按品牌色调整首页和详情页样式;不要修改模块间导出名称。

  4. 如果要上线登录、支付、分享或广告,先在各平台完成配置,再替换源码中的占位 AppID / Client ID。

4. 检查与排障

功能检查

对象 操作与输入 预期结果
原模板 从首页打开录播课程简介及章节目录,按资源条件选择测试条目后返回 课程简介、目录和所选播放器或错误状态对应;未登录学习列表允许为空
可选二开 按“新增一节演示课程目录”操作 新目录可选中,播放器对应新条目;原收藏、订单演示和返回不串状态
边界与返回 在上述体验入口取消当前选择、返回列表,再次打开同一演示条目;涉及录入时只用测试数据 返回到对应列表或入口;取消不提交新数据;重新进入及重启的保留范围按本案存储说明判断
外部能力 分别核对账号、权限和服务配置 实际成功与 mock 分开记录;拒绝或失败有反馈和退出路径

业务验收

高频问题

现象 可能原因 处理
构建失败 SDK、hvigor 或依赖未安装完整 按 docs/BUILD.md 检查环境,执行 ohpm install --all 后重试
真机安装失败 HAP 未签名或签名与设备不匹配 在 DevEco Studio 配置自动/手动签名,重新构建
首页无课程 http HAR 的 mock 未编译进包或资源异常 清理 build/ 与 oh_modules/ 后重装依赖,确认 Apis.ets 引用了 RequestMock.ets
登录无响应 client_id 为占位值或签名指纹未配置 在 AGC 应用中配置 Client ID、公钥指纹并重新签名
分享/支付无效 对应平台 AppID、商户或环境未配置 先使用组件文档确认配置,不要把演示环境当作生产链路

常见问题与定位顺序

现象 先收集什么 排查与处理 复验
依赖或构建失败 首个有效错误、SDK、构建命令和依赖日志 先确认打开正确工程目录,执行 ohpm install --all,核对模型与配套 SDK;不盲目升级依赖 重新构建并核对实际产物
安装或启动失败 设备标识、系统、签名、包名与 Ability 核对签名、版本号、设备兼容及 HAP/HSP 完整性;用正确入口拉起 再次安装启动并检查原始日志
页面空白或外部能力失败 操作步骤、授权状态、接口响应和相关日志 区分本地数据、云端图片和真实服务;只修复已经定位的原因 重做原步骤,并验证拒绝和返回

请结合当前 SDK、设备、复现步骤和原始错误定位问题,区分已证实原因、候选原因与未知项;核对对应版本的官方说明,修复后重做原步骤和受影响功能。不要用旧包或静态检查代替本次设备结果。

实验配置与生产要求

  • 生产环境不要在客户端保存支付密钥或长期访问凭据;支付结果必须以服务端通知为准。

  • 华为账号登录、分享和广告涉及用户数据与隐私授权,上线前需补齐隐私政策、权限申请与合规说明。

清理资源

实验结束后清理本工程 build/、oh_modules/ 和 .hvigor/,并卸载设备上的 course.1.xxxxxx。完整清理与回滚步骤见 docs/BUILD.md。

卸载或清除应用数据前,先备份需要保留的演示记录与自己的数据。保留源码与签名文件。若曾创建云侧测试资源,只处理自己项目的临时资源,勿影响共享资源。

5. 来源与维护

代码许可见 LICENSE。第三方组件及素材遵循各自随附的许可与署名要求。

维护和问题反馈:本仓库 Issues。提交问题时附上工具版本、复现步骤及已去除凭据的日志。

开发参考

项目介绍

HarmonyOS 学习课程应用模版:端侧课程浏览与播放实践

定制我的领域