Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • tutorial
  • jetpack

  • components

  • androidx

  • 动态化
  • apm

  • module

  • harmony

    • HarmonyOS 鸿蒙开发完整指南
      • 📚 你将学到什么
      • 🎯 学习路径建议
      • 🤖 什么是 HarmonyOS?
        • 核心概念
      • 🛠️ 开发环境搭建
        • 1. DevEco Studio 安装
        • 2. SDK 配置
        • 3. 模拟器配置
        • 4. 真机调试配置
        • 5. ohpm 包管理器
        • 项目结构
        • 标准鸿蒙项目结构示例
        • 关键配置文件说明
        • 目录组织原则
      • 📝 ArkTS 语言基础
        • 1. 基础语法
        • 变量声明
        • 函数定义
        • 2. 装饰器语法
        • 状态装饰器
        • 装饰器类型
        • 3. 组件开发
        • 自定义组件
        • 组件生命周期
        • 4. 数据绑定
        • 单向绑定
        • 双向绑定
        • 计算属性
        • 5. 事件处理
        • 点击事件
        • 手势事件
      • ArkUI框架
        • 布局系统
        • 基础组件
        • 容器组件
        • 导航组件
      • 状态管理
        • 应用级状态
        • 组件级状态
        • 页面级状态
      • 网络与数据
        • HTTP请求
        • 数据存储
        • 数据绑定
      • 鸿蒙工具包介绍
        • 核心工具
        • 1. hdc (HarmonyOS Device Connector)
        • 2. hpm (HarmonyOS Package Manager)
        • 3. ohpm (OpenHarmony Package Manager)
        • 开发工具
        • 4. ArkTS编译器
        • 5. ArkUI构建工具
        • 6. 调试工具
        • 性能分析工具
        • 7. 性能监控工具
        • 8. 内存分析工具
        • 测试工具
        • 9. 单元测试工具
        • 10. UI测试工具
        • 打包和部署工具
        • 11. 应用打包工具
        • 12. 签名工具
        • 模拟器工具
        • 13. 模拟器管理
        • 14. 设备模拟
        • 文档和帮助工具
        • 15. 文档生成工具
        • 16. 代码检查工具
        • 工具配置
        • 17. 环境配置
        • 18. 路径配置
        • 常用组合命令
        • 19. 开发工作流
        • 20. CI/CD集成
      • 多媒体开发
        • 图像处理
        • 音频处理
        • 视频处理
      • 设备能力
        • 传感器
        • 硬件接口
        • 系统服务
      • 分布式能力
        • 设备发现
        • 数据同步
        • 服务共享
      • 性能优化
        • 启动优化
        • 内存优化
        • 渲染优化
      • 调试与测试
        • 调试工具
        • 测试策略
      • 发布与部署
        • 应用打包
        • 应用分发
        • 应用更新
      • 安全开发
        • 数据安全
        • 应用安全
        • 权限管理
      • 最佳实践
        • 代码规范
        • ohpm最佳实践
        • 架构设计
        • 性能调优
      • 常见问题解决
        • 开发环境问题
        • ohpm常见问题解决
        • 性能问题
        • 兼容性问题
      • 扩展资源
        • 官方文档
        • 开发工具
        • 社区资源
      • 实际应用案例
        • 基础应用开发
        • 多媒体应用
        • 社交应用
        • 工具应用
      • 性能优化建议
        • 开发阶段优化
        • 运行时优化
        • 用户体验优化
      • 调试和测试技巧
        • 调试技巧
        • 测试技巧
        • 错误处理
      • 常见陷阱和解决方案
        • 开发陷阱
        • 解决方案
      • 相关技术
        • 前端技术
        • 包管理工具
      • 🚀 实践项目:待办事项应用
        • 项目结构
        • 数据模型
        • 主页面
        • 待办项组件
        • 存储工具
      • ❓ 常见问题解答
        • Q1: 如何调试鸿蒙应用?
        • Q2: 如何处理网络请求?
        • Q3: 如何实现页面导航?
        • Q4: 如何管理应用状态?
        • Q5: 如何优化应用性能?
      • 📚 学习资源
        • 官方文档
        • 开发工具
        • 社区资源
      • 🎉 总结
  • tool

  • other

  • kotlin

  • 《android》
  • harmony
Jacky
2025-03-11
目录

HarmonyOS 鸿蒙开发完整指南

# 🚀 HarmonyOS 鸿蒙开发完整指南

适合人群:移动开发工程师、前端开发者、对鸿蒙生态感兴趣的技术人员
学习时间:2-3个月
前置知识:JavaScript/TypeScript基础、移动开发概念

HarmonyOS(鸿蒙操作系统)是华为开发的分布式操作系统,旨在为不同设备提供统一的操作系统体验。本指南将带你从零开始学习鸿蒙应用开发。

# 📚 你将学到什么

  1. HarmonyOS 基础概念 - 理解鸿蒙生态和架构
  2. ArkTS 语言 - 掌握鸿蒙开发语言
  3. ArkUI 框架 - 学会构建用户界面
  4. 开发工具链 - 熟练使用 DevEco Studio
  5. 实际项目开发 - 完成完整的应用开发

# 🎯 学习路径建议

graph TD A[环境搭建] --> B[ArkTS基础] B --> C[ArkUI组件] C --> D[状态管理] D --> E[网络与数据] E --> F[设备能力] F --> G[性能优化] G --> H[项目实战]

# 🤖 什么是 HarmonyOS?

HarmonyOS 是华为开发的分布式操作系统,具有以下特点:

  • 分布式架构:支持多设备协同工作
  • 统一开发:一套代码,多端运行
  • 高性能:优化的渲染引擎和内存管理
  • 安全可靠:企业级安全特性

