DAYU200升级OpenHarmony 6.0

  1. 安装驱动


2. 给DAYU200烧录镜像源
3. 去官网下载DAYU200的镜像源
网址:https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist


4. 导入镜像源配置。注意:需要更换镜像实际的路径位置


5. 按住VOL-/RECOVERY 按键(图中标注的①号键)不松开 1.5秒时按一次RESET 按钮(图中标注的②号键)。此时烧录工具显示“发现一个LOADER设备” ,说明进入了烧写模式 松开按键,点击“执行”按钮进行烧录 如果烧写成功, 在工具界面右侧会显示下载完成

大赛开发流程

一、 仓库创建与题目文件上传(基础准备)

步骤 1:在 AtomGit 组织下创建专属仓库

  1. 登录 AtomGit 账号,进入目标组织主页;
  2. 点击「新建仓库」,填写仓库信息
  3. 点击「创建仓库」,完成组织仓库搭建。

步骤 2:仓库克隆与题目文件部署

  1. 克隆组织仓库到本地:
  • 在组织仓库主页复制仓库地址(推荐 HTTPS,更易操作);
  • 打开本地终端,切换到目标存放目录,执行克隆命令:
git clone 你的组织仓库地址
  1. 部署题目文件:
  • 下载大赛提供的题目文件包,解压到本地;
  • 将解压后的所有题目文件,复制到克隆后的本地仓库目录中,覆盖原有初始化文件。
  1. 验证文件:确认本地仓库目录中,题目文件完整存在,无缺失或路径错误。

步骤 3:代码提交与推送到远程仓库

cd 你的本地仓库文件夹名称
  1. 进入本地仓库目录(终端中切换路径):
    cd 你的本地仓库文件夹名称
  2. 执行代码提交三部曲(修正原始流程中git add.的空格缺失问题,避免命令失效):
# 1. 追踪所有新增/修改的文件
git add .
# 2. 提交代码并添加规范版本备注(备注清晰便于后续版本回溯)
git commit -m "V1.0: 上传大赛题目基础文件"
# 3. 推送到组织仓库的main分支
git push origin main

常见问题兜底方案:

问题 1:git commit无响应 / 提示 “please tell me who you are”解决方案:

  • 配置 Git 用户信息(全局配置,一次配置永久生效),执行以下命令:
git config --global user.name userID
git config --global user.email userID @noreply.atomgit.com
  • 配置完成后,重新执行git commit -m "V1.0: 上传大赛题目基础文件"即可。

问题 2:弹出密钥 / 身份验证弹窗解决方案:

1. 登录 AtomGit 个人主页,找到「个人设置」-「访问令牌」-「新建令牌」;
2. 配置令牌权限(勾选「仓库读写权限」),设置有效期(建议覆盖大赛周期);
3. 生成令牌后,复制令牌内容(仅显示一次,务必保存);
4. 返回验证弹窗,用户名填写 AtomGit 账号,密码填写上述访问令牌,完成验证。

二、 基于 Migrate Assistant 实现自动迁移

  1. 打开 DevEco Studio,导入本地仓库项目(「File」-「Open」- 选择本地仓库目录,确认导入);
  2. 使用 Migrate Assistant 工具:


3. 配置迁移参数:

  • 选择迁移目标版本(按大赛要求,选择 API 20 及对应 HarmonyOS 版本);
  • 勾选「自动修复兼容问题」「保留原始代码备份」(便于迁移失败后回滚);
  • 点击「Start Migrate」,开始自动迁移;
  1. 迁移后校验:
  • 查看迁移报告(工具底部弹出),确认无严重错误(警告可按需排查);
  • 检查项目目录结构是否变更,核心文件(如 Ability、UI 相关文件)是否正常保留。

三、 API 20 SDK 配置与版本适配(修复配置异常)

骤 1:配置 API 20 SDK 环境

  • 打开 DevEco Studio,进入设置->openharmony SDK
  • 配置项目 SDK:

  • 选择SDK位置
  • 勾选API20->右下角点击确定

步骤 2:修复配置文件异常(精准路径 + 操作说明)

针对项目配置文件不兼容问题,修改指定 JSON5 文件,确保工程适配 API 20:

  • 找到项目中的两个核心配置文件(明确文件路径,避免查找错误):
  • 文件 1:项目根目录 / build-profile.json5

  • 文件 2:项目根目录 /entry/ build-profile.json5

验证配置:关闭配置文件后,重新打开确认替换内容无误,无语法错误(JSON5 格式支持注释,注意不要误删注释符号)。

