惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
S
Securelist
P
Proofpoint News Feed
H
Help Net Security
S
Schneier on Security
T
Tenable Blog
C
Cisco Blogs
S
Security @ Cisco Blogs
博客园 - 司徒正美
博客园 - 叶小钗
Cisco Talos Blog
Cisco Talos Blog
Google DeepMind News
Google DeepMind News
C
Cybersecurity and Infrastructure Security Agency CISA
Google Online Security Blog
Google Online Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News: Ask HN
Hacker News: Ask HN
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
W
WeLiveSecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
腾讯CDC
WordPress大学
WordPress大学
Simon Willison's Weblog
Simon Willison's Weblog
Vercel News
Vercel News
小众软件
小众软件
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
雷峰网
雷峰网
Forbes - Security
Forbes - Security
The Hacker News
The Hacker News
博客园 - 聂微东
F
Full Disclosure
量子位
Scott Helme
Scott Helme
宝玉的分享
宝玉的分享
A
About on SuperTechFans
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
K
Kaspersky official blog
AI
AI
SecWiki News
SecWiki News
Webroot Blog
Webroot Blog
Martin Fowler
Martin Fowler

博客园 - 码间留白

微信小程序审核总被拒?掌握这套“极简闭环”方案,轻松通关,亲测有效! uni-app 项目鸿蒙原生适配实录:微信授权登录从"点击无反应"到真机跑通,条件编译、SDK 配置与那些官方文档没说清的坑 uniapp项目适配鸿蒙端没有自定义基座,调试和打包怎么办? 鸿蒙纯血系统适配实战记录:uView + Vue3 的 uni-app 项目适配鸿蒙 NEXT,一天搞定主功能运行到鸿蒙纯血系统 AI辅助前端开发实战指南:高效落地、避坑沉淀全流程 uni-app 集成网易云信通话插件:首页通话监听一直只有第一次有日志?从监听丢失到重复上报的完整治理之路 即时通信 IM 踩坑实录:群主拉人入群后无法收消息?一文讲透 10007 错误码 AI时代插件开发新玩法,分分钟抽离封装插件,你需要做的只是发布到插件市场 PhotoShop CS6在win11系统中界面字体很小,通过兼容性设置强制高 DPI 缩放即可解决 不会后端不用愁,Strapi解你忧——使用Qoder生成前端开发框架,技术栈React18 + Vite + ReactRouter6 + Axios + vw 适配 + Ant Design Mobile + Zustand + Strapi5 不会后端不用愁,Strapi解你忧——Strapi后台数据表创建及API联调测试,实现查询文章及关联的分类、标签、评论等表连接查询 不会后端不用愁,Strapi解你忧——搭建博客系统常用数据表设计 windows11系统如何安装多个版本的node,新旧项目切换再也不需要卸载重装了 不会后端不用愁,Strapi解你忧——前端使用Strapi就能实现常见的数据增删查改,分页、排序、模糊查询、时间范围等,不要后端也能自己建站 不会后端不用愁,Strapi解你忧——Windows 11 本地完整部署 Strapi + MySQL 8 实操攻略,从下载到配置启动全指南 不会后端不用愁,Strapi解你忧——Strapi v5.4设置中文语言展示 win11电脑浏览器无法上网但微信正常使用,通常是因为‌DNS解析失败‌,手动设置可靠的公共DNS服务器地址来解决问题 高效能CI/CD流水线设计:Jenkins与Docker的7个关键优化点 从零搭建 Docker + Jenkins CI/CD 流水线:实现项目自动化构建与部署 AI辅助开发——阿里Qoder重构vue2项目到vue3后继续对项目页面加载速度进行优化 vue3项目本地环境网路请求初始连接过久导致接口请求时间过长的问题处理 微信小程序内嵌vue项目实现页面自定义分享完整示例代码 JavaScript 数组高阶用法汇总(含浏览器+微信小程序WebView支持) 京东小程序报错APP-SERVICE-SDK:setStorageSync:fail vue3+ts项目自定义全局函数调用正常但IDE报异常类型ComponentPublicInstance上不存在属性“$showLoading" vue项目实现Tab页面触底上拉切换下个Tab vue3+ts实现页面滚动位置的保存及恢复 到底是用vue2还是vue3好? css3过渡效果如何处理高度不确定的动态内容
uniapp项目鸿蒙适配,rebuild 后同步原生工程的三种方案与分层决策
码间留白 · 2026-07-21 · via 博客园 - 码间留白

