Skip to content
🌊海洋蓝
🌸樱花粉
🍃森林绿
🔮幻夜紫
🌙暗夜黑

手把手带你使用 DevEcoCli 和 DevEcoCode 快速开发三方库

前言

之前的章节中已经介绍了 DevEcoCli (集 HarmonyOS 开发全链路功能的终端工具) 和 DevEcoCode(类似 Claude Code 的鸿蒙官方的智能体),结合上述两个能力,开发者也可以根据项目需求去开发三方库,发布到OpenHarmony 三方库中心仓上(https://ohpm.openharmony.cn/#/cn/home)

发布三方库流程

发布 OpenHarmony 三方库流程图

发布一个三方库到 OpenHarmony 三方库中心仓,整体可以分为 6 个步骤:账号准备 → 密钥配置 → 工程创建 → 库开发 → 打包构建 → 发布审核。

1. 注册账号

前往 OpenHarmony 三方库中心仓 注册账号并完成实名认证

2. 生成密钥 & 配置认证

OHPM 使用 RSA 公私钥 校验发布权限(仅支持 PEM 格式)。

bash
# 1. 生成 RSA 公私钥对(密码必须非空)
ssh-keygen -m PEM -t RSA -b 4096 -f ~/ohpmkey

# 2. 配置私钥路径
ohpm config set key_path ~/ohpmkey

# 3. 配置发布码 publish_id(在个人中心获取)
ohpm config set publish_id UR7FAMETVU

然后把 ohpmkey.pub 公钥内容复制粘贴到「个人中心 → 公钥管理」中上传。

3. 创建 Library 模块

使用 DevEco Studio:「New → Module → Static Library」创建一个静态库模块;也可以直接用 devecocli 创建工程后在其中添加 Library 模块。

4. 完善 oh-package.json5 & 必备文件

4.1 oh-package.json5

模块级 oh-package.json5 负责描述这个可发布的包,必填字段有:nameversionmainlicense

json5
{
  name: "@ericbyliang/lib_watermark", // 必须带组织名
  version: "1.0.0", // 遵循 semver 规范
  main: "Index.ets",
  description: "A HarmonyOS watermark component.", // 不能是默认占位符
  author: "Eric Liang", // 不能为空
  license: "Apache-2.0",
  keywords: ["watermark", "security", "HarmonyOS"],
  dependencies: {},
}

注意:要发布的 HAR 模块,其所有直接依赖必须在自己的 oh-package.json5 里声明完整,不能依赖工程级配置"补漏"。

4.2 三个必备文件

OpenHarmony 仓库审核较严格,发布的 .har / .tgz必须包含以下三个文件,且内容非空、符合规范:

文件要求
LICENSE真实许可证全文,推荐 Apache-2.0
readme.md至少包含安装命令和使用说明
changelog.md至少包含版本号及该版本的修改内容
bash
# 快速生成 LICENSE(Apache 2.0)
curl https://www.apache.org/licenses/LICENSE-2.0.txt -o LICENSE

5. 打包构建 HAR

在 DevEco Studio 中选中 Library 模块,执行「Build → Make Module」,构建完成后会在 build 目录下生成 .har 文件。

注意:debug 模式构建的 HAR 包含源码,发布时请使用 release 模式,避免代码泄露。

6. 发布 & 审核

bash
# 执行发布(会提示输入第 2 步设置的密码)
ohpm publish lib_watermark.har

发布成功后几分钟内会进入审核状态,审核通过并上架后,其他开发者即可通过名称安装:

bash
ohpm install @ericbyliang/lib_watermark

⚠️ 一旦某个 name + version 组合发布并审核通过,该名称和版本号将被永久占用,无法再次使用(即使下架),版本迭代需递增 version 字段。


常见问题速查

现象原因 / 解决方案
HttpCode 400 ... must contain a non-empty changelog.md缺少或空的 changelog.md,补上即可
公钥校验失败密钥不是 PEM 格式 RSA;重新用 ssh-keygen -m PEM 生成
description / author 被拒审使用了默认占位符或空值,填写真实内容
名称或版本已存在name+version 已被占用,递增 version 后重新发布
安装签名不一致本地缓存问题,执行 ohpm install 强制刷新

DevEcoCode 发布三方库实战

启动 DevEcoCode

deveco

输入三方库的需求

帮我在当前目录创建一个新工程,用于开发 HarmonyOS ArkTS 工具库(HAR 包)并且发布

用 ArkTS 开发一个 HarmonyOS 校验工具库 `harmony-validator`,发布为 HAR 包。

  模块:Validator.ets
实现静态方法,纯逻辑无 UI:

- `isPhone(s): boolean` — 手机号
- `isEmail(s): boolean` — 邮箱
- `isIDCard(s): boolean` — 身份证 18 位(含末位校验码加权算法)
- `isURL(s): boolean` — URL
- `isLicensePlate(s): boolean` — 车牌(含新能源)

 要求
- ArkTS 严格模式,禁用 `any` / `as`
- 所有方法 `static`,参数返回值明确类型
- 正则常量抽到 `RegexKit.ets` 共享
- 公开方法加 `/** */` 注释(含示例)
- `Index.ets` 统一 re-export
- `src/test/` 下用 @ohos/hypium 写单测,每方法 ≥3 用例(正常/边界/非法)

  交付
1. 目录结构
2. Validator.ets + RegexKit.ets
3. 单测代码
4. oh-package.json5 + README.md(中文 + 安装 + 示例)

先输出目录结构,确认后再写代码。
直接复制给 AI 即可,约 200 行代码量,半天能跑通。

确认需求

根据 DevEcoCode 给出的计划文档,如果需要调整,可以直接在对话中进行沟通,如果没有问题,可以确定,让它执行。

DevEcoCode 会按照计划去执行任务。

得到产物

等待片刻,工程和对应的核心代码也得到了,如下:

核心文件与逻辑讲解

DevEcoCode 生成的工程是一个标准的 Static Library(HAR)模块,整体结构非常精简:

HarmonyValidator/
├── library/                      # HAR 模块根
│   ├── Index.ets                 # 统一入口(对外导出)
│   ├── oh-package.json5          # 模块级包描述
│   ├── build-profile.json5       # 构建配置
│   └── src/main/
│       ├── module.json5          # 模块清单(类型:har)
│       └── ets/
│           ├── RegexKit.ets      # 共享正则常量集合
│           └── Validator.ets     # 校验工具类(核心逻辑)
├── build-profile.json5           # 工程级构建配置
└── oh-package.json5              # 工程级包描述

下面挑 4 个最关键的文件讲解。

1. Index.ets — 统一入口

这是 oh-package.json5main 字段指向的入口文件,也是使用方 import 时实际加载的模块。它只做一件事:把内部实现类统一 re-export 出去,对外屏蔽 src/main/ets/... 的真实路径。

ts
// 使用方只需这样写,无需关心内部目录结构
import { Validator } from "harmony-validator";
ts
// Index.ets
export { Validator } from "./src/main/ets/Validator";
export { RegexKit } from "./src/main/ets/RegexKit";

这是发布三方库的推荐做法:内部目录可自由重构,只要 Index.ets 的导出不变,使用方代码就不用改。

2. RegexKit.ets — 共享正则常量

把所有正则集中到一个类里,以 static readonly 暴露,方便 Validator 和外部共用。

ts
export class RegexKit {
  /** 中国大陆手机号:1 开头,第二位 3-9,共 11 位。 */
  static readonly PHONE: RegExp = new RegExp("^1[3-9]\\d{9}$");

  /** 电子邮箱 */
  static readonly EMAIL: RegExp = new RegExp(
    "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"
  );

  /** 18 位身份证格式(校验码由 Validator 计算) */
  static readonly IDCARD: RegExp = new RegExp("^\\d{17}[\\dXx]$");

  /** URL(http / https) */
  static readonly URL: RegExp = new RegExp(
    "^https?:\\/\\/[A-Za-z0-9.-]+(:\\d+)?...$"
  );

  /** 车牌号(含新能源) */
  static readonly LICENSE_PLATE: RegExp = new RegExp("^[京津沪渝...][A-Z]...$");
}

一个 ArkTS 的关键约束:ArkTS 严格模式禁止使用正则字面量(如 /^1\d{10}$/),所有正则都必须用 new RegExp('...') 构造。DevEcoCode 生成的代码严格遵守了这一点,这也是手写正则时最容易踩的坑。

3. Validator.ets — 核心校验逻辑

这是库的主角,一个纯逻辑工具类(无 UI 依赖),所有方法都是 static,调用方式极简:

ts
Validator.isPhone("13812345678"); // true
Validator.isEmail("a.b+c@example.cn"); // true
Validator.isIDCard("11010519491231002X"); // true

大部分方法(isPhone / isEmail / isURL / isLicensePlate)逻辑相同:先判空,再用 RegexKit 里对应的正则 test 一下。

真正有技术含量的是 isIDCard——它不只看格式,还实现了 GB 11643-1999 标准里的校验码加权算法

ts
static isIDCard(s: string): boolean {
  // 1. 先用正则校验基本格式:前 17 位数字 + 末位数字/X
  if (!RegexKit.IDCARD.test(s)) return false

  // 2. 前 17 位逐位乘以加权因子,求和
  let sum: number = 0
  for (let i = 0; i < 17; i++) {
    const digit: number = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0)
    sum += digit * ID_WEIGHTS[i]     // ID_WEIGHTS = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
  }

  // 3. 求和结果模 11,映射到标准校验码表
  const expected: string = ID_CHECK_CODES[sum % 11]  // ['1','0','X','9','8','7','6','5','4','3','2']

  // 4. 与身份证第 18 位比对(X 大小写都算通过)
  return expected === s.charAt(17).toUpperCase()
}