# 核心概念

  • ArkTS:基于 TypeScript 的鸿蒙开发语言
  • ArkUI:声明式 UI 开发框架
  • Ability:应用的基本组成单元
  • HAP:HarmonyOS Ability Package,应用包格式

# 🛠️ 开发环境搭建

# 1. DevEco Studio 安装

下载地址:华为开发者官网 (opens new window)

系统要求:

  • Windows 10/11 (64位)
  • macOS 10.15 或更高版本
  • 内存:8GB 以上
  • 硬盘:10GB 以上可用空间

安装步骤:

  1. 下载 DevEco Studio 安装包
  2. 运行安装程序,按提示完成安装
  3. 首次启动时配置 SDK 路径
  4. 安装鸿蒙 SDK 和工具链

# 2. SDK 配置

# 设置环境变量
export HARMONY_HOME=/Applications/DevEco-Studio.app/Contents/tools/
export PATH=$PATH:$HARMONY_HOME/bin

# 验证安装
hdc --version
ohpm --version
1
2
3
4
5
6
7

# 3. 模拟器配置

创建模拟器:

  1. 打开 DevEco Studio
  2. 选择 Tools → Device Manager
  3. 点击 Create Device
  4. 选择设备类型和系统版本
  5. 下载并启动模拟器

模拟器类型:

  • Phone:手机模拟器
  • Tablet:平板模拟器
  • TV:智慧屏模拟器
  • Wearable:智能手表模拟器

# 4. 真机调试配置

开发者选项开启:

  1. 设置 → 关于手机 → 版本号(连续点击7次)
  2. 返回设置 → 系统和更新 → 开发者选项
  3. 开启"USB调试"和"仅充电模式下允许ADB调试"

连接调试:

# 查看连接的设备
hdc list targets

# 进入设备shell
hdc shell

# 安装应用
hdc install -p your_app.hap
1
2
3
4
5
6
7
8

# 5. ohpm 包管理器

ohpm(OpenHarmony Package Manager)是鸿蒙生态的包管理工具,类似于npm。

安装和配置:

# 安装ohpm
npm install -g @ohos/ohpm

# 配置镜像源
ohpm config set registry https://repo.openharmony.cn/

# 基础命令
ohpm init                    # 初始化项目
ohpm install                 # 安装依赖
ohpm install package-name    # 安装指定包
ohpm list                    # 查看已安装的包
ohpm update                  # 更新包
ohpm uninstall package-name  # 卸载包
1
2
3
4
5
6
7
8
9
10
11
12
13

详细ohpm使用指南:请参考下方"鸿蒙工具包介绍"章节中的ohpm详细说明。

# 项目结构

# 标准鸿蒙项目结构示例

MyHarmonyApp/
├── AppScope/                          # 应用级配置
│   ├── app.json5                      # 应用配置文件
│   └── resources/                     # 应用级资源
│       ├── base/
│       │   ├── element/               # 元素资源
│       │   ├── media/                 # 媒体资源
│       │   └── profile/               # 配置文件
│       └── rawfile/                   # 原始文件
├── entry/                             # 主模块
│   ├── src/
│   │   ├── main/
│   │   │   ├── ets/                   # ArkTS源码
│   │   │   │   ├── pages/             # 页面组件
│   │   │   │   │   ├── Index.ets      # 首页
│   │   │   │   │   ├── Detail.ets     # 详情页
│   │   │   │   │   └── Profile.ets    # 个人页
│   │   │   │   ├── components/        # 自定义组件
│   │   │   │   │   ├── CustomButton.ets
│   │   │   │   │   └── LoadingView.ets
│   │   │   │   ├── services/          # 服务层
│   │   │   │   │   ├── ApiService.ets
│   │   │   │   │   └── StorageService.ets
│   │   │   │   ├── utils/             # 工具类
│   │   │   │   │   ├── Constants.ets
│   │   │   │   │   └── Helper.ets
│   │   │   │   ├── models/            # 数据模型
│   │   │   │   │   ├── User.ets
│   │   │   │   │   └── Product.ets
│   │   │   │   └── app.ets            # 应用入口
│   │   │   ├── resources/             # 模块级资源
│   │   │   │   ├── base/
│   │   │   │   │   ├── element/
│   │   │   │   │   │   ├── color.json # 颜色配置
│   │   │   │   │   │   ├── float.json # 浮点数配置
│   │   │   │   │   │   └── string.json # 字符串配置
│   │   │   │   │   └── media/
│   │   │   │   │       ├── icon.png
│   │   │   │   │       └── logo.png
│   │   │   │   └── rawfile/
│   │   │   └── module.json5           # 模块配置
│   │   └── ohosTest/                  # 测试代码
│   │       └── ets/
│   │           └── test/
│   │               └── Index.test.ets
│   └── build-profile.json5            # 构建配置
├── features/                          # 功能模块
│   ├── feature1/                      # 功能模块1
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── ets/
│   │   │       │   ├── pages/
│   │   │       │   ├── components/
│   │   │       │   └── services/
│   │   │       └── resources/
│   │   └── build-profile.json5
│   └── feature2/                      # 功能模块2
│       ├── src/
│       │   └── main/
│       │       ├── ets/
│       │       └── resources/
│       └── build-profile.json5
├── shared/                            # 共享模块
│   ├── src/
│   │   └── main/
│   │       ├── ets/
│   │       │   ├── components/        # 共享组件
│   │       │   ├── utils/             # 共享工具
│   │       │   └── constants/         # 共享常量
│   │       └── resources/
│   └── build-profile.json5
├── oh_modules/                        # 依赖模块(自动生成)
├── build/                             # 构建输出
├── .gitignore                         # Git忽略文件
├── .ohpmrc                            # ohpm配置文件
├── oh-package.json5                   # 项目配置文件
└── README.md                          # 项目说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