做 uni-app 鸿蒙适配的同学,迟早会撞上一个问题:HBuilderX 重新 build 之后,怎么把前端产物同步到 DevEco 原生工程,同时不覆盖你在 DevEco 里手改的 ArkTS 代码? 本文记录了我们在实战中梳理出的三种方案、各自的适用场景,以及最终的选择。


一、先搞清一件事:build 到底覆盖了什么

在讨论方案之前,必须先澄清一个很容易搞混的点——HBuilderX build 出来的 app-harmony 到底是什么?

很多从 Android 转过来的同学会下意识以为:build 出来的就是一个完整的鸿蒙工程,里面有 ArkTS 代码、有 entry/、有 AppScope/、有 build-profile.json5。然后每次 rebuild 都战战兢兢,生怕把 DevEco 里手改的代码盖掉。

实际上不是。

HBuilderX build 出来的 dist/dev/app-harmony/ 里只有前端资源

dist/dev/app-harmony/
├── pages/              # 页面 JS
├── assets/             # 静态资源
├── static/             # 静态资源
├── subPackages/        # 分包
├── TUIKit/             # 组件库产物
├── uni_modules/        # uni_modules 产物
├── app-service.js      # 业务 JS 主包
├── app-renderjs.js     # renderjs
├── app-wxs.js          # wxs
├── app.css             # 样式
├── manifest.json       # 前端 manifest
└── ...

没有 ArkTS 原生代码(entry/src/main/ets/AppScope/chatuikit/ 等),没有 build-profile.json5oh-package.json5module.json5

也就是说:重新 build 只会重新生成这套前端资源,根本不会生成/覆盖你的 ArkTS 原生代码。

真正的风险只在于——如果你「把整个 app-harmony 目录整体覆盖进 DevEco 工程」,会把前端资源连同原生壳一起盖掉。


二、三种方案

方案 1:只同步前端产物,不整体覆盖

做法:rebuild 后,只把 dist/dev/app-harmony/ 里的前端资源同步到 DevEco 原生工程的 entry/src/main/resources/resfile/apps/__UNI__XXXXXXXX/www,ArkTS 原生代码目录一律不动。

优点

  • 从根上解决"覆盖"问题——原生代码天然不在同步范围内
  • 操作简单,一次配置长期受益

缺点

  • 需要明确知道前端产物在原生工程里的落点(www 目录)
  • 需要写一个同步脚本或建立同步规范

适用场景

  • 所有独立维护 DevEco 原生工程的团队

方案 2:原生工程 git 独立管理 + 每次同步后 git diff 复核

做法:DevEco 原生工程单独一个 git 仓库。rebuild → 同步前端产物 → git status / git diff 查看变化 → 只 stage 前端资源的变化,原生代码的 diff 保持不动。

优点

  • 给方案 1 上了保险——万一误拷了文件,git diff 能立刻发现异常
  • 每次同步都能清楚看到"哪些是前端更新、哪些是我手改的原生"

缺点

  • 依赖团队纪律,每次同步后都要复核
  • 需要团队成员都懂 git 操作

