- 博客(171)
- 收藏
- 关注
原创 鸿蒙编辑器框架的传输引擎:与平台剪贴板解耦的多格式复制粘贴
复制粘贴是编辑器里最被低估的功能——它同时是内容的出口和入口,牵扯三个各自独立的问题:格式(剪贴板里存什么,外部应用读得懂吗)、身份(粘贴出来的块用什么 ID)、平台(怎么跟 @ohos.pasteboard 和它的权限模型打交道)。ADR-0004 的答案是先把前两个问题在框架层解决干净,再把第三个问题压缩成一个"薄壳"适配器。
2026-08-28 12:02:43
13
原创 鸿蒙编辑器框架的 RichEditor 集成:真机才教会我们的文本同步
编辑器里永远有两份文本真相:引擎 Block 模型里的那份,和屏幕 RichEditor 缓冲里的那份。让它们在打字、拆分、合并、撤销的每一步都保持一致,是鸿蒙编辑器工程最凶险的一英里——凶险到很多问题只存在于真机上:Undo 连按好几下没反应、然后一次性删光所有文字;按个 Enter,整页文本凭空消失。
2026-08-28 11:56:09
129
原创 鸿蒙编辑器框架的渲染层:注册表分发、局部刷新与 ForEach 的坑
编辑器渲染的黄金法则是"只更新受影响的块"——但把这条法则落到 ArkUI 上,你会撞上一堵写满警告的墙:ForEach 的 key 怎么写、@Prop 什么时候不可靠、@Builder 为什么不能跨文件。
2026-08-28 11:51:23
125
原创 鸿蒙编辑器框架的属性引擎:声明元数据,UI 自动生成
每个块插件都有用户可编辑的属性——图片的宽高布局、卡片的尺寸变体、Callout 的语义类型。在属性引擎之前,接入一个插件要在 UI 层、路由层、控制器层各写一份几乎相同的代码,插件数量线性增长,重复代码同步增长。
2026-08-28 11:47:44
242
原创 鸿蒙编辑器框架的插件 SDK:官方插件与第三方走同一条路
框架的扩展性有两种死法:一种是让插件改内核(改着改着内核就不是内核了),另一种是给官方功能留后门(官方走快捷通道,SDK 沦为装饰)。ArkBlocks 给自己立了一条狠规矩——官方块类型逐个迁出内核、强制走插件通道,迁移本身就是对 SDK 的验收测试:官方插件过不了 SDK 这条路,修的是 SDK,不是开后门。
2026-08-28 11:35:26
294
原创 鸿蒙编辑器框架的 Schema 体系:BlockSpec 注册与运行时校验
编辑器的文档不是只活在内存里——它从云端同步来、从剪贴板粘贴来、从用户导出的 JSON 恢复来。运行时校验因此不是锦上添花,而是数据边界上的海关。但 ArkBlocks 的 Schema 体系有意思的地方在于:同一份注册表,既是类型契约(什么块合法、什么属性能存),又是 UI 的数据源(插入面板、样式菜单、斜杠菜单全部由它聚合生成)。
2026-08-28 11:29:08
302
原创 鸿蒙编辑器框架的撤销/重做:逆操作历史栈
撤销/重做是编辑器给用户的"安全网"——用户之所以敢大胆删改,是因为相信一切可以反悔。而这个安全网的可靠性,取决于一个底层选择:历史栈里存什么。ArkBlocks 的答案是不存文档、只存操作:每个历史条目记录"这步怎么来的"和"怎么回去的"两组操作。本篇拆解 history/ 模块约 250 行源码:快照方案与逆操作方案的内存数学题、undo() 与 redo() 惊人的结构对称性、防重入守卫如何阻止"撤销产生新历史"的死循环、以及失败时"条目回压"的保守哲学。
2026-08-28 11:25:55
264
原创 鸿蒙编辑器框架的事务引擎:一切变更的唯一边界
上一篇确立了"Document 持有 Block 树"的唯一事实来源,但留下一个悬念:既然谁都要读文档,那谁被允许写?ArkBlocks 的答案极端而彻底——只有一个类被允许调用 Document 的变更方法,且每次写入必须以事务为单位。本篇把 transaction/ 目录五个文件共约 2600 行代码拆开讲透:20 种类型化操作如何把"编辑"翻译成离散代数、五阶段校验管道为什么缺一不可、逆操作为什么必须在应用前生成、以及 replaceBlock 逆操作里那个避免"撤销时瞬间删空文档"的漂亮技巧。
2026-08-28 11:23:11
367
原创 鸿蒙编辑器框架的文档模型:Block 树是唯一事实来源
编辑器框架动工前必须回答的第一个问题是——"文档存在哪里?"。这个问题答含糊了,后面每个子系统都会发明自己的答案,最终你会在"用户敲了一个字符,几处状态要同步"的泥潭里挣扎。ArkBlocks 用 RFC-0001 把答案焊死:Document 持有 Block 树,其余一切(选区、历史、渲染、剪贴板)都只是派生视图。本篇拆解这份 855 行的架构契约如何落成 997 行的 Document.ts:三层数据模型、树 + 双 O(1) 索引、预检式变更、UUID 身份规则,以及一组值得任何数据密集型应用抄走的
2026-08-28 11:19:55
556
原创 为什么鸿蒙需要一个原生 Block 编辑器框架
做一个笔记应用、知识库或 AI 写作工具,绕不开的第一个硬骨头是结构化内容编辑。本篇不从代码开始,而是先回答三个更根本的问题:鸿蒙上做编辑器,现有三条路各自会死在哪里?Block 编辑器范式到底比"富文本"多给了你什么?以及——一个决心演进多年的编辑器框架,工程上该怎么防腐烂。文中所有架构决策、代码与数据均来自 ArkBlocks 项目(纯 ArkTS 实现的 HarmonyOS NEXT 原生 Block 编辑器框架)的真实仓库,可对照源码阅读。
2026-08-28 11:16:43
761
原创 HarmonyOS 鸿蒙 Canvas 组件与主题系统的接边 —— darkSurface 注入约定,让纯函数组件拥有暗色模式
ArkUILab 里存在两个「世界观」:页面世界有完整的主题系统——ThemeEngine 管品牌与明暗、AppStorage 做全局状态、$r('sys.color.*') 系统令牌自动跟随深色模式,《Theme Foundation》和《Brand Theme Engine》两篇已经把它讲透了。组件世界(GrokBot、ThinkingOrbs、BorderBeam、FlowAvatar、MetalFx……)却过着苦行僧的生活——Core 是零 UI 依赖的纯函数,Painter 只画一帧,两者
2026-08-18 11:30:15
16
原创 HarmonyOS 鸿蒙 Native 图形组件工程化实战 —— 从 CMake 到 ArkTS 类型安全,一条 .so 的完整入职流程
上一篇《MetalFx 原生 GPU 金属特效实战》讲的是渲染链:NAPI 怎么解析参数、EGL 怎么初始化、GLSL 怎么写。这一篇讲另一半,同样决定成败的工程链:
2026-08-18 11:28:21
120
原创 HarmonyOS 鸿蒙 Lab 调参台模式 —— 把「写完组件」和「验收完组件」之间的距离变成工程方法
这是 ArkUILab「横切总结」系列的第四篇,讲一个很少被写进教程、却决定自定义动效组件成败的环节:验收。一个翻书组件「代码写完」和「真机上满意」之间,隔着几十轮「感觉不对→改一个数→再跑」。没有方法的话,这个过程是这样的:改完靠感觉描述(「好像卡了」「翻得有点假」),复现靠运气,结论靠记忆。E017 Coverflow 的真机笔记里有一句话浓缩了全部风险:
2026-08-18 11:25:54
236
原创 HarmonyOS 鸿蒙 动效驱动选型 —— animateTo、Animator、DisplaySync 与定时器的四条通道
这是 ArkUILab「横切总结」系列的第三篇。前两篇讲组件的内部与外交,这一篇回答一个每个动效组件动手前都要面对的问题:在 ArkUI 上让一个东西动起来,至少有四条通道:animateTo 隐式属性动画、createAnimator 显式进度、DisplaySync 帧时钟、setInterval 定时器。选哪条?
2026-08-18 11:23:40
225
原创 HarmonyOS 鸿蒙 HdsNavigation 标题栏框架实战 —— 把 Header 当「系统托管的页面控制面」,而不是手写工具条
做一个「生产力应用」的首页,最容易犯的错是什么?手写一个顶部栏。标题、搜索框、消息红点、返回按钮、模糊背景……每一样看起来都很简单,拼起来就是一场维护灾难:滚动联动自己算、毛玻璃自己糊、深色模式自己适配、状态栏高度自己量。
2026-08-18 11:17:35
279
原创 HarmonyOS 鸿蒙 自定义组件的对外接口范式 —— Controller 引用附加与 epoch 资源重绑
这是 ArkUILab「横切总结」系列的第二篇。第一篇《自定义 Canvas 动效的分层范式》讲的是组件内部怎么分层(Core / Models / Painter / Component);
2026-08-18 11:15:28
314
原创 HarmonyOS 鸿蒙 Subject Sticker 主体抠图贴纸实战 —— AI 分割、像素白边与五轮真机排雷
拍一张照,把主体抠出来,加一圈白边,变成贴纸」——这个在 iMessage/微信里烂大街的能力,在鸿蒙上做一遍,会把你按在地上摩擦五轮。
2026-08-18 11:06:32
470
原创 HarmonyOS 鸿蒙 CollectibleBookshelf 原生 3D 书架实战 —— 不用 WebGL,一个 rotateY 逼出来的投影布局法
Web 上有一类很出效果的「3D 手风琴书架」:一排书立在架子上,点一本,封面从书脊上旋出来面向你,邻书向两边避让——全靠 CSS transform: rotateY + perspective 实现。想在鸿蒙上复现它,直觉路线有三条:套 WebView(重)、预制图片序列(假)、上 WebGL/XComponent(杀鸡用牛刀)。
2026-08-18 11:03:32
330
原创 HarmonyOS 鸿蒙 BookFlip 翻书引擎实战 —— 从 drawPixelMapMesh 静默失效到可展弯曲几何
「翻书」是阅读类应用最经典的动效之一。它看起来简单,实际上是一条完整的图形学链路:把一页纸在 3D 空间里弯起来,再投影到 2D 屏幕。很多鸿蒙实现会退而求其次,用两个半页做 rotate 假立体——纸是硬的、没有卷曲、背面镜像还经常出错。
2026-08-18 11:01:42
374
原创 HarmonyOS 鸿蒙 ArkUI 保留属性名踩坑实录 —— 那些「看起来能命名、一编译就报错」的 @Prop
本文是 ArkUILab「横切总结」系列的收官篇,也是最短的一篇。它记录了这个项目里同一个坑被反复踩的现实——不是偶然踩一次,而是几乎每做一个组件就踩一次,最后不得不沉淀成一条命名纪律。文章会列出「哪些字是高危保留名」,给出「为什么它们冲突」的机制,以及一套「再也不踩」的命名习惯。
2026-08-18 10:58:52
335
原创 HarmonyOS 鸿蒙 从 Flutter/Web 移植到 ArkUI 的方法论 —— 保留契约、替换平台、允许重构
鸿蒙开发者最常遇到的一件事,是「老板说:把那个 Flutter/Web 上很火的组件,搬到鸿蒙来」。直接逐行照抄,几乎必然翻车——不是数学错了,而是 平台的基础设施差异(手势、渲染绑定、帧动画、CSS 能力、单位)会导致「逻辑对、但 UI 不动」或「效果像、但卡死」。
2026-08-13 11:33:47
22
原创 HarmonyOS 鸿蒙 DisplaySync 高刷绘制最佳实践 —— 按需启停、离屏停表与帧时间治理
做鸿蒙自定义 Canvas 动效,最容易踩的坑不是「画不出来」,而是「画起来了但停不下来」——组件滚出屏幕还在逐帧画、页面返回了 timer 还在跑、后台恢复一瞬间动画「瞬移」一大圈、静止的动画还在空转耗电。这些问题有一个共同的名字:逐帧时钟治理。
2026-08-13 11:31:50
132
原创 HarmonyOS 鸿蒙 自定义 Canvas 动效的分层范式 —— Core / Models / Painter / Component 四层解耦与单测
写了十来个鸿蒙自定义动效组件之后(GrokBot、ThinkingOrbs、FlowAvatar、Coverflow、GradientSpin、BorderBeam、MetalFx……),回头一看,它们虽然长得完全不一样——有的是表情头像、有的是状态球、有的是 3D 轮播、有的是边框流光——但内部结构惊人地一致:都拆成了 Core / Models / Painter / Component 四层,几何与物理全部做成纯函数,再用 @ohos/hypium 单测锁定。这不是巧合,而是一套可复用的分层范式。
2026-08-13 11:30:02
138
原创 HarmonyOS 鸿蒙 Coverflow 3D 轮播实战 —— 「数值对、UI 不动」的渲染绑定血泪史
本文基于 ArkUILab 项目 E017「Coverflow Carousel(路线 B)」 实验,完整记录从 Flutter coverflow_carousel 移植到 ArkUI 的过程,重点讲七个 ArkUI 特有的坑:「数值对、UI 不动」的渲染绑定陷阱(ForEach key 稳定 ≠ transform 会重绑)、Controller 禁止 @Prop(深拷贝导致 attach 失效)、连续手势区不能放进父竖向 Scroll、createAnimator 而非 setInterval、固定尺
2026-08-13 11:24:56
146
原创 HarmonyOS 鸿蒙 FlowAvatar 确定性渐变头像实战 —— seed 生成身份、连续相位与接缝修复
很多产品用「首字母 + 随机色块」当默认头像,但不同用户可能撞色、且没有「这个头像就是这个人」的确定性。flow_avatar(Flutter)给出了一套更优雅的方案:用一个字符串 seed(如邮箱、用户名)生成一个稳定、可复现、会流动的渐变头像——同一个 seed 永远得到同一个身份,换 baseColor 只改变配色、不改变形状。
2026-08-13 11:22:18
285
原创 HarmonyOS 鸿蒙 Thinking Orbs AI 状态球实战 —— 六态数学、对象池与共享时间轴
AI 对话产品里,几乎人人都有一个「思考中 / 搜索中 / 生成中」的状态球。但大多数实现要么一个 GIF 糊弄过去,要么用一个旋转圈应付所有状态,毫无「状态感」。thinking-orbs 是 Web 上一个相当精致的方案——用六种完全不同的数学动效(轨道、经纬球、魔方、波纹、飘带、形态变换)表达六种 AI 会话状态,而且全程只用单色灰度 + 明暗深度,不做花哨配色。
2026-08-13 11:18:14
338
原创 HarmonyOS 鸿蒙 MetalFx 原生 GPU 金属特效实战 —— 打通 ArkUI + XComponent + OpenGL ES 3 渲染链路
很多鸿蒙开发者做「发光、金属、流光」这类效果时,第一反应是用 CanvasRenderingContext2D 一帧帧软画(soft fill)。但上一篇文章《BorderBeam 边框光束的还原与性能警示》已经用血泪验证过:用 CPU 侧多层 radial fill 去模拟 filter: blur,真机会卡死。那么问题来了——同样要 blur、要噪波、要流动的金属感,正确的路是什么?
2026-08-13 11:13:10
297
原创 HarmonyOS 鸿蒙 BorderBeam 边框光束实战 —— 一次「还原效果却跑不动」的性能警示
本文基于 ArkUILab 项目 E023「Border Beam 边框光束」 实验,诚实记录一次**「效果确实还原出来了,但真机非常卡」的完整工程过程**。这不是一篇「成功教程」,而是一篇踩坑预警:讲清楚 Web 那一套 mask-composite/@property/filter: blur 在 ArkUI 里为什么失效、Canvas 的手工等价手段(destination-out 掏孔、createConicGradient 旅行窗口、多层 radial soft fill 模拟 blur)是怎么铺
2026-08-13 11:10:53
297
原创 鸿蒙HarmonyOS GrokBot 渲染引擎实战 —— 投影几何、弹簧物理与 DisplaySync 高刷绘制
本文是 GrokBot 系列第二篇,聚焦渲染层,覆盖六大干货:viewBox 到 Canvas 的坐标映射(DPR 无关的统一缩放)、躯干圆角的 CSS border-radius 语法解析(含椭圆角与比例 clamp)、球面投影 grokBotProjectEye(经度/深度/透视的全过程)、弹簧 GrokBotSpring(半隐式欧拉 + 固定步长子步进)、blink / spin 的缓动节奏、DisplaySync 的生命周期管理(start/stop/teardown 与可见性联动)。文中代码均通过
2026-08-13 10:54:12
351
原创 鸿蒙HarmonyOS GrokBot 表情头像实战 —— 从 SVG 到 ArkUI 的零依赖 Canvas 数字人组件
本文是 GrokBot 系列的第一篇,重点讲架构与数据层:为什么要拆成「组件 / 核心 / 绘制 / 模型 / 数据」五层、25×2×48 眼睛点数据是怎么来的、表情与状态如何解耦、@Prop + @Watch 如何驱动数据流、以及 GrokBotController 的「一比一控制」设计约束。文中代码均通过 HAP 构建验证,可直接作为鸿蒙数字人 / 表情头像组件的架构参考基线。
2026-08-13 10:50:12
333
原创 HarmonyOS 手势与 animator 实战 —— 捏出跟手又有弹性的翻页物理
文章覆盖八块干货:翻车现场与根因、翻页状态机与 page-map 模型、为什么不用 ease 而自己积分弹簧、@ohos.animator 的正确接法、跟手封顶与「顶住再松」、commit 决策与速度前瞻、边界回弹与快速连翻、两个 ArkUI 状态传递的致命 gotcha。文末附调参清单和常见错误清单。
2026-08-09 10:47:17
448
原创 HarmonyOS 自定义绘制实战 —— 用 ArkGraphics2D 画一个会卷曲翻动的页面网格
文章覆盖七块干货:为什么要上顶点网格、把网格顶点送进 3D 空间、针孔投影到画布、用差分法线打出真实光影、让卷曲的轮廓对齐平面圆角、纹理怎么贴到变形的网格上、一次 drawVertices 的性能纪律。文末附可直接当 Code Review Checklist 的常见错误清单。
2026-08-09 10:44:52
459
原创 HarmonyOS 阔折叠响应式适配实战 —— 别识别机型,去测容器
Pura X Max 这类「阔折叠」来了:外屏比普通直板机更宽更短,内屏一展开就进入大屏布局范围。很多团队的第一反应是「加一个 if PuraXMax 分支」「读取物理屏幕尺寸」「监听 orientation」。这些做法在第一台设备上能跑,但横屏、分屏、自由窗口、未来新形态一起涌来时就会全面崩溃。
2026-07-30 09:06:56
437
原创 AppGallery 物料包与提交审核全流程
代码 READY 不等于能上架——还差一个物料包:名称、简介、详细描述、图标、截图、分类,以及 AGC 后台一堆鸿蒙特有的表单项。物料最大的陷阱是"写着写着就夸大了",审核发现描述与实现不符直接打回。本篇讲我们的物料包工程:归档结构、与实现逐条对齐的 listing 定稿(附真实漂移修正表)、鸿蒙分层图标与截图规格、AGC 后台的关键表单项,以及缺项如何诚实记录而不是假装完成。
2026-07-25 09:51:37
377
原创 关于页、用户协议与隐私政策:个人开发者最小合规落地
个人开发者上架,合规是最容易"下周再说"然后被审核打回的部分。本篇给一份最小可行清单:关于页七要素、协议全文放 rawfile 应用内展示、版本号与 app.json5 同源(门禁比对)、麦克风用途文案与 module.json5 权限声明逐字复用、数据清除入口——以及每条背后的鸿蒙机制与审核逻辑。
2026-07-25 09:49:25
369
原创 签名、版本元数据与 Release 卫生检查
上架前的最后一次构建,最怕的不是功能 bug,是"卫生"问题:vendor 还是 example 占位、versionCode 忘了递增、Debug 夹具混进 Release 包、拿上周的旧 HAP 冒充新构建、真机验收的和上架的根本不是同一种产物。本篇讲发布卫生的完整清单:鸿蒙工程里元数据到底住在哪、AGC 发布证书与签名配置、静态门禁逐项核对、干净重建原则,和"验收构建必须有 SHA-256"的取证习惯。
2026-07-25 09:47:52
354
原创 Mutation 测试:给测试做“测试“
测试全绿,能证明什么?只能证明"代码现在长这样,测试没意见"——至于代码真坏了测试抓不抓得住,全绿一个字都没说。变异测试回答这个问题:故意把代码改坏(maxLen 6→5、删掉字典一组词),看测试/门禁是否如期变红。本篇讲我们怎么用 sed + 备份恢复手写一套务实的 mutation 流程、在 Hvigor + Hypium 这套鸿蒙工具链上跑变异要绕开的三个坑,以及"N 条变异全部被杀"如何成为验收硬指标。
2026-07-24 22:13:25
136
原创 用 Shell 门禁脚本守住架构边界
单元测试管"行为对不对",但"页面 import 了 ASR Kit""类型层引用了网络库"这类结构腐化,测试一个都抓不到。本篇讲我们的第二道防线:check/test 成对的 Shell 门禁——ripgrep + awk 扫描 import 依赖方向,每条规则配一个夹具树自测(干净树必须过、违规树必须挂),让架构红线成为每次验收自动执行的硬检查。
2026-07-24 19:50:04
203
原创 Hypium 单元测试实战:为什么 exit code 0 不代表测试通过
鸿蒙官方测试框架 Hypium 配 Hvigor 跑测试,有一个足以毁掉整个 CI 的坑:断言失败时构建进程照样返回 0。本篇讲我们的测试基建:为什么唯一权威是 test_result.txt、418 条用例怎么按模块组织、可注入依赖如何让纯逻辑脱离设备测试,以及"构建成功 ≠ 测试执行 ≠ runner 通过"的三层区分。
2026-07-24 19:48:32
232
原创 API Key 安全:仅内存 + Asset Store / 沙箱 vault 双通道持久化
让用户填自己的 API Key,第一道考题是它存在哪。Preferences 明文是底线事故,只存内存又意味着每次冷启动重输。本篇讲 ADR-005a 的双通道方案:运行时 Key 只在私有字段,持久化走系统 Asset Store 优先、应用沙箱 vault 兜底,save 任一成功即算成功、load/clear 双通道覆盖——以及"接口不返回秘密"这条最硬的纪律。
2026-07-24 19:46:50
149
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