# 关键配置文件说明

oh-package.json5 - 项目主配置文件:

{
  "name": "my-harmony-app",
  "version": "1.0.0",
  "description": "A HarmonyOS application",
  "main": "entry/src/main/ets/app.ets",
  "author": "Your Name",
  "license": "Apache-2.0",
  "dependencies": {
    "@ohos/hypium": "1.0.13",
    "@ohos/router": "1.0.0",
    "@ohos/http": "1.0.0"
  },
  "devDependencies": {
    "@ohos/hvigor": "1.0.0",
    "@ohos/hvigor-ohos-plugin": "1.0.0"
  },
  "repository": "https://gitee.com/your-repo/my-harmony-app",
  "keywords": ["harmonyos", "arkts", "arkui"],
  "ohos": {
    "org": "example",
    "buildTool": "hvigor",
    "directoryLevel": "module"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

module.json5 - 模块配置文件:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "Main entry module",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "Main entry ability",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

app.json5 - 应用配置文件:

{
  "app": {
    "bundleName": "com.example.myharmonyapp",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name",
    "minPlatformVersion": 9,
    "targetPlatformVersion": 9,
    "apiReleaseType": "Release",
    "debug": {
      "enable": true
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 目录组织原则

  • 模块化设计:按功能划分模块,每个模块独立开发
  • 资源分离:应用级资源与模块级资源分离管理
  • 组件复用:共享组件放在shared模块中
  • 测试覆盖:每个模块包含对应的测试代码
  • 配置集中:配置文件统一管理,便于维护

# 📝 ArkTS 语言基础

ArkTS 是鸿蒙生态的编程语言,基于 TypeScript 扩展而来,增加了声明式 UI 开发能力。

# 1. 基础语法

# 变量声明

// 基本类型
let name: string = "HarmonyOS"
let version: number = 4.0
let isActive: boolean = true

// 数组和对象
let devices: string[] = ["phone", "tablet", "tv"]
let config: { name: string, version: number } = {
  name: "MyApp",
  version: 1.0
}
1
2
3
4
5
6
7
8
9
10
11

# 函数定义

// 普通函数
function greet(name: string): string {
  return `Hello, ${name}!`
}

// 箭头函数
const calculate = (a: number, b: number): number => a + b

// 异步函数
async function fetchData(): Promise<string> {
  // 异步操作
  return "data"
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2. 装饰器语法

# 状态装饰器

@Entry
@Component
struct MyComponent {
  @State count: number = 0
  @Prop title: string = "Default Title"
  @Link isVisible: boolean

  build() {
    Column() {
      Text(this.title)
        .fontSize(20)
      
      Button(`Count: ${this.count}`)
        .onClick(() => {
          this.count++
        })
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 装饰器类型

  • @State:组件内部状态
  • @Prop:父组件传递的属性
  • @Link:双向绑定的状态
  • @Observed:可观察对象
  • @ObjectLink:对象链接
  • @Provide/@Consume:跨组件状态共享

# 3. 组件开发

# 自定义组件

@Component
export struct CustomButton {
  @Prop text: string = "Button"
  onClick?: () => void

  build() {
    Button(this.text)
      .onClick(() => {
        this.onClick?.()
      })
      .backgroundColor(Color.Blue)
      .borderRadius(8)
  }
}

// 使用自定义组件
@Entry
@Component
struct MainPage {
  build() {
    Column() {
      CustomButton({
        text: "Click Me",
        onClick: () => {
          console.log("Button clicked!")
        }
      })
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 组件生命周期

@Component
struct LifecycleDemo {
  aboutToAppear() {
    console.log("组件即将出现")
  }

  aboutToDisappear() {
    console.log("组件即将消失")
  }

  onPageShow() {
    console.log("页面显示")
  }

  onPageHide() {
    console.log("页面隐藏")
  }

  build() {
    Text("Lifecycle Demo")
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 4. 数据绑定

# 单向绑定

@Entry
@Component
struct DataBindingDemo {
  @State message: string = "Hello HarmonyOS"

  build() {
    Column() {
      // 单向绑定:数据变化自动更新UI
      Text(this.message)
        .fontSize(20)
      
      Button("Update Message")
        .onClick(() => {
          this.message = "Updated Message"
        })
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 双向绑定

@Entry
@Component
struct TwoWayBinding {
  @State inputText: string = ""

  build() {
    Column() {
      // 双向绑定:UI变化自动更新数据
      TextInput({ placeholder: "Enter text" })
        .onChange((value: string) => {
          this.inputText = value
        })
      
      Text(`You typed: ${this.inputText}`)
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 计算属性

@Component
struct ComputedProperty {
  @State firstName: string = "John"
  @State lastName: string = "Doe"

  // 计算属性
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`
  }

  build() {
    Column() {
      TextInput({ placeholder: "First Name" })
        .onChange((value: string) => {
          this.firstName = value
        })
      
      TextInput({ placeholder: "Last Name" })
        .onChange((value: string) => {
          this.lastName = value
        })
      
      Text(`Full Name: ${this.fullName}`)
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 5. 事件处理

# 点击事件

@Component
struct EventHandling {
  @State count: number = 0

  // 事件处理函数
  private handleClick() {
    this.count++
    console.log(`Button clicked ${this.count} times`)
  }

  build() {
    Column() {
      Button(`Click Count: ${this.count}`)
        .onClick(this.handleClick)
        .onClick(() => {
          // 内联事件处理
          console.log("Inline click handler")
        })
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 手势事件

@Component
struct GestureDemo {
  @State position: { x: number, y: number } = { x: 0, y: 0 }

  build() {
    Column() {
      Text("Gesture Demo")
        .gesture(
          PanGesture({ fingers: 1, direction: PanDirection.All })
            .onActionStart(() => {
              console.log("Pan started")
            })
            .onActionUpdate((event: GestureEvent) => {
              this.position.x = event.offsetX
              this.position.y = event.offsetY
            })
            .onActionEnd(() => {
              console.log("Pan ended")
            })
        )
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# ArkUI框架

# 布局系统

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-layout-development (opens new window)

  • Flex布局
  • Grid布局
  • Stack布局: 层叠布局
  • List布局

# 基础组件

  • 文本组件
  • 图像组件
  • 按钮组件
  • 输入组件

# 容器组件

  • Column容器
  • Row容器
  • Stack容器
  • Grid容器

# 导航组件

  • Tabs组件
  • Navigation组件
  • Router路由

# 状态管理

# 应用级状态

  • AppStorage
  • PersistentStorage
  • Environment

# 组件级状态

  • @State装饰器
  • @Prop装饰器
  • @Link装饰器
  • @Observed装饰器

# 页面级状态

  • LocalStorage
  • SessionStorage

# 网络与数据

# HTTP请求

  • 网络请求API
  • 请求拦截器
  • 响应处理
  • 错误处理

# 数据存储

  • 文件存储
  • 数据库操作
  • 缓存管理
  • 数据同步

# 数据绑定

  • 数据源管理
  • 数据转换
  • 数据验证
  • 数据更新

# 鸿蒙工具包介绍

DevEco Studio内置了完整的鸿蒙开发工具包,位于 /Applications/DevEco-Studio.app/Contents/tools/ 目录下。

# 核心工具

# 1. hdc (HarmonyOS Device Connector)

# 设备连接和调试工具

hdc list targets                    # 列出所有连接的设备
hdc shell                           # 进入设备shell
hdc file send local_file remote_file  # 发送文件到设备
hdc file recv remote_file local_file  # 从设备接收文件
hdc install -p package_name         # 安装应用包
hdc uninstall package_name          # 卸载应用
hdc shell bm install -p hap_path    # 安装HAP包
hdc shell bm uninstall -p package_name  # 卸载HAP包
1
2
3
4
5
6
7
8
9
10

# 2. hpm (HarmonyOS Package Manager)

# 包管理工具

hpm install                         # 安装依赖
hpm install package_name            # 安装指定包
hpm uninstall package_name          # 卸载包
hpm update                          # 更新包
hpm list                            # 列出已安装的包
hpm search package_name             # 搜索包
1
2
3
4
5
6
7
8

# 3. ohpm (OpenHarmony Package Manager)

# OpenHarmony包管理工具

# 基础命令
ohpm install                        # 安装依赖
ohpm install package_name           # 安装指定包
ohpm uninstall package_name         # 卸载包
ohpm update                         # 更新包
ohpm list                           # 列出已安装的包
ohpm search package_name            # 搜索包
ohpm config set registry https://repo.openharmony.cn/  # 设置镜像源
ohpm config list 

# 安装命令
ohpm install package-name@version   # 安装指定版本
ohpm install package-name --save-dev # 安装开发依赖
ohpm install -g package-name        # 全局安装包
ohpm install --force                # 强制重新安装
ohpm install --ignore-scripts       # 安装时忽略脚本

# 卸载命令
ohpm uninstall -g package-name      # 卸载全局包
ohpm uninstall package-name --save-dev # 卸载开发依赖

# 更新命令
ohpm update package-name            # 更新指定包
ohpm outdated                       # 检查过时的包
ohpm update package-name@latest     # 更新到最新版本

# 搜索和查看命令
ohpm info package-name              # 查看包信息
ohpm view package-name versions     # 查看包版本

# 依赖管理命令
ohpm list --depth=0                 # 查看依赖详情
ohpm audit                          # 检查依赖安全漏洞
ohpm audit fix                      # 修复安全漏洞
ohpm shrinkwrap                     # 生成依赖锁定文件
ohpm cache clean                    # 清理缓存
ohpm cache verify                   # 查看缓存信息

# 锁定文件命令
ohpm install --frozen-lockfile      # 使用锁定文件安装
ohpm install --update-lockfile      # 更新锁定文件

# 仓库配置命令
ohpm config set registry https://your-private-repo.com/ # 添加私有仓库
ohpm config get registry            # 查看当前仓库
ohpm config set @scope:registry https://your-scope-repo.com/ # 设置作用域仓库
ohpm config delete registry         # 删除仓库配置
ohpm config set //your-repo.com/:_authToken your-token # 设置认证信息

# 包发布命令
ohpm login                          # 登录到仓库
ohpm publish                        # 发布包
ohpm publish --registry https://your-repo.com/ # 发布到指定仓库
ohpm unpublish package-name         # 取消发布
ohpm view package-name              # 查看包信息

# 镜像源配置
ohpm config set registry https://repo.openharmony.cn/ # 官方镜像源
ohpm config set registry https://mirrors.huaweicloud.com/repository/ohpm/ # 华为镜像源
ohpm config set registry https://registry.npmmirror.com/ # 淘宝镜像源

# 调试命令
ohpm install --verbose              # 查看详细安装信息
ohpm list --depth=2                 # 查看依赖树结构
ohpm ping                           # 检查网络连接

# 最佳实践命令
ohpm install --frozen-lockfile      # 使用锁定文件确保版本一致性
ohpm update && ohpm audit           # 定期更新依赖
ohpm config set timeout 30000       # 设置合适的超时时间
ohpm cache clean                    # 定期清理缓存
ohpm install @company/package-name  # 使用作用域管理包

# 问题解决命令
ohpm config set timeout 60000       # 解决网络连接超时
sudo ohpm install -g package-name   # 解决权限不足
ohpm ls --depth=0 && ohpm audit fix # 解决依赖冲突
ohpm cache clean && ohpm install --force # 解决缓存问题
rm ohpm-lock.yaml && ohpm install   # 解决锁定文件冲突
ohpm config set proxy http://proxy.example.com:8080 # 设置代理
ohpm config set https-proxy http://proxy.example.com:8080 # 设置HTTPS代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

# 开发工具

# 4. ArkTS编译器

# ArkTS语言编译器

arktsc --help                       # 查看编译器帮助
arktsc main.ets                     # 编译单个文件
arktsc --outDir dist src/           # 编译整个目录
arktsc --watch src/                 # 监听模式编译
1
2
3
4
5
6

# 5. ArkUI构建工具

# ArkUI框架构建工具

arkui build                         # 构建项目
arkui build --mode debug            # 调试模式构建
arkui build --mode release          # 发布模式构建
arkui build --target device         # 设备构建
arkui build --target simulator      # 模拟器构建
1
2
3
4
5
6
7

# 6. 调试工具

# 调试相关工具

debugger --attach process_id         # 附加到进程调试
debugger --port 8080                # 启动调试服务器
debugger --break main.ets:10        # 设置断点
1
2
3
4
5

# 性能分析工具

# 7. 性能监控工具

# 性能分析工具

profiler --start                    # 开始性能分析
profiler --stop                     # 停止性能分析
profiler --export report.json       # 导出性能报告
profiler --memory                   # 内存分析
profiler --cpu                      # CPU分析
1
2
3
4
5
6
7

# 8. 内存分析工具

# 内存泄漏检测

memory-analyzer --attach process_id  # 附加内存分析
memory-analyzer --dump heap.dump     # 导出堆转储
memory-analyzer --report leak.html   # 生成泄漏报告
1
2
3
4
5

# 测试工具

# 9. 单元测试工具

# 测试框架

test-runner --test test.ets         # 运行单个测试
test-runner --suite test_suite      # 运行测试套件
test-runner --coverage              # 生成覆盖率报告
test-runner --parallel              # 并行执行测试
1
2
3
4
5
6

# 10. UI测试工具

# UI自动化测试

ui-test --record test_case.json     # 录制UI测试
ui-test --play test_case.json       # 回放UI测试
ui-test --screenshot test.png       # 截图测试
ui-test --accessibility             # 无障碍测试
1
2
3
4
5
6

# 打包和部署工具

# 11. 应用打包工具

# HAP包构建工具

hap-builder --config build.json     # 使用配置文件构建
hap-builder --sign keystore.jks     # 签名构建
hap-builder --optimize              # 优化构建
hap-builder --split                 # 分包构建
1
2
3
4
5
6

# 12. 签名工具

# 应用签名工具

signer --keystore keystore.jks      # 使用密钥库签名
signer --cert cert.pem              # 使用证书签名
signer --verify hap_file.hap        # 验证签名
signer --info hap_file.hap          # 查看签名信息
1
2
3
4
5
6

工具路径

find /Applications/DevEco-Studio.app -name "signer" 2>/dev/null
/Applications/DevEco-Studio.app/Contents/tools/node/lib/node_modules/npm/node_modules/@sigstore/sign/dist/signer
1
2

sign的具体位置:

# 模拟器工具

# 13. 模拟器管理

# 模拟器控制工具

simulator --list                    # 列出可用模拟器
simulator --start device_name       # 启动模拟器
simulator --stop device_name        # 停止模拟器
simulator --reset device_name        # 重置模拟器
simulator --snapshot create snap1   # 创建快照
simulator --snapshot restore snap1  # 恢复快照
1
2
3
4
5
6
7
8

工具路径

-> % find /Applications/DevEco-Studio.app -name "simulator" 2>/dev/null
/Applications/DevEco-Studio.app/Contents/plugins/openharmony/openharmony-preview-server/public/ohpreviewer/static/img/skin/simulator
/Applications/DevEco-Studio.app/Contents/plugins/harmony/harmony-preview-server/public/hpreviewer/static/img/skin/simulator
1
2
3

# 14. 设备模拟

# 设备功能模拟

device-sim --camera                 # 模拟相机
device-sim --gps                    # 模拟GPS
device-sim --sensor                 # 模拟传感器
device-sim --network                # 模拟网络
1
2
3
4
5
6

# 文档和帮助工具

# 15. 文档生成工具

# API文档生成

doc-generator --input src/           # 生成API文档
doc-generator --format html          # HTML格式文档
doc-generator --format markdown      # Markdown格式文档
doc-generator --template custom.html # 自定义模板
1
2
3
4
5
6

# 16. 代码检查工具

# 代码质量检查

lint --config .eslintrc.js          # ESLint检查
lint --fix                          # 自动修复
lint --report report.html            # 生成检查报告
lint --rules custom_rules.js         # 自定义规则
1
2
3
4
5
6

# 工具配置

# 17. 环境配置

# 工具环境配置

config --set sdk_path /path/to/sdk  # 设置SDK路径
config --set device_ip 192.168.1.100 # 设置设备IP
config --set debug_port 8080        # 设置调试端口
config --list                        # 查看所有配置
1
2
3
4
5
6

# 18. 路径配置

# 工具路径配置

export HARMONY_HOME=/Applications/DevEco-Studio.app/Contents/tools/
export PATH=$PATH:$HARMONY_HOME/bin
export OHPM_HOME=$HARMONY_HOME/ohpm
export HDC_HOME=$HARMONY_HOME/hdc
1
2
3
4
5
6

# 常用组合命令

# 19. 开发工作流

# 完整的开发流程

# 1. 构建项目
arkui build --mode debug

# 2. 安装到设备

hdc install -p build/outputs/hap/debug/*.hap

# 3. 启动调试

debugger --attach $(hdc shell ps | grep your_app)

# 4. 性能分析

profiler --start && profiler --stop && profiler --export report.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 20. CI/CD集成

# 自动化构建和测试

# 构建
arkui build --mode release

# 测试

test-runner --suite all --coverage

# 打包

hap-builder --sign keystore.jks

# 部署

hdc install -p build/outputs/hap/release/*.hap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 多媒体开发

# 图像处理

  • 图像加载
  • 图像缓存
  • 图像压缩
  • 图像滤镜

# 音频处理

  • 音频播放
  • 音频录制
  • 音频格式转换
  • 音频效果

# 视频处理

  • 视频播放
  • 视频录制
  • 视频编辑
  • 视频压缩

# 设备能力

# 传感器

  • 加速度传感器
  • 陀螺仪传感器
  • 光线传感器
  • 距离传感器

# 硬件接口

  • 相机接口
  • 麦克风接口
  • 蓝牙接口
  • NFC接口

# 系统服务

  • 通知服务
  • 权限管理
  • 系统信息
  • 设备管理

# 分布式能力

# 设备发现

  • 设备扫描
  • 设备连接
  • 设备认证
  • 设备管理

# 数据同步

  • 数据分发
  • 数据同步
  • 冲突解决
  • 数据一致性

# 服务共享

  • 服务发现
  • 服务调用
  • 服务注册
  • 服务管理

# 性能优化

性能优化是鸿蒙应用开发的重要环节,主要包括启动优化、内存优化和渲染优化。

# 启动优化

  • 冷启动优化:减少应用启动时间,优化启动流程
  • 热启动优化:提升应用切换响应速度
  • 启动时间监控:使用性能分析工具监控启动性能
  • 启动策略:合理设计应用启动逻辑

# 内存优化

  • 内存泄漏检测:定期检查内存使用情况
  • 内存使用监控:实时监控内存占用
  • 垃圾回收优化:合理管理对象生命周期
  • 内存压缩:优化内存使用效率

# 渲染优化

  • 渲染性能监控:监控UI渲染性能
  • 渲染优化策略:优化组件渲染逻辑
  • 帧率优化:保持60fps流畅体验
  • 渲染管线优化:优化渲染流程

详细性能优化指南:请参考下方"性能优化建议"章节。

# 调试与测试

调试和测试是确保应用质量的关键环节。

# 调试工具

  • DevEco Studio调试:使用IDE内置调试器
  • 日志系统:合理使用console.log输出日志
  • 性能分析:使用性能分析工具监控应用性能
  • 内存分析:检测内存泄漏和优化内存使用

# 测试策略

  • 单元测试:测试单个组件和函数
  • 集成测试:测试组件间的交互
  • 端到端测试:测试完整的用户流程
  • 兼容性测试:确保在不同设备上的兼容性

详细调试测试指南:请参考下方"调试和测试技巧"章节。

# 发布与部署

# 应用打包

  • 应用签名
  • 应用打包
  • 资源优化
  • 代码混淆

# 应用分发

  • 应用商店发布
  • 企业分发
  • 测试分发
  • 版本管理

# 应用更新

  • 增量更新
  • 全量更新
  • 强制更新
  • 更新策略

# 安全开发

# 数据安全

  • 数据加密
  • 数据脱敏
  • 数据备份
  • 数据恢复

# 应用安全

  • 代码混淆
  • 反调试
  • 完整性校验
  • 安全审计

# 权限管理

  • 权限申请
  • 权限检查
  • 权限动态管理
  • 权限最小化

# 最佳实践

# 代码规范

  • 命名规范
  • 注释规范
  • 代码结构
  • 代码审查
  • ohpm包规范

# ohpm最佳实践

# 1. 使用锁定文件确保版本一致性

ohpm install --frozen-lockfile

# 2. 定期更新依赖

ohpm update
ohpm audit

# 3. 使用私有仓库管理内部包

ohpm config set @company:registry https://your-company-repo.com/

# 4. 设置合适的超时时间

ohpm config set timeout 30000

# 5. 使用镜像源加速下载

ohpm config set registry https://repo.openharmony.cn/

# 6. 定期清理缓存

ohpm cache clean

# 7. 使用作用域管理包

ohpm install @company/package-name

# 8. 设置安全的认证信息

ohpm config set //your-repo.com/:_authToken your-token
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 架构设计

  • 模块化设计
  • 组件化设计
  • 分层架构
  • 微服务架构
  • 包依赖架构

# 性能调优

  • 性能监控
  • 性能分析
  • 性能优化
  • 性能测试

# 常见问题解决

# 开发环境问题

  • 环境配置问题
  • 编译错误
  • 运行错误
  • 调试问题
  • ohpm依赖问题

# ohpm常见问题解决

# 问题1: 网络连接超时

ohpm config set timeout 60000
ohpm config set registry https://repo.openharmony.cn/

# 问题2: 权限不足

sudo ohpm install -g package-name

# 问题3: 依赖冲突

ohpm ls --depth=0
ohpm audit fix

# 问题4: 缓存问题

ohpm cache clean
ohpm install --force

# 问题5: 锁定文件冲突

rm ohpm-lock.yaml
ohpm install

# 问题6: 代理设置

ohpm config set proxy http://proxy.example.com:8080
ohpm config set https-proxy http://proxy.example.com:8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 性能问题

  • 内存泄漏
  • 卡顿问题
  • 耗电问题
  • 网络问题

# 兼容性问题

  • 设备兼容性
  • 系统兼容性
  • API兼容性
  • 数据兼容性

# 扩展资源

# 官方文档

  • 鸿蒙开发者官网 (opens new window)
  • ArkTS语言指南 (opens new window)
  • ArkUI开发指南 (opens new window)

# 开发工具

  • DevEco Studio - 官方IDE
  • 鸿蒙模拟器 - 设备模拟
  • 真机调试工具 - 设备调试
  • 性能分析工具 - 性能监控
  • ohpm包管理器 - 依赖管理

# 社区资源

  • 华为开发者社区 (opens new window)
  • 鸿蒙技术论坛 (opens new window)
  • GitHub开源项目 (opens new window)

完整学习资源:请参考文档末尾的"学习资源"章节。

# 实际应用案例

# 基础应用开发

  • 计算器应用
  • 待办事项应用
  • 天气应用
  • 新闻应用

# 多媒体应用

  • 音乐播放器
  • 视频播放器
  • 图片编辑器
  • 录音应用

# 社交应用

  • 即时通讯
  • 社交网络
  • 直播应用
  • 短视频应用

# 工具应用

  • 文件管理器
  • 系统工具
  • 开发工具
  • 测试工具
  • 包管理工具

# 性能优化建议

# 开发阶段优化

  • 代码质量优化:编写高质量、可维护的代码
  • 资源使用优化:合理使用图片、音频等资源
  • 算法优化:选择高效的算法和数据结构
  • 架构优化:设计合理的应用架构
  • 依赖优化:管理好第三方依赖

# 运行时优化

  • 内存使用优化:避免内存泄漏,合理管理内存
  • CPU使用优化:减少不必要的计算,优化算法
  • 网络使用优化:合理使用网络资源,实现缓存策略
  • 电池使用优化:减少后台活动,优化耗电操作

# 用户体验优化

  • 界面响应优化:保持UI流畅响应
  • 操作流畅性优化:优化用户交互体验
  • 错误处理优化:提供友好的错误提示
  • 用户引导优化:设计清晰的使用引导

# 调试和测试技巧

# 调试技巧

  • 断点调试:使用DevEco Studio的断点功能
  • 日志调试:合理使用console.log输出调试信息
  • 性能调试:使用性能分析工具监控应用性能
  • 内存调试:检测内存泄漏和优化内存使用

# 测试技巧

  • 功能测试:确保应用功能正常工作
  • 性能测试:测试应用在不同场景下的性能表现
  • 兼容性测试:确保应用在不同设备上的兼容性
  • 安全测试:检查应用的安全漏洞

# 错误处理

  • 异常捕获:合理使用try-catch处理异常
  • 错误恢复:提供错误恢复机制
  • 错误报告:记录和报告错误信息
  • 错误分析:分析错误原因并优化代码

# 常见陷阱和解决方案

# 开发陷阱

  • 内存泄漏陷阱
  • 性能陷阱
  • 安全陷阱
  • 兼容性陷阱
  • 依赖管理陷阱

# 解决方案

  • 最佳实践
  • 设计模式
  • 架构模式
  • 优化策略
  • 依赖管理策略

# 相关技术

# 前端技术

  • TypeScript - ArkTS的基础语言
  • JavaScript - 前端开发基础
  • React Native - 跨平台开发参考
  • Flutter - 移动开发对比学习

# 包管理工具

  • npm/yarn - 前端包管理工具
  • ohpm - 鸿蒙生态包管理工具
  • Maven/Gradle - Android包管理工具

# 🚀 实践项目:待办事项应用

让我们通过一个完整的待办事项应用来实践鸿蒙开发:

# 项目结构

TodoApp/
├── entry/
│   └── src/
│       └── main/
│           ├── ets/
│           │   ├── pages/
│           │   │   ├── Index.ets          # 主页面
│           │   │   └── AddTodo.ets        # 添加待办页面
│           │   ├── components/
│           │   │   └── TodoItem.ets       # 待办项组件
│           │   ├── models/
│           │   │   └── Todo.ets           # 数据模型
│           │   └── utils/
│           │       └── Storage.ets        # 存储工具
│           └── resources/
└── oh-package.json5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 数据模型

// models/Todo.ets
export class Todo {
  id: string
  title: string
  completed: boolean
  createdAt: Date

  constructor(title: string) {
    this.id = Date.now().toString()
    this.title = title
    this.completed = false
    this.createdAt = new Date()
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 主页面

// pages/Index.ets
import { Todo } from '../models/Todo'
import { TodoItem } from '../components/TodoItem'
import { Storage } from '../utils/Storage'

@Entry
@Component
struct Index {
  @State todos: Todo[] = []
  @State newTodoTitle: string = ""

  aboutToAppear() {
    this.loadTodos()
  }

  private loadTodos() {
    this.todos = Storage.getTodos()
  }

  private addTodo() {
    if (this.newTodoTitle.trim()) {
      const todo = new Todo(this.newTodoTitle.trim())
      this.todos.push(todo)
      this.newTodoTitle = ""
      Storage.saveTodos(this.todos)
    }
  }

  private toggleTodo(id: string) {
    const todo = this.todos.find(t => t.id === id)
    if (todo) {
      todo.completed = !todo.completed
      Storage.saveTodos(this.todos)
    }
  }

  private deleteTodo(id: string) {
    this.todos = this.todos.filter(t => t.id !== id)
    Storage.saveTodos(this.todos)
  }

  build() {
    Column({ space: 20 }) {
      // 标题
      Text("待办事项")
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .margin({ top: 20 })

      // 添加待办输入框
      Row({ space: 10 }) {
        TextInput({ placeholder: "输入待办事项" })
          .layoutWeight(1)
          .onChange((value: string) => {
            this.newTodoTitle = value
          })
          .onSubmit(() => {
            this.addTodo()
          })

        Button("添加")
          .onClick(() => {
            this.addTodo()
          })
      }
      .width('100%')
      .padding({ left: 20, right: 20 })

      // 待办列表
      List() {
        ForEach(this.todos, (todo: Todo) => {
          ListItem() {
            TodoItem({
              todo: todo,
              onToggle: () => this.toggleTodo(todo.id),
              onDelete: () => this.deleteTodo(todo.id)
            })
          }
        })
      }
      .layoutWeight(1)
      .width('100%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F5F5F5')
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

# 待办项组件

// components/TodoItem.ets
import { Todo } from '../models/Todo'

@Component
export struct TodoItem {
  @Prop todo: Todo
  onToggle?: () => void
  onDelete?: () => void

  build() {
    Row({ space: 10 }) {
      // 完成状态复选框
      Checkbox({ name: 'todo', group: 'todoGroup' })
        .select(this.todo.completed)
        .onChange((value: boolean) => {
          this.onToggle?.()
        })

      // 待办内容
      Text(this.todo.title)
        .fontSize(16)
        .decoration({
          type: this.todo.completed ? TextDecorationType.LineThrough : TextDecorationType.None
        })
        .fontColor(this.todo.completed ? '#999' : '#333')
        .layoutWeight(1)

      // 删除按钮
      Button("删除")
        .fontSize(12)
        .backgroundColor('#FF6B6B')
        .onClick(() => {
          this.onDelete?.()
        })
    }
    .width('100%')
    .padding(10)
    .backgroundColor('#FFF')
    .borderRadius(8)
    .margin({ bottom: 5 })
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 存储工具

// utils/Storage.ets
import { Todo } from '../models/Todo'

export class Storage {
  private static readonly STORAGE_KEY = 'todos'

  static saveTodos(todos: Todo[]): void {
    try {
      const data = JSON.stringify(todos)
      preferences.putSync(this.STORAGE_KEY, data)
    } catch (error) {
      console.error('保存待办事项失败:', error)
    }
  }

  static getTodos(): Todo[] {
    try {
      const data = preferences.getSync(this.STORAGE_KEY, '[]')
      const todos = JSON.parse(data as string)
      return todos.map((todo: any) => {
        const t = new Todo(todo.title)
        t.id = todo.id
        t.completed = todo.completed
        t.createdAt = new Date(todo.createdAt)
        return t
      })
    } catch (error) {
      console.error('加载待办事项失败:', error)
      return []
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# ❓ 常见问题解答

# Q1: 如何调试鸿蒙应用?

A: 调试方法:

  • 使用 DevEco Studio 的调试器
  • 在代码中添加 console.log() 输出日志
  • 使用 hdc shell 查看设备日志
  • 利用性能分析工具监控应用性能

# Q2: 如何处理网络请求?

A: 网络请求示例:

import http from '@ohos.net.http'

async function fetchData() {
  const httpRequest = http.createHttp()
  try {
    const response = await httpRequest.request('https://api.example.com/data', {
      method: http.RequestMethod.GET,
      header: {
        'Content-Type': 'application/json'
      }
    })
    return JSON.parse(response.result as string)
  } catch (error) {
    console.error('网络请求失败:', error)
  } finally {
    httpRequest.destroy()
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# Q3: 如何实现页面导航?

A: 页面导航示例:

import router from '@ohos.router'

// 跳转到新页面
router.pushUrl({
  url: 'pages/DetailPage',
  params: {
    id: '123',
    title: '详情页'
  }
})

// 返回上一页
router.back()

// 替换当前页面
router.replaceUrl({
  url: 'pages/NewPage'
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# Q4: 如何管理应用状态?

A: 状态管理策略:

  • 组件级状态:使用 @State 装饰器
  • 页面级状态:使用 LocalStorage
  • 应用级状态:使用 AppStorage
  • 持久化状态:使用 PersistentStorage

# Q5: 如何优化应用性能?

A: 性能优化建议:

  • 合理使用 @State 和 @Prop
  • 避免在 build() 方法中进行复杂计算
  • 使用 LazyForEach 处理大列表
  • 及时释放不需要的资源
  • 使用图片缓存和懒加载

# 📚 学习资源

# 官方文档

  • 鸿蒙开发者官网 (opens new window) - 官方开发文档和教程
  • ArkTS语言指南 (opens new window) - ArkTS语言详细文档
  • ArkUI开发指南 (opens new window) - ArkUI框架开发指南
  • other
    • 行业实践与常见问题 (opens new window)

# 开发工具

  • DevEco Studio (opens new window) - 官方IDE下载
  • ohpm官方文档 (opens new window) - 包管理器文档
  • ohpm包仓库 (opens new window) - 官方包仓库

# 社区资源

  • 华为开发者社区 (opens new window) - 官方开发者社区
  • 鸿蒙技术论坛 (opens new window) - 技术交流论坛
  • GitHub开源项目 (opens new window) - 开源项目参考

# 🎉 总结

通过本指南的学习,你已经掌握了:

  1. HarmonyOS 基础概念 - 理解了鸿蒙生态和架构
  2. 开发环境搭建 - 熟练配置开发工具链
  3. ArkTS 语言 - 掌握了鸿蒙开发语言特性
  4. ArkUI 框架 - 学会了构建用户界面
  5. 实际项目开发 - 完成了完整的应用开发

继续深入学习,探索鸿蒙生态的更多可能性!🚀

#HarmonyOS#鸿蒙#ArkTS#ArkUI#华为#移动开发
上次更新: 2025/09/30, 16:30:32
gson
adb

← gson adb→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式