鸿蒙掌上驾考宝典应用开发45:版本演进与变更解读
第45篇:版本演进与变更解读

一、引言
一个项目的版本演进历史,记录了它的技术选型变迁和功能迭代路径。本项目从 1.0.0 发展到 1.0.7,经历了从基础功能到鸿蒙新特性集成的完整过程。本文将结合 CHANGELOG 和源码,深入解读每个版本的核心变更及其背后的技术考量。
二、CHANGELOG 全景
2.1 完整版本记录
## 1.0.7 — 适配深色模式
## 1.0.6 — 新增答题字体跟随系统变化、新增服务卡片
## 1.0.5 — 组件引入优化
## 1.0.4 — 新增鸿蒙新特性:开屏广告、分享、数字收银台、推送
## — 新增通用组件:app_setting、membership、share、collect_personal_info、feedback
## — 废弃API整改
## 1.0.3 — UX问题修复
## 1.0.2 — 搜索问题修复、ReadMe优化
## 1.0.1 — ReadMe优化
## 1.0.0 — 初始版本
从版本演进可以看出一个清晰的模式:从基础功能到企业级集成,再到鸿蒙新特性适配。
三、版本演进深度解读
3.1 v1.0.0 —— 初始版本:核心功能奠基
初始版本实现了驾考应用的核心功能闭环:
- 引导页(城市选择、驾照类型、学车阶段)
- 考试系统(顺序练习、模拟考试、专项练习)
- 视频课程
- 错题本与收藏
- 个人中心
架构特点: 初始版本奠定了三层架构的基础,commons 公共层、components 组件层、products 产品层的划分已经成型。
3.2 v1.0.2 —— 搜索问题修复:用户体验优化
// 搜索功能的数据过滤逻辑
case EXAM_MANAGER_TYPE.search:
examData = originData.filter(item => item.question.includes(searchCondition));
break;
1.0.2 版本主要修复了搜索功能的 Bug。搜索功能的关键在于对题目文本的 includes 匹配,需要确保搜索关键词的编码处理正确,避免中文搜索失败。
3.3 v1.0.4 —— 重大版本:鸿蒙生态集成
1.0.4 是功能最丰富的版本,新增了多项鸿蒙生态能力:
新增能力:
| 能力 | 组件 | 依赖的服务 |
|---|---|---|
| 开屏广告 | aggregated_ads | 华为广告服务 |
| 多平台分享 | aggregated_share | 微信/QQ/微博 SDK |
| 应用内支付 | membership | 数字收银台 |
| 推送通知 | PushUtils | 华为推送服务 |
新增通用组件:
{
"dependencies": {
"app_setting": "file:../../components/app_setting",
"membership": "file:../../components/membership",
"aggregated_share": "file:../../components/aggregated_share",
"collect_personal_info": "file:../../components/collect_personal_info",
"feedback": "file:../../components/feedback"
}
}
这些通用组件的引入,体现了项目从"特定应用"到"通用模板"的转变。
废弃 API 整改: 鸿蒙 SDK 版本升级过程中,一些旧 API 被废弃,需要进行迁移。例如:
// 旧的 API(被废弃)
// router.push({ uri: 'pages/Home' });
// 新的 API(使用 Navigation)
this.vm.navStack.pushPathByName('homeView', true);
3.4 v1.0.5 —— 组件引入优化:模块化重构
1.0.5 版本专注于组件引入方式的优化,主要涉及:
优化前: 组件直接引用路径
import { ExamService } from '../../commons/datasource/src/main/ets/ExamService';
优化后: 通过 HAR 包名引用
import { ExamService } from '@ohos_agcit/driver_license_exam_datasource';
这种优化看似简单,但意义重大:
- 解除了对具体文件路径的依赖
- 组件内部结构变化不影响使用者
- 符合 HAR 模块化的设计理念
3.5 v1.0.6 —— 新特性:字体缩放与服务卡片
1. 答题字体跟随系统变化
// 使用 maxFontScale 控制字体缩放
Text('题目内容')
.fontSize(16)
.maxFontScale(1.5); // 允许最大缩放 1.5 倍
这个特性涉及无障碍适配,允许用户通过系统设置调整字体大小,应用自动适配。
2. 服务卡片
{
"forms": [
{
"name": "widget_2x2",
"src": "./ets/widget/pages/WidgetCard2X2.ets",
"defaultDimension": "2*2",
"supportDimensions": ["2*2", "2*4"]
}
]
}
服务卡片让用户无需打开应用即可查看练习进度,是鸿蒙系统的特色功能。
3.6 v1.0.7 —— 深色模式适配
1.0.7 版本新增深色模式适配,这是鸿蒙系统的重要特性:
// 深色模式切换
private setLightOrDarkMode(context: Context) {
const value = AppStorage.get('lightDarkMode') || 0;
if (value === 0) {
context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
} else if (value === 1) {
context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT);
} else if (value === 2) {
context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);
}
}
核心改造点包括:
- 使用
sys.color系统资源色替代硬编码颜色 - 支持三种模式:跟随系统、强制浅色、强制深色
- 通过 Preferences 持久化用户的选择
四、各版本关键代码变更对照
4.1 1.0.0 → 1.0.4:从原生到生态
// 1.0.0 版本:基础页面路由
import router from '@ohos.router';
router.push({ uri: 'pages/PracticeView' });
// 1.0.4 版本:Navigation 路由
this.vm.navStack.pushPathByName('practiceView', param);
4.2 1.0.4 → 1.0.5:模块化重构
// 1.0.4 版本:直接路径引用
{
"dependencies": {
"exam": "../../components/exam"
}
}
// 1.0.5 版本:标准 HAR 引用
{
"dependencies": {
"exam": "file:../../components/exam"
}
}
4.3 1.0.6 → 1.0.7:新特性叠加
// 1.0.6 新增:服务卡片
updateForm(index: number) {
const formInfo = formBindingData.createFormBindingData(newData);
formProvider.updateForm(formId, formInfo);
}
// 1.0.7 新增:深色模式
private setLightOrDarkMode(context: Context) {
const value = AppStorage.get('lightDarkMode') || 0;
context.getApplicationContext().setColorMode(
value === 0 ? ColorMode.COLOR_MODE_NOT_SET :
value === 1 ? ColorMode.COLOR_MODE_LIGHT :
ColorMode.COLOR_MODE_DARK
);
}
五、版本演进趋势分析
4.1 功能演进路径
v1.0.0: 核心功能可用
↓
v1.0.2: 修复搜索问题,提升基础体验
↓
v1.0.4: 大规模集成鸿蒙生态能力
↓
v1.0.5: 工程化重构,组件引入优化
↓
v1.0.6: 鸿蒙新特性(字体缩放、服务卡片)
↓
v1.0.7: 适配深色模式
4.2 技术演进方向
| 方向 | 初始版本 | 最新版本 |
|---|---|---|
| 组件化 | 基础组件 | 通用 HAR 组件库 |
| 鸿蒙特性 | 无 | 广告、分享、推送、卡片、深色模式 |
| 工程化 | 单模块 | 多模块并行构建 |
| 无障碍 | 不支持 | 字体缩放、深色模式 |
| 架构 | 基础三层 | 完善的 dependency 管理 |
五、版本管理最佳实践
5.1 版本号规范
{
"versionCode": 1000000,
"versionName": "1.0.6"
}
versionCode:整数类型,用于系统判断版本新旧,每次发布递增versionName:语义化版本号(x.y.z),用于向用户展示
5.2 CHANGELOG 编写规范
从项目的 CHANGELOG 可以总结出以下规范:
- 按版本分组:每个版本独立标题
- 变更分类:新增、修复、优化等分类
- 描述清晰:每条变更用一句话说清楚
- 用户视角:从用户能感知的角度描述变更
六、总结
DriverLicenseExam 项目的版本演进史,是一部鸿蒙应用开发的技术进化史。从 1.0.0 的基础功能,到 1.0.4 的鸿蒙生态集成,再到 1.0.7 的深色模式适配,项目始终紧跟鸿蒙系统的技术发展。对于开发者而言,理解版本演进的意义在于:
- 技术选型参考:看看哪些功能是逐步加入的,判断优先级
- 架构演进思路:从单模块到多模块的演进路径
- 新特性跟进:了解鸿蒙新特性的集成时机
- 工程化实践:版本管理、CHANGELOG 规范
关键源码文件:
CHANGELOG.md— 完整版本记录AppScope/app.json5— 版本号配置products/entry/src/main/ets/entryability/EntryAbility.ets— 深色模式products/entry/src/main/ets/entryformability/EntryFormAbility.ets— 服务卡片
更多推荐




所有评论(0)