四、 工程同步与自动编译

  1. 手动触发工程同步:
  • 点击 DevEco Studio 顶部工具栏的「Sync Project with Gradle Files」(同步图标,形似刷新的箭头);
  • 等待同步完成(底部进度条消失,无报错提示),同步过程中会自动下载缺失的 API 20 依赖包;
  1. 执行自动编译:
  • 顶部菜单栏「Build」-「Build Project」(完整编译工程,推荐首次编译使用);
  1. 编译失败初步排查:
  • 若提示依赖缺失:重新同步工程,或手动在「File」-「Project Structure」-「Modules」中添加对应依赖;
  • 若提示配置错误:返回第三步,检查build-profile.json5文件是否替换正确,有无语法错误(如逗号缺失、大括号不匹配);

若提示 SDK 未找到:进入「Settings」-「Appearance & Behavior」-「System Settings」-「HarmonyOS SDK」,下载 API 20 对应的 SDK 包。

五、 新旧接口替换(精准修改 + 报错修复)

EntryAbility.ts文件中存在3个引用是老引用方式,按照接口名称查找api文档,找到新版本下的接口方式并更新,同时修改在更新接口的过程中代码出现报错
步骤 1:定位文件并替换接口引用

  1. 在项目视图中,找到文件路径:entry /src/main /ets/ability / EntryAbility.ts;
  2. 替换原始旧接口引用为 API 20 新接口(严格按以下代码替换,避免拼写错误):
引用(删除原有全部 3 行导入代码):
//原代码中的引用
import hilog from '@ohos.hilog';
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';
新引用(添加以下 3 行导入代码):
import { hilog } from '@kit.PerformanceAnalysisKit';
import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
  1. 同步代码:保存文件(Ctrl+S),DevEco Studio 会自动进行语法校验。

步骤 2:解决接口替换后的报错问题

  • 报错 :“‘window’ is not defined”/ 接口调用报错
  • 原因:新接口命名空间变更(旧接口为Window(大写 W),新接口为window(小写 w));

解决方案:在EntryAbility.ts中,将所有旧接口调用(如Window.create)修改为新接口调用(window.create),匹配导入的命名规范。

六、 个性化功能开发(落地式步骤,对应需求)

