本文说明 本文 / 项目为华为创新赛生命科学方向参赛作品 —— 鸿蒙原生「生命科学」抗衰 APP 开发配套内容,聚焦 HarmonyOS Next 多端开发 + 生命科学抗衰落地,所有代码 / 教程均为实战开发沉淀。 作者:红目香薰(双师型教师 / 华为云课堂认证讲师 / HarmonyOS 高级开发者) 全平台同步更新:CSDN 博客专家 @红目香薰 / B 站 @红目香薰 后续持续更新:鸿蒙多端适配、抗衰算法优化、华为创新赛备赛技巧,关注不迷路~
知识点一:HarmonyOS Next 在生命科学领域的交互使命
在生命科学的研究与应用中,数据是冰冷的,但生命是鲜活的。作为华为创新赛的参赛作品,本项目旨在通过 HarmonyOS Next 的底层原生能力,构建一套能够感知生命、呼吸律动的 UI 系统。
启动页(Splash Screen)不仅仅是应用加载的过渡,它是用户进入「抗衰宇宙」的第一道门。在传统的开发逻辑中,启动页往往被简化为一张图片。但在本项目中,我们赋予了它「生命力」。通过 ArkUI 的高性能渲染,我们模拟了生物内环境的流动感,让用户在开启 APP 的那一刻,就能感受到「精准抗衰」的技术底气。
视频演示地址:https://www.bilibili.com/video/BV1kizRB9EE5
知识点二:流体梯度背景(Mesh Gradient)的数学逻辑与 ArkUI 实现
生命体的内部环境绝非线性,而是充满了色彩的扩散与交织。为了在 UI 上复现这种美感,我们引入了流体梯度设计。
1. 数学建模:高斯模糊下的色彩干涉
流体梯度的视觉本质是多个径向渐变函数在空间上的叠加。从数学角度看,我们可以通过高斯分布函数来描述每一个色彩中心的能量扩散:

其中,σ标准差)决定了模糊的细腻程度。当我们将多个不同色彩、不同坐标的分布进行叠加时,便产生了丝滑的 Mesh 效果。
2. 代码工程实现
在 ArkUI 中,我们放弃了传统的 Canvas 绘制,转而使用 Stack 容器配合 Circle 组件的 blur 属性。这种方式能够充分利用鸿蒙系统的硬件加速(GPU)能力。
@Builder MeshGradientBackground() {
Stack() {
// 基础底色:#F5F7FA(极简灰),提供视觉的稳定性
Rect().width('100%').height('100%').fill('#F5F7FA')
// 色彩中心 1:丁香紫 (#F0D8FF)
// 象征医学的严谨与抗衰的神秘
Circle()
.width('100%')
.aspectRatio(1)
.fill('#F0D8FF')
.blur(120) // 通过 120vp 的高斯模糊,让边界彻底消失
.position({ x: '40%', y: '10%' })
// 色彩中心 2:樱花粉 (#FFE3EC)
// 象征细胞的新生与年轻化
Circle()
.width('110%')
.aspectRatio(1)
.fill('#FFE3EC')
.blur(100)
.position({ x: '10%', y: '50%' })
// 色彩中心 3:柔和蓝 (#D4E4FF)
// 象征科技、精准与水分
Circle()
.width('120%')
.aspectRatio(1)
.fill('#D4E4FF')
.blur(100)
.position({ x: '-20%', y: '-30%' })
}
}