适用场景

  • 所有方案 1 的适用场景(方案 2 是方案 1 的配套纪律,不是三选一

方案 3:把反复手改的鸿蒙原生配置迁到 harmony-configs/

做法:uni-app 官方约定了一个 harmony-configs/ 目录(位于 uni-app 项目根目录)。HBuilderX 构建时会自动把这个目录里的文件合并/覆盖到生成的鸿蒙工程中。把需要固化的原生配置(权限、签名、entry 里的固定参数等)放进去,build 时会自动合并,就不用每次在 DevEco 里手改了。

优点

  • 治本——配置跟着 uni-app 项目走,不再依赖手改
  • 符合 uni-app 官方约定,未来升级工具链时不会被抛弃

缺点

  • 只在 HBuilderX 一键构建完整鸿蒙工程时才有用
  • 如果你用的是"只构建前端资源 + 手动同步 www"的工作流,这个目录完全用不到
  • 需要把原生配置从 DevEco 工程迁出,建立新的维护习惯

适用场景

  • 用 HBuilderX 一键构建完整鸿蒙工程的团队
  • 多人协作需要统一原生配置源
  • CI/CD 自动化构建鸿蒙版

三、三种方案的关系:不是三选一,是分层

这是最容易搞错的地方。方案 1 和方案 2 是必选的底线,方案 3 是锦上添花。

层级 方案 性质
第一层 方案 1:只同步前端产物 根本解
第二层 方案 2:git 独立管理 + diff 复核 配套纪律
第三层 方案 3:harmony-configs/ 长期优化

方案 1 + 方案 2 是必须的底线,方案 3 看工作流决定要不要用。


四、方案 3 的触发条件

只有一种核心场景会用到方案 3:HBuilderX 一键构建完整鸿蒙工程时,你手改的原生配置会被覆盖

当前工作流(不需要方案 3)

HBuilderX 只构建前端资源
    ↓
dist/dev/app-harmony/  (只有前端文件)
    ↓
sync-harmony.bat 同步 www 到 DevEco 原生工程
    ↓
原生工程 ArkTS 代码 + 原生配置 完全不动

原生配置不会被覆盖,所以不需要方案 3。

切换到"一键构建"工作流(需要方案 3)

HBuilderX 一键构建完整鸿蒙工程
    ↓
生成完整的 ArkTS 原生工程(包含 build-profile.json5、module.json5 等)
    ↓
你之前在 DevEco 里手改的权限、签名、依赖 全部被覆盖 ❌
    ↓
必须把需要固化的配置放进 harmony-configs/
    ↓
HBuilderX 构建时会自动把 harmony-configs/ 的文件合并/覆盖到生成的工程 ✅

什么时候你会切换到"一键构建"工作流?

触发条件 说明
嫌手动同步麻烦 不想每次 rebuild 都跑同步脚本,希望 HBuilderX 一键出完整工程
团队多人协作 多人共同维护鸿蒙原生工程,需要统一的原生配置源
CI/CD 自动化构建 需要在服务器上自动打包鸿蒙版,必须一键构建
原生工程不再独立维护 决定把原生工程也纳入 uni-app 项目的构建产物,不再单独 git 管理

只要还在用"HBuilderX 只构建前端资源 + 手动同步 www"的工作流,方案 3 就永远用不到。


五、我们的选择与落地

当前工作流

  • HBuilderX 只构建前端资源 → dist/dev/app-harmony/
  • scripts/sync-harmony.bat(GBK 编码,双击可跑)同步 www 到 DevEco 原生工程 E:\code_qnl\app-harmony
  • 原生工程独立 git 管理

落地清单

  • sync-harmony.bat,只同步前端产物到 www
  • 原生工程 E:\code_qnl\app-harmony 已独立 git 管理
  • 同步后 git status / git diff 复核
  • harmony-configs/ 暂不迁移(当前工作流用不到)
  • 签名配置本机路径痛点暂不剥离(单机开发阶段,等换机器/加人时再迁移)

已知痛点(记录,暂不动)

  • build-profile.json5 里的 signingConfigs 写死了本机绝对路径(C:\Users\admin\.ohos\config\...),换机器/加人时会失效
  • release 产品引用的 signingConfig: "release" 实际不存在,release 包会构建失败

触发条件:换机器 / 加人 → 触发签名配置剥离(模板 + .gitignore 方案)


六、给同行者的建议

如果你也在做 uni-app 鸿蒙适配,关于"rebuild 后怎么同步"这件事,我的建议是:

  1. 先搞清 build 产物是什么——打开 dist/dev/app-harmony/ 看一眼,里面只有前端资源,没有 ArkTS 代码。这个认知能消除 90% 的焦虑。

  2. 方案 1 + 方案 2 是必选项——写个同步脚本(bat 或 PowerShell 都行,注意编码),只同步 www;原生工程独立 git 管理,每次同步后 diff 复核。

  3. 方案 3 看工作流决定——如果你用的是 HBuilderX 一键构建完整工程,方案 3 必做;如果你用的是"只构建前端资源 + 手动同步 www",方案 3 完全用不到,不要过度设计。

  4. 不要盲目照搬官方约定——harmony-configs/ 是 uni-app 官方约定没错,但官方约定是为官方工作流服务的。你的工作流如果不是官方那套,硬套只会增加维护成本。

  5. 痛点要记录,但不一定要立刻解决——像签名配置本机路径这种痛点,记录在案,等真正遇到"换机器/加人"的触发条件时再迁移,避免过早优化。


写在最后

鸿蒙适配的技术难度不算高,但工程化细节不少。"rebuild 后怎么同步"就是其中一个典型——看起来是个操作问题,本质是个工作流选择问题

把三种方案的关系理清,根据自己团队的工作流做选择,比盲目照搬官方约定更重要。

希望这篇对你有帮助,有问题欢迎交流。