也就是说,随便填一个格式正确但数字瞎编的身份证号(比如 110105194912310021),isIDCard 会因为校验码对不上而返回 false,这是单纯正则做不到的。

4. oh-package.json5 — 包描述

模块级配置,决定了这个库在中心仓的"身份",也是审核能否通过的关键。DevEcoCode 初版生成的是一个精简配置,经过实际发布打磨后,最终版本补齐了 homepage / repository / keywords / tags 等字段:

json5
{
  name: "harmony-validator",
  version: "1.0.0",
  description: "HarmonyOS ArkTS 校验工具库:手机号 / 邮箱 / 身份证(含 GB11643 校验码) / URL / 车牌(含新能源),纯逻辑无 UI。",
  main: "Index.ets", // 入口文件(指向第 1 个讲解的 Index.ets)
  author: "万少",
  license: "Apache-2.0",
  homepage: "https://github.com/itcastWsy/harmony-validator#readme",
  repository: "https://github.com/itcastWsy/harmony-validator.git",
  bugs: {
    url: "https://github.com/itcastWsy/harmony-validator/issues",
  },
  keywords: [
    "HarmonyOS",
    "OpenHarmony",
    "ArkTS",
    "validator",
    "validation",
    "phone",
    "email",
    "idcard",
    "url",
    "license-plate",
  ],
  tags: ["Tools"],
  ohos: { org: "opensource" },
  dependencies: {},
}

