HarmonyOS 学习课程应用模版:端侧课程浏览与播放实践
当前访问频次受限,请登录后继续访问
学习课程应用模板
学习课程目录、播放入口与收藏状态的模块组织,基于现有 ArkTS/ArkUI 工程完成业务定制。

| 信息 | 内容 |
|---|---|
| 适合谁 | 已具备 ArkTS/ArkUI 基础、希望基于学习课程模板定制业务的开发者 |
| 难度与预计投入 | 进阶;阅读与体验预计 120 分钟(估算,未实测);不含环境准备与排障,可选二开投入另计 |
| 可以学到 | 当前工程入口、模块依赖、页面与数据关联、新增一节演示课程目录 |
| 完成成果 | 运行原模板,浏览课程目录与学习页面;可选尝试新增一节演示课程目录 |
| 实践环境 | 云端开发工作区或本地 DevEco Studio,使用匹配 SDK;兼容 6.0.1(21)、目标 6.1.1(24);设备与业务服务条件见“运行案例” |
1. 案例介绍
课程和订单为演示数据,媒体可用性及许可需核对。默认支付宝 SDK 依赖包含 ARM64 原生库;工程另保留支付接口为空实现的模拟器兼容依赖,可按支付组件说明切换依赖并重新同步、构建。兼容实现的设备可用性以实际运行结果为准。
端侧业务按入口、特性、公共能力拆分成多个 HAR,entry 负责启动、登录与路由聚合;课程数据来自 commons/http 中的本地 mock 响应,不需要部署云函数即可浏览主要页面。
核心功能与体验
-
首页浏览推荐课程、直播课程、免费课程和导师课程,并通过搜索或分类进入课程列表。
-
进入录播课程详情后查看课程介绍、学习人数、章节目录,并从章节跳转学习。
-
视频页支持播放/暂停、进度调节、倍速、选集、分辨率、画中画、分享与收藏。
-
学习资料页提供章节练习、每日一练和模拟考试入口,答题后查看成绩与解析。
-
“我的”支持登录、个人资料、订单、收藏、下载、观看记录、消息、意见反馈与设置。
| 课程首页,展示分类入口与热门课程 | 录播课程详情,展示课程简介、目录与试看入口 |
|---|---|
![]() |
![]() |
技术方案一览
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. 体验主要功能
- 在“首页”浏览热门课程与分类,打开一项录播课程。观察结果:课程简介、学习人数和章节目录可见;未登录时“学习”页可能为空,不要求先取得学习进度。
- 查看课程目录,并按资源条件打开一个测试条目。观察结果:所选目录与播放器或错误状态对应。
- 返回并查看个人中心中的收藏或观看记录入口。观察结果:不串课程;真实账号、媒体及订单服务分别配置。
完成标志:课程首页、录播课程简介和章节目录可浏览,播放器或资源错误对应所选条目;未登录的学习列表按实际空态处理。
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. 体验主要功能
- 在“首页”浏览热门课程与分类,打开一项录播课程。观察结果:课程简介、学习人数和章节目录可见;未登录时“学习”页可能为空,不要求先取得学习进度。
- 查看课程目录,并按资源条件打开一个测试条目。观察结果:所选目录与播放器或错误状态对应。
- 返回并查看个人中心中的收藏或观看记录入口。观察结果:不串课程;真实账号、媒体及订单服务分别配置。
本地体验结束后停止模拟器或断开调试设备;保留正式 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 拦截改为真实服务响应即可。
二次定制建议
-
修改
AppScope/app.json5的bundleName、versionCode与应用名称资源。 -
调整
CourseData.ets中的课程标题、讲师、时长、章节与封面,保持字段名不变。 -
按品牌色调整首页和详情页样式;不要修改模块间导出名称。
-
如果要上线登录、支付、分享或广告,先在各平台完成配置,再替换源码中的占位 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。提交问题时附上工具版本、复现步骤及已去除凭据的日志。