知识点三:生命分子式(ATP/Glucose/Amino Acid)的数字化呈现
为了凸显「生命科学」的垂直属性,我们选择了生命体中最重要的三种分子作为加载过程中的视觉锚点。
1. 字符编码的艺术:Unicode 下标技术
化学式的严谨排版(下标数字)是设计的难点。我们通过 Unicode 字符集(U+208x)绕过了复杂的排版引擎限制。
| 三磷酸腺苷 | C₁₀H₁₆N₅O₁₃P₃ | 能量之源 (ATP) | 品牌蓝 (#007AFF) |
| 葡萄糖 | C₆H₁₂O₆ | 生命燃料 | 动力红 (#FF3B30) |
| 氨基酸 | C₂H₅NO₂ | 生命基石 | 健康绿 (#34C759) |
2. 组件化的 @Builder 实现
我们将每一个分子封装为独立的组件,以便于复用和精准控制动画。
@Builder ATPFormulaComponent() {
Column() {
Text('C₁₀H₁₆N₅O₁₃P₃') // 严谨的 Unicode 下标
.fontSize(13)
.fontColor('#007AFF')
.fontWeight(FontWeight.Bold)
.letterSpacing(1)
Text('ATP')
.fontSize(9)
.fontColor('#007AFF')
.opacity(0.6) // 辅导文字降权,突出化学式
.margin({ top: 2 })
}
.scale({ x: this.cellScale, y: this.cellScale }) // 绑定呼吸动效
}

知识点四:微动动画(Micro-Animations)的生物学模拟
机械的加载是枯燥的,而生物的律动是具有安抚感的。
1. 动效逻辑流
我们为启动页设计了多维度的并行执行序列,确保视觉反馈的丰富度。
#mermaid-svg-u3Y6e500W2i3HYbK{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-u3Y6e500W2i3HYbK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-u3Y6e500W2i3HYbK .error-icon{fill:#552222;}#mermaid-svg-u3Y6e500W2i3HYbK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-u3Y6e500W2i3HYbK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-u3Y6e500W2i3HYbK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-u3Y6e500W2i3HYbK .marker.cross{stroke:#333333;}#mermaid-svg-u3Y6e500W2i3HYbK svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-u3Y6e500W2i3HYbK p{margin:0;}#mermaid-svg-u3Y6e500W2i3HYbK .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-u3Y6e500W2i3HYbK .cluster-label text{fill:#333;}#mermaid-svg-u3Y6e500W2i3HYbK .cluster-label span{color:#333;}#mermaid-svg-u3Y6e500W2i3HYbK .cluster-label span p{background-color:transparent;}#mermaid-svg-u3Y6e500W2i3HYbK .label text,#mermaid-svg-u3Y6e500W2i3HYbK span{fill:#333;color:#333;}#mermaid-svg-u3Y6e500W2i3HYbK .node rect,#mermaid-svg-u3Y6e500W2i3HYbK .node circle,#mermaid-svg-u3Y6e500W2i3HYbK .node ellipse,#mermaid-svg-u3Y6e500W2i3HYbK .node polygon,#mermaid-svg-u3Y6e500W2i3HYbK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-u3Y6e500W2i3HYbK .rough-node .label text,#mermaid-svg-u3Y6e500W2i3HYbK .node .label text,#mermaid-svg-u3Y6e500W2i3HYbK .image-shape .label,#mermaid-svg-u3Y6e500W2i3HYbK .icon-shape .label{text-anchor:middle;}#mermaid-svg-u3Y6e500W2i3HYbK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-u3Y6e500W2i3HYbK .rough-node .label,#mermaid-svg-u3Y6e500W2i3HYbK .node .label,#mermaid-svg-u3Y6e500W2i3HYbK .image-shape .label,#mermaid-svg-u3Y6e500W2i3HYbK .icon-shape .label{text-align:center;}#mermaid-svg-u3Y6e500W2i3HYbK .node.clickable{cursor:pointer;}#mermaid-svg-u3Y6e500W2i3HYbK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-u3Y6e500W2i3HYbK .arrowheadPath{fill:#333333;}#mermaid-svg-u3Y6e500W2i3HYbK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-u3Y6e500W2i3HYbK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-u3Y6e500W2i3HYbK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-u3Y6e500W2i3HYbK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-u3Y6e500W2i3HYbK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-u3Y6e500W2i3HYbK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-u3Y6e500W2i3HYbK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-u3Y6e500W2i3HYbK .cluster text{fill:#333;}#mermaid-svg-u3Y6e500W2i3HYbK .cluster span{color:#333;}#mermaid-svg-u3Y6e500W2i3HYbK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-u3Y6e500W2i3HYbK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-u3Y6e500W2i3HYbK rect.text{fill:none;stroke-width:0;}#mermaid-svg-u3Y6e500W2i3HYbK .icon-shape,#mermaid-svg-u3Y6e500W2i3HYbK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-u3Y6e500W2i3HYbK .icon-shape p,#mermaid-svg-u3Y6e500W2i3HYbK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-u3Y6e500W2i3HYbK .icon-shape rect,#mermaid-svg-u3Y6e500W2i3HYbK .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-u3Y6e500W2i3HYbK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-u3Y6e500W2i3HYbK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-u3Y6e500W2i3HYbK :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
页面显示
全场渐显/推进动画
并行执行
细胞呼吸: ATP 缩放
心脏脉冲: 葡萄糖缩放
流体漂浮: 氨基酸位移
加载进度模拟
100% 进度 -> 路由跳转
2. 简弦波位移:模拟细胞间质的漂浮
氨基酸组件通过 Math.sin 函数计算 Y 轴偏移,实现了如同在液体中漂浮的效果。
// 模拟生物流体漂浮感
.offset({ y: Math.sin(this.waveOffset / 10) * 2 })
// 驱动逻辑
animateTo({ duration: 3000, curve: Curve.Linear, iterations: –1 }, () => {
this.waveOffset = 100; // 形成周期性的正弦运动
})
知识点五:品牌正统还原:纯代码重构 HarmonyOS 6 标识
作为华为创新赛作品,必须遵循 HarmonyOS 的品牌视觉准则。标识不仅要「像」,更要「准」。
1. 核心 Typography 结构解析
“HarmonyOS” 的视觉灵魂在于那个 “O” 下方的横杠(Dash)。它代表了底座、连接与地平线。
2. ArkUI 层级构建
我们通过 Stack 容器实现了高精度的重叠效果。
Stack({ alignContent: Alignment.Bottom }) {
Text('O')
.fontSize(24)
.fontWeight(700)
.fontColor('#1D1D1F')
// 纯代码绘制的标志性下划线
Rect()
.width(12)
.height(2.5)
.fill('#007AFF')
.margin({ bottom: 2 })
}
对于数字 6,我们特别强化了其字重(FontWeight.ExtraBold),以彰显 HarmonyOS Next 划时代的版本特性。

知识点六:项目生命周期管理与开发规划
在华为创新赛的备赛过程中,严谨的工程进度管理与功能迭代是取胜的关键。
1. 开发阶段甘特图
#mermaid-svg-1yUkmGRIceMoqw6m{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1yUkmGRIceMoqw6m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1yUkmGRIceMoqw6m .error-icon{fill:#552222;}#mermaid-svg-1yUkmGRIceMoqw6m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1yUkmGRIceMoqw6m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1yUkmGRIceMoqw6m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1yUkmGRIceMoqw6m .marker.cross{stroke:#333333;}#mermaid-svg-1yUkmGRIceMoqw6m svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1yUkmGRIceMoqw6m p{margin:0;}#mermaid-svg-1yUkmGRIceMoqw6m .mermaid-main-font{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-1yUkmGRIceMoqw6m .exclude-range{fill:#eeeeee;}#mermaid-svg-1yUkmGRIceMoqw6m .section{stroke:none;opacity:0.2;}#mermaid-svg-1yUkmGRIceMoqw6m .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-1yUkmGRIceMoqw6m .section2{fill:#fff400;}#mermaid-svg-1yUkmGRIceMoqw6m .section1,#mermaid-svg-1yUkmGRIceMoqw6m .section3{fill:white;opacity:0.2;}#mermaid-svg-1yUkmGRIceMoqw6m .sectionTitle0{fill:#333;}#mermaid-svg-1yUkmGRIceMoqw6m .sectionTitle1{fill:#333;}#mermaid-svg-1yUkmGRIceMoqw6m .sectionTitle2{fill:#333;}#mermaid-svg-1yUkmGRIceMoqw6m .sectionTitle3{fill:#333;}#mermaid-svg-1yUkmGRIceMoqw6m .sectionTitle{text-anchor:start;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-1yUkmGRIceMoqw6m .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-1yUkmGRIceMoqw6m .grid .tick text{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;fill:#333;}#mermaid-svg-1yUkmGRIceMoqw6m .grid path{stroke-width:0;}#mermaid-svg-1yUkmGRIceMoqw6m .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-1yUkmGRIceMoqw6m .task{stroke-width:2;}#mermaid-svg-1yUkmGRIceMoqw6m .taskText{text-anchor:middle;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutsideRight{fill:black;text-anchor:start;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-1yUkmGRIceMoqw6m .task.clickable{cursor:pointer;}#mermaid-svg-1yUkmGRIceMoqw6m .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-1yUkmGRIceMoqw6m .taskText0,#mermaid-svg-1yUkmGRIceMoqw6m .taskText1,#mermaid-svg-1yUkmGRIceMoqw6m .taskText2,#mermaid-svg-1yUkmGRIceMoqw6m .taskText3{fill:white;}#mermaid-svg-1yUkmGRIceMoqw6m .task0,#mermaid-svg-1yUkmGRIceMoqw6m .task1,#mermaid-svg-1yUkmGRIceMoqw6m .task2,#mermaid-svg-1yUkmGRIceMoqw6m .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutside0,#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutside2{fill:black;}#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutside1,#mermaid-svg-1yUkmGRIceMoqw6m .taskTextOutside3{fill:black;}#mermaid-svg-1yUkmGRIceMoqw6m .active0,#mermaid-svg-1yUkmGRIceMoqw6m .active1,#mermaid-svg-1yUkmGRIceMoqw6m .active2,#mermaid-svg-1yUkmGRIceMoqw6m .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-1yUkmGRIceMoqw6m .activeText0,#mermaid-svg-1yUkmGRIceMoqw6m .activeText1,#mermaid-svg-1yUkmGRIceMoqw6m .activeText2,#mermaid-svg-1yUkmGRIceMoqw6m .activeText3{fill:black!important;}#mermaid-svg-1yUkmGRIceMoqw6m .done0,#mermaid-svg-1yUkmGRIceMoqw6m .done1,#mermaid-svg-1yUkmGRIceMoqw6m .done2,#mermaid-svg-1yUkmGRIceMoqw6m .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-1yUkmGRIceMoqw6m .doneText0,#mermaid-svg-1yUkmGRIceMoqw6m .doneText1,#mermaid-svg-1yUkmGRIceMoqw6m .doneText2,#mermaid-svg-1yUkmGRIceMoqw6m .doneText3{fill:black!important;}#mermaid-svg-1yUkmGRIceMoqw6m .crit0,#mermaid-svg-1yUkmGRIceMoqw6m .crit1,#mermaid-svg-1yUkmGRIceMoqw6m .crit2,#mermaid-svg-1yUkmGRIceMoqw6m .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-1yUkmGRIceMoqw6m .activeCrit0,#mermaid-svg-1yUkmGRIceMoqw6m .activeCrit1,#mermaid-svg-1yUkmGRIceMoqw6m .activeCrit2,#mermaid-svg-1yUkmGRIceMoqw6m .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-1yUkmGRIceMoqw6m .doneCrit0,#mermaid-svg-1yUkmGRIceMoqw6m .doneCrit1,#mermaid-svg-1yUkmGRIceMoqw6m .doneCrit2,#mermaid-svg-1yUkmGRIceMoqw6m .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-1yUkmGRIceMoqw6m .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-1yUkmGRIceMoqw6m .milestoneText{font-style:italic;}#mermaid-svg-1yUkmGRIceMoqw6m .doneCritText0,#mermaid-svg-1yUkmGRIceMoqw6m .doneCritText1,#mermaid-svg-1yUkmGRIceMoqw6m .doneCritText2,#mermaid-svg-1yUkmGRIceMoqw6m .doneCritText3{fill:black!important;}#mermaid-svg-1yUkmGRIceMoqw6m .vert{stroke:navy;}#mermaid-svg-1yUkmGRIceMoqw6m .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-1yUkmGRIceMoqw6m .activeCritText0,#mermaid-svg-1yUkmGRIceMoqw6m .activeCritText1,#mermaid-svg-1yUkmGRIceMoqw6m .activeCritText2,#mermaid-svg-1yUkmGRIceMoqw6m .activeCritText3{fill:black!important;}#mermaid-svg-1yUkmGRIceMoqw6m .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-1yUkmGRIceMoqw6m :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
2026-02-01
2026-03-01
2026-04-01
2026-05-01
2026-06-01
2026-07-01
2026-08-01
MeshGradient 方案验证
启动页动效全案实现
抗衰算法模型接入
多端流转能力实现
持续性能调优(FrameRate)
创新赛路演 PPT 制作
视觉与底座
核心业务
优化发布
华为创新赛「生命科学」抗衰 APP 开发周期
知识点七:性能优化与工程最佳实践
在 HarmonyOS Next 开发中,启动页必须做到「瞬开即没」。
结语:让科技拥有温度,让代码书写健康
「生命科学」不仅仅是一个项目方向,更是一份沉甸甸的社会责任。在 HarmonyOS Next 这一全新的舞台上,我们正试图通过每一行 ArkUI 代码,将精准抗衰的技术普惠到每一位用户。
如果你也在准备华为创新赛,或者对鸿蒙原生开发感兴趣,欢迎关注红目香薰。我们将持续深耕生命科学方向,分享更多硬核实战技巧!
💬 评论区扣【启动页代码】,领取 ArkUI 完整源码包! 🔥 华为创新赛备赛中,后续更抗衰 APP 首页 / 多端适配开发,关注不迷路~
HarmonyOS高级开发者|华为云讲师|CSDN/阿里云双专家 深耕 AI/鸿蒙✨华为创新赛备赛中|生命科学抗衰鸿蒙✨APP开发ing✨
版权声明:本文由红目香薰原创,所有代码示例均可在本项目开源仓库中找到。转载请保留作者信息及项目背景声明。