几个字段的作用:

  • main: "Index.ets":把前面讲的"桶文件入口"和包管理器串起来——使用方 import { Validator } from 'harmony-validator' 时,ohpm 据此找到 Index.ets
  • homepage / repository / bugs:指向 GitHub 仓库,中心仓详情页会展示,也方便用户提 issue。
  • keywords:影响中心仓搜索的匹配度,建议覆盖平台 + 语言 + 功能三类关键词。
  • tags: ["Tools"]:中心仓的分类标签,决定了库出现在哪个分类列表里。
  • ohos.org: "opensource":开源库标识。

💡 初版只有 name / version / main / author / license 五个必填字段,发布时审核也能过;但补齐 keywordsrepository 后,在中心仓被搜到的概率和可信度都会明显提升。

推送流程

可以 和 DevEcoCode 对话,让它检查是否具备发包的基本要求了。


然后继续补充信息


一切就绪好,输入命令进行推送。

ohpm publish library/build/default/outputs/default/library.har

过程中需要你提供当前创建私钥的时候的密码

输入完毕后,可以查看到成功推送的 提示。


三方库中也可以查看到审核信息

总结

本篇以 harmony-validator(一个 ArkTS 校验工具库)为例,完整演示了从零开发到发布 OpenHarmony 三方库的全流程。

整个流程可以归纳为两条主线:

1. 发布流程主线(6 步标准化)

这是所有鸿蒙三方库都要走的标准路径,记住这 6 步即可:

步骤关键动作易踩的坑
① 注册组织中心仓实名 + 创建组织包名格式 @组织名/包名,组织名不可改
② 配置密钥RSA 公私钥 + publish_id必须 PEM 格式;密码非空
③ 创建 LibraryDevEco Studio 或 devecocli选 Static Library(HAR)
④ 完善配置oh-package.json5 + 三件套LICENSE / readme / changelog 缺一不可
⑤ 构建 HARBuild → Make Module用 release 模式,防源码泄露
⑥ 发布审核ohpm publishname+version 永久占用

2. DevEcoCode 开发主线(自然语言驱动)

本篇的实战部分展示了用 DevEcoCode 开发三方库的独特优势:

  • 需求即代码:把校验规则、ArkTS 严格模式约束、单测要求用自然语言描述清楚,DevEcoCode 就能生成结构规范的完整工程(桶文件入口、正则集中管理、纯静态方法、注释示例)。
  • 约束内建:DevEcoCode 天然遵守 ArkTS 严格模式(如禁用正则字面量、禁用 any / as),生成的代码无需额外整改即可通过编译和审核。
  • 对话式打磨:从初版精简配置到补齐 keywords / repository / tags,再到推送前的合规检查,都可以通过对话让 DevEcoCode 协助完成。

3. 两个值得记住的工程实践

  • 桶文件入口(barrel)Index.ets 统一 re-export,对外屏蔽内部路径,后续重构不影响使用方。
  • 正则集中管理RegexKitstatic readonly + new RegExp() 暴露,既符合 ArkTS 严格模式,又便于复用和维护。

三方库是鸿蒙生态的基础设施。如果你在项目中封装了通用的工具函数、UI 组件或业务 SDK,不妨按这篇的流程发布出去——既方便自己复用,也能为社区做贡献。

参考文献

  1. DevEco Studio 工具概览:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-tools-overview
  2. DevEcoCode:鸿蒙专属AI智能体:https://atomgit.com/openharmony-sig/deveco-code
  3. @deveco/deveco-cli · npm:https://www.npmjs.com/package/@deveco/deveco-cli
  4. HarmonyOS 7新特性:https://developer.huawei.com/consumer/cn/features/?ha_source=51cto&ha_sourceId=70000008
  5. HarmonyOS AI开发提效工具:DevEco Code & DevEco CLI:https://developer.huawei.com/consumer/cn/forum/topic/0202216647056043902?ha_source=51cto&ha_sourceId=70000008
  6. 社区干货合集:一帖看全,高效查阅 https://developer.huawei.com/consumer/cn/forum/topic/0201215860119833282?ha_source=51cto&ha_sourceId=70000008

Released under the MIT License.