1. 零基础做鸿蒙应用卡点到底在哪很多人对「不会写代码也能做鸿蒙应用」这件事的第一反应是怀疑ArkTS 语法、ArkUI 组件、Stage 模型生命周期、签名证书、HAP 打包这一串名词摆出来就够劝退了。我完全理解这种感受因为鸿蒙原生开发和过去写网页、写小程序的思路差别不小它不是套模板就能跑起来的东西。但换个角度看真正劝退新手的往往不是「逻辑难」而是「环境碎」。你要装 DevEco Studio、配 SDK、理解 module.json5 和 app.json5 的分工、搞清楚 UIAbility 怎么启动页面、最后还要处理签名才能装到设备上。这些步骤单拎出来都不复杂可它们串在一起任何一环报错都会让人卡住。Claude Code 这类能「动手」的编程助手价值就在这里它不只是给你一段代码让你自己贴而是能在你的项目目录里直接创建文件、改配置、跑构建命令。再配合一个统一的模型接入通道把 Key 和 API 地址收敛到一处你就不用一边查文档一边到处找密钥了。这篇就按这个思路从空项目一路跑到能安装的 HAP 包把可复制的配置和验证动作都给你。适合谁看完全没写过 ArkTS、但想亲手做出一个能装到鸿蒙设备上的应用的人以及已经装了 DevEco Studio、却被构建报错卡住的初学者。下面所有命令和配置都可以直接抄。2. 前置准备TaoToken 统一 Key 与 Claude Code 接入在动手写页面之前先把「AI 通道」打通。Claude Code 需要一个可用的模型服务地址和密钥TaoToken 在这里扮演的就是统一入口的角色一个 Key、一个 API 地址模型对话、编码辅助都走同一条通道省得你在多个平台之间来回切换配置。先拿到密钥。打开控制台创建 API Key地址是 https://taotoken.net/console 创建后复制那串以 sk- 开头的字符串先存到安全的地方后面配置要用。如果你还没注册从官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 进去即可。接着安装 Claude Code。它是个 npm 全局包前提是你机器上有 Node.js建议 18 以上npm install -g anthropic-ai/claude-code claude --version装完先别急着进项目把接入配置写好。Claude Code 读取的是用户目录下的 settings.json路径在 macOS/Linux 是~/.claude/settings.jsonWindows 是C:\Users\你的用户名\.claude\settings.json。下面这份骨架可以直接用把sk-你的密钥换成刚才复制的那串{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的密钥, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }这里有两个点容易踩坑。第一ANTHROPIC_BASE_URL填的是https://taotoken.net/api不要自己加/v1之类的后缀客户端会自己拼路径。第二认证字段用ANTHROPIC_AUTH_TOKEN不是ANTHROPIC_API_KEY写错了会一直提示鉴权失败。配置保存后在终端里跑一次claude如果能看到交互界面并且不报鉴权错误说明通道通了。想确认模型是否正常响应也可以直接在网页端模型对话里发一句话试试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 能正常回话就说明 Key 没问题。注意settings.json 里含密钥别把它提交到 Git 仓库。建议在项目根目录的 .gitignore 里加上.claude/。3. 可复制配置DevEco Studio 建项目 鸿蒙知识包通道通了接下来是鸿蒙侧的环境。先去华为开发者官网下载 DevEco Studio 并安装它内置了 HarmonyOS SDK、Node.js、Hvigor 构建工具和模拟器装完基本不用再单独配环境。安装时留意磁盘空间官方建议预留 100GB 以上模拟器镜像比较占地方。装好后打开 DevEco Studio点 Create Project模板选 Empty Ability项目名填一个英文名比如HarmonyDemo语言选 ArkTS点 Finish。一个标准 Stage 模型项目就出来了目录结构大致是这样HarmonyDemo/ ├── AppScope/ │ └── app.json5 ├── entry/ │ ├── src/main/ │ │ ├── ets/ │ │ │ ├── entryability/EntryAbility.ets │ │ │ └── pages/Index.ets │ │ ├── module.json5 │ │ └── resources/ │ └── build-profile.json5 └── build-profile.json5关键文件就三个Index.ets是页面入口module.json5管模块配置和权限app.json5管应用级信息。新手最容易搞混的是「页面写在哪个文件」——记住pages/Index.ets就是默认首页改它就行。现在让 Claude Code 真正「懂」鸿蒙。默认情况下你让它写鸿蒙代码它可能给你输出 React 或普通 TypeScript因为训练数据里 ArkTS 占比不高。解决办法是装一个鸿蒙开发知识包把 ArkTS 语法、ArkUI 组件、Stage 模型这些知识喂给它git clone https://github.com/DengShiyingA/harmonyos-ai-skill.git ~/src/harmonyos-ai-skill mkdir -p ~/.claude/skills ln -s ~/src/harmonyos-ai-skill/harmonyos-development ~/.claude/skills/harmonyos-developmentWindows 用户没有ln -s可以直接把harmonyos-development文件夹复制到C:\Users\你的用户名\.claude\skills\下。装好后当你的提问里出现 HarmonyOS、ArkTS、ArkUI 这类关键词时Claude Code 会自动加载对应知识输出的代码才会是Entry ComponentV2 struct这种正确形态而不是 HTML 标签。提示知识包是社区开源项目内容会更新建议隔段时间git pull一次保持和最新 SDK 对齐。4. 从自然语言到 ArkTS 页面一次构建验证环境齐了进入正题。在项目根目录打开终端启动 Claude Codecd HarmonyDemo claude然后用中文把需求说清楚。这里有个经验描述越具体生成结果越接近你要的。比如做一个猜词小游戏可以这样讲在这个鸿蒙项目里做一个猜词游戏页面要求 1. 从固定单词表里随机选一个英文单词 2. 用下划线显示未猜出的字母 3. 26 个字母按钮点过的禁用 4. 猜错累计 6 次就输猜全对就赢 5. 有重新开始按钮 6. 用 ArkTS 和 ArkUI 写页面文件是 pages/Index.etsClaude Code 会读取项目结构把逻辑写进Index.ets。生成的核心代码大概长这样你可以对照检查它有没有用对语法Entry ComponentV2 struct Index { Local targetWord: string HANGMAN Local guessedLetters: string[] [] Local wrongGuesses: number 0 Local maxWrongGuesses: number 6 Local gameWon: boolean false Local gameLost: boolean false private words: string[] [APPLE, BANANA, CHERRY, DRAGON, FLOWER] aboutToAppear() { this.startNewGame() } startNewGame() { this.targetWord this.words[Math.floor(Math.random() * this.words.length)] this.guessedLetters [] this.wrongGuesses 0 this.gameWon false this.gameLost false } guessLetter(letter: string) { if (this.guessedLetters.includes(letter)) return this.guessedLetters.push(letter) if (!this.targetWord.includes(letter)) { this.wrongGuesses } this.checkGameStatus() } checkGameStatus() { const allGuessed this.targetWord.split().every(l this.guessedLetters.includes(l)) this.gameWon allGuessed this.gameLost this.wrongGuesses this.maxWrongGuesses } getDisplayWord(): string { return this.targetWord.split().map(l this.guessedLetters.includes(l) ? l : _).join( ) } build() { Column() { Text(猜词游戏).fontSize(32).fontWeight(FontWeight.Bold).margin({ top: 20 }) Text(this.getDisplayWord()).fontSize(24).letterSpacing(8).margin({ top: 40 }) Text(剩余机会: ${this.maxWrongGuesses - this.wrongGuesses}).fontSize(18).margin({ top: 20 }) Flex({ wrap: FlexWrap.Wrap }) { ForEach(ABCDEFGHIJKLMNOPQRSTUVWXYZ.split(), (letter: string) { Button(letter) .width(42).height(42).margin(4) .enabled(!this.guessedLetters.includes(letter) !this.gameWon !this.gameLost) .onClick(() this.guessLetter(letter)) }) }.margin({ top: 30 }) if (this.gameWon) { Text(恭喜你赢了).fontSize(24).fontColor(Color.Green).margin({ top: 20 }) } else if (this.gameLost) { Text(游戏结束答案: ${this.targetWord}).fontSize(24).fontColor(Color.Red).margin({ top: 20 }) } Button(重新开始).margin({ top: 30 }).onClick(() this.startNewGame()) } .width(100%).height(100%).padding(20) } }代码写完后最关键的一步是构建验证。别急着点运行先在终端里让 Claude Code 跑一次编译把错误暴露出来hvigorw assembleHap --mode module -p productdefault如果它报错直接把报错信息丢给 Claude Code说「运行一下看看有什么问题」它会调用构建命令、读日志、定位到具体行再修。常见的几类错误我在下一节展开。构建成功后产物在entry/build/default/outputs/default/下能看到entry-default-signed.hap这个文件就说明你已经从空项目跑到了可安装的 HAP 包。想装到设备上看效果DevEco Studio 里点 Run选模拟器或连上真机应用会自动安装启动。如果你希望连编译、签名、部署都交给 AI可以再装一个部署工具让 Claude Code 一条龙完成。5. 本篇常见报错排查零基础跑这套流程报错基本集中在下面几类我按出现频率排一下。第一类是hvigorw: command not found。这通常是你没在项目根目录执行或者 DevEco Studio 的构建工具没进 PATH。解决办法是回到项目根目录再跑或者直接用 DevEco Studio 内置的终端它已经配好了环境变量。第二类是 ArkTS 语法报错比如Property xxx does not exist on type。这多半是 AI 用了普通 TypeScript 的写法而 ArkTS 是严格模式不允许动态属性、不允许any。检查一下知识包有没有装好或者直接告诉 Claude Code「用 ArkTS 严格模式重写不要用 any」。第三类是module.json5配置错误典型提示是找不到 ability 或页面路径不对。ArkTS 页面必须在module.json5的pages字段里声明新增页面忘了加就会白屏。让 Claude Code 帮你检查这个文件它会自动补上。第四类是签名相关构建 release 包时报signingConfigs缺失。调试阶段用自动签名就行DevEco Studio 里 File → Project Structure → Signing Configs 勾选 Automatically generate signature。要上架才需要手动配.p12和.cer。第五类是模型侧报错比如 Claude Code 提示401 Unauthorized或连接超时。先确认 settings.json 里ANTHROPIC_AUTH_TOKEN填的是完整密钥、ANTHROPIC_BASE_URL是https://taotoken.net/api。如果还是不通去 API Keys 页面重新生成一个 Key 试试https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 。接入细节和字段说明可以对照文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 。排查顺序建议先确认 AI 通道通能对话再确认项目能编译hvigorw 不报错最后才处理签名和上架。顺序反了会浪费很多时间。6. 长期编码与上架把通道固定下来跑通一次之后如果你打算持续做鸿蒙应用甚至同时维护几个项目建议把接入方式固定成一套稳定流程而不是每次重新配。Claude Code 的配置是全局的配一次所有项目都能用这点比在每个项目里单独设环境变量省事。对于需要长时间、多轮对话的编码场景比如反复迭代 ArkTS 页面、让 AI 帮你重构组件用 Coding Plan 会更划算额度按周期走不用担心单次调用把额度打满https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 。如果你更习惯在 Claude Code 里直接干活接入文档里也写了完整的命令行用法https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 。上架这块流程本身不复杂注册 AppGallery Connect 账号、创建应用、配签名、Build 出 release 的.app文件、上传审核。真正花时间的是审核反馈所以第一次提交前把应用截图、隐私政策、版本说明准备齐能少走一轮。华为应用市场审核一般 1 到 3 个工作日耐心等就行。最后说个我自己的习惯每次让 AI 改完代码我都会先跑一次hvigorw assembleHap再点运行。构建通过不代表逻辑对但构建不通过一定跑不起来先把编译这关守住调试会轻松很多。等你把第一个 HAP 装到设备上、看到自己描述的游戏真的跑起来那种感觉和单纯让 AI 生成一段代码完全不一样。