第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 可以总结出以下规范:

  1. 按版本分组:每个版本独立标题
  2. 变更分类:新增、修复、优化等分类
  3. 描述清晰:每条变更用一句话说清楚
  4. 用户视角:从用户能感知的角度描述变更

六、总结

DriverLicenseExam 项目的版本演进史,是一部鸿蒙应用开发的技术进化史。从 1.0.0 的基础功能,到 1.0.4 的鸿蒙生态集成,再到 1.0.7 的深色模式适配,项目始终紧跟鸿蒙系统的技术发展。对于开发者而言,理解版本演进的意义在于:

  1. 技术选型参考:看看哪些功能是逐步加入的,判断优先级
  2. 架构演进思路:从单模块到多模块的演进路径
  3. 新特性跟进:了解鸿蒙新特性的集成时机
  4. 工程化实践:版本管理、CHANGELOG 规范

关键源码文件:

  • CHANGELOG.md — 完整版本记录
  • AppScope/app.json5 — 版本号配置
  • products/entry/src/main/ets/entryability/EntryAbility.ets — 深色模式
  • products/entry/src/main/ets/entryformability/EntryFormAbility.ets — 服务卡片
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