基于大赛需求,将个性化功能拆解为可落地的开发步骤,确保功能完整实现:

  1. 星球图标替换:
  • 步骤 1:在网上下载高清正方形星球图片(太阳 + 八大行星,建议 PNG 格式,背景透明);
  • 步骤 2:将星球图片放入项目资源目录(entry /src/main /resources/media);
  • 步骤 3:替换原有图标:在 UI 代码中,将原有图标引用(如默认图标组件)修改为本地星球图片路径,配置图片大小与样式。
 // ... (前面代码省略)
  build() {
    Stack() {
      Stack() {
        // 【功能点 1 - 星球部分】:这里循环渲染八大行星
        // 具体的星球图片路径存储在 this.iconModel.imagerArr 中
        // 实际渲染图片的 Image 组件在子组件 IconAnimation 中
        ForEach(this.iconModel.imagerArr, (item: IconItem) => {
          IconAnimation({ 
            item: item,
            mainFlag: $mainFlag
          })
        }, (item: IconItem) => JSON.stringify(item.index))
      }
      .width(Common.DEFAULT_FULL_WIDTH)
      .height(Common.DEFAULT_FULL_HEIGHT)
      // ... (中间代码省略)
  // 【功能点 1 - 太阳部分】:这里是中心太阳的图标替换
  // 资源路径修为 app.media.sun_sun62
  Image(
      this.mainFlag
      ? $r("app.media.sun_sun62") 
      : $r("app.media.sun_sun62")
  )
    .width($r('app.float.size_130')) // 设置大小
    .height($r('app.float.size_130'))
    .objectFit(ImageFit.Contain)
    .margin(20)
    // ...
  1. 星球环绕太阳效果实现:
  • 步骤 1:使用 HarmonyOS ArkUI 的动画 API(如RotateAnimation或explicitAnimation);
  • 步骤 2:设置太阳组件为中心节点,星球组件为环绕节点;
 // ... (前面代码省略)
  // 【功能点 2】:显式动画逻辑
  // 点击中心太阳后触发,改变 mainFlag 状态,产生平滑过渡效果
  animate() {
    animateTo(
      {
        delay: Common.DELAY_10,
        tempo: Common.TEMPO,
        iterations: 1,
        duration: Common.DURATION_500,
        curve: Curve.Smooth, // 动画曲线
        playMode: PlayMode.Normal
      }, () => {
        this.mainFlag = !this.mainFlag;
    })
  }
  build() {
    Stack() {
      Stack() {
        // ... (ForEach 循环星球)
      }
      .width(Common.DEFAULT_FULL_WIDTH)
      .height(Common.DEFAULT_FULL_HEIGHT)
      // 【功能点 2】:环绕效果的核心实现
      // 当 mainFlag 变化时,整个包含星球的 Stack 会旋转 360 度
      .rotate({
        x: 0,
        y: 0,
        z: 1,
        angle: this.mainFlag ? Common.ROTATE_ANGLE_360 : 0
      })
  // ... (后面代码省略)
  1. 点击图标 + 介绍弹窗功能
  • 步骤 1:为每个星球组件绑定点击事件(onClick);
  • 步骤 2:创建弹窗组件(如Dialog),设计弹窗样式(标题 + 介绍文案,调整弹窗宽高、位置);
  • 步骤 3:实现弹窗逻辑:点击星球时,根据星球类型弹出对应介绍文案弹窗;
  • 步骤 4:保留原有点击图标变化效果(如星球放大、高亮),确保弹窗与图标变化同时触发。
 // ...
  // 【功能点 3】:定义介绍文案数据
  // 数组下标对应星球的 index,例如 index 0 是地球,就显示数组第 0 个文案
  @State word:string[]=[
'【地球】:太阳系唯一生机盎然的行星...',
'【金星】:地球近邻...',
// ... 其他星球文案
  ]
// ... (在 build 中)
        // 【功能点 3】:点击交互视觉反馈
        // 点击状态下 (clicked 为 true):旋转 360度,放大 (Scale),透明度变低
        .rotate({
          x: 0,
          y: 1,
          z: 0,
          angle: this.item.clicked ? Common.ROTATE_ANGLE_360 : 0
        })
        .scale(
          this.item.clicked
            ? { x: Common.SCALE_RATIO, y: Common.SCALE_RATIO } // 放大
            : { x: 1, y: 1 } // 正常大小
        )
        .opacity(this.item.clicked ? Common.OPACITY_06 : 1)
    // 【功能点 3】:点击事件处理
    .onClick(() => {
      // 切换点击状态(触发上面的放大、旋转效果)
      this.item.clicked = !this.item.clicked;

      // ... (倒计时逻辑见下文)

      // 【功能点 3】:弹出介绍弹窗 (Toast)
      // 获取当前星球对应的文案:this.word[this.item.index]
      // 使用 showToast 显示弹窗
      this.getUIContext().getPromptAction().showToast({
        message: this.word[this.item.index], // 显示对应星球的介绍
        duration: 5000,                      // 弹窗显示 5 秒
        showMode: promptAction.ToastShowMode.DEFAULT,
        bottom: 280                          // 弹窗位置
      });
    })
    // ...
  1. 5 秒倒计时自动复原功能:
  • 步骤 1:在星球点击事件中,创建定时器(setTimeout),设置延时 5000 毫秒(5 秒);
  • 步骤 2:定时器回调函数中,实现复原逻辑:移除星球的放大样式,隐藏弹窗;
// ...
.onClick(() => {
  this.item.clicked = !this.item.clicked;

  // 【功能点 4】:5 秒自动复原
  // 使用 setTimeout 设置一个 5000 毫秒(5秒)的定时器
  setTimeout(() => {
    // 5秒后,将 clicked 状态改回去
    // 星球会缩小回原样,旋转角度归零,透明度恢复
    this.item.clicked = !this.item.clicked;
  }, 5000)

  // ... (弹窗逻辑)
})
// ...

总结

本项目不仅是一次代码层面的版本升级,更是对 OpenHarmony 6.0 (API 20) 高性能动画引擎的一次深度实践。通过本次开发,我们成功达成了以下核心目标:

  1. 跨代际技术攻坚与 Kit 化迁移
    跨越了从 API 9 到 API 20 的版本差异,我们深入实践了 OpenHarmony 全新的 Modularization (Kit化) 架构。特别是针对交互反馈模块,完成了从 @ohos.promptActiongetUIContext().getPromptAction() 的标准化迁移,验证了高版本 SDK 在状态管理与上下文获取上的严谨性与先进性。
  2. 沉浸式动效交互体验
    区别于传统的静态 UI 开发,本项目深度挖掘了 ArkUI 的动画潜力。通过巧妙结合 显式动画 (animateTo)属性动画 (Property Animation),我们实现了“星球膨胀展开”与“微交互反馈”的流畅衔接。在 RK3568 开发板上,成功实现了 60fps 的稳定渲染,证明了 OpenHarmony 完全具备构建高帧率、高互动性教育类应用的能力。
  3. 全链路开发实战闭环
    从底层的 DAYU200 系统镜像烧录、build-profile.json5 的严格模式配置,到上层 Slider 控件与动画系统的毫秒级联动,我们打通了从环境搭建到应用落地的全链路。本项目为开发者在 OpenHarmony 6.0 上开发复杂动效应用提供了可复用的最佳实践范本。

未来,梅科尔工作室将继续深耕 OpenHarmony 生态,探索物理引擎与粒子系统在科普教育场景中的更多落地可能。

【atomgit仓库链接】
https://atomgit.com/MakerStudio/HW_motion_effect_example.git

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