产出一篇结构化分析文档,追踪行为差异在 RN/RNOH 调用栈中的传递路径,对比三端处理方式,仅在确有依据时提出可落地的对齐方案。核心价值是对比视角与判断——并非所有平台差异都是 bug。

按需加载:三种输出结构模板(Bug / 平台特性 / API 限制)与 Mermaid 图表规范 → references/output-templates.md;分析细则、方案设计原则、常见误区 → references/analysis-guide.md

核心原则:先分类差异性质

类别定义是否修复
RNOH BugRNOH 适配层未实现 RN 文档约定的跨平台契约(默认值映射缺失、回调链断裂)✅ 修复适配层
平台特性各平台原生 API / UI 惯例天然不同(如 iOS blur delegate vs ArkUI 回车键不 blur)⚠️ 仅当对齐显著提升 DX 且不违背原生惯例
原生 API 限制@ohos API 缺少 iOS/Android 等价能力(如 WebSocket open 无 protocol 字段)✅ 适配层做 workaround

判定:RN JS 文档明确定义了跨平台行为、而 Harmony 因 RNOH 遗漏偏离约定 → Bug;RN 把行为留作平台相关、或差异源于根本不同的原生交互模型 → 平台特性。判定流程图见 references/output-templates.md。

环境准备(强制,未完成不得继续)

必须先向用户询问项目路径,不要假设或自动搜索工作区路径:

信息用途无本地路径时
RNOH 项目路径ohos_react_native 本地源码用 https://atomgit.com/CPF-RN/ohos_react_native 在线读(webfetch blob/master/{path})
RN 项目路径react-native 本地源码用 https://github.com/facebook/react-native 在线读
输出目录分析文档保存位置再次询问,默认当前工作区根目录

源码阅读策略:两个路径都有 → 本地读(推荐);缺一个 → 缺的平台 webfetch 在线读;全缺 → 全在线。在线引用标注 [在线源码],webfetch 可能缺精确行号,用近似区间或章节标题代替。在线阅读也要读真实源码,不得猜测编造。

研究流程(不要直接动笔写文档)

  1. 定位行为入口:在可用代码库中搜索用户提到的 JS API / 组件 / TurboModule,找到 JS 调原生的入口(TurboModule spec 或组件 props 定义);
  2. 三端追踪调用链:JS prop/method → TurboModule bridge → 原生适配 → 平台原生 API。逐层阅读真实源码,聚焦各端产生该行为的机制;
  3. 判断差异性质:JS 层是否定义了预期行为?Harmony 偏离是 RNOH 未映射 RN 语义,还是 ArkUI 原生模型根本不同?"修复"是否违背 Harmony 原生 UX 惯例?
  4. 核验代码引用:每条引用必须指向实际读过的文件和行,找不到标 [待确认]——编造的引用比缺失引用更糟。

分析与分类

每条差异分析必须回答:What(差异是什么,JS 可观察行为)、Why(各端机制)、Where(file:line 精确定位)、分类(Bug / 特性 / API 限制)及分类依据(引用 RN 文档或原生惯例)。

RNOH 常见分叉模式(完整表见 references/analysis-guide.md):平台守卫缺失(Platform.OS === 'ios' 未检查 'harmony')→ Bug;适配层跳过默认值/枚举映射 → Bug;回调时序不一致 → 视 RN 契约是否规定顺序定为 Bug 或特性;原生交互模型差异 → 平台特性;@ohos API 缺能力 → API 限制。

何时提出修复

仅当同时满足:① RN JS 文档明确约定了跨平台契约且 Harmony 违反;② 偏离由 RNOH 遗漏导致(非 API 限制);③ 修复能改善 DX 且不破坏 Harmony 原生 UX。

不提修复:差异是合理平台特性 / 修复会覆盖 Harmony 原生交互模型 / RN 文档把行为留作平台相关——此时仅记录差异、解释成因与开发者影响,可建议 JS 层适配模式。

修复策略(适用时):上游 RN 代码补平台守卫加 'harmony';补充 RNOH 适配映射;绕过 API 限制(缓冲事件、重排回调、从零实现)。

平台对比要求

比较的是机制差异,不只是 API 名字——它解释差异为什么存在。每端覆盖:核心机制、回调/事件时序、与 RN 语义的映射、JS 侧影响、是否平台原生特性。

⚠️ 平台对比只比机制,不混入版本对比——RNOH 版本间差异属根因分析内容。

输出

MANDATORY - READ ENTIRE FILE:写文档前必须先完整阅读 references/output-templates.md(A/B/C 三种结构模板 + 判定流程图 + 图表规范)。

  • 结构按分类选择(A/B/C 模板见 references/output-templates.md);
  • Mermaid 图:调用链用 flowchart TB 标注差异落点;各平台时序图必须独立(每平台一张 sequenceDiagram,不合并三端);Bug 标 ❌、特性 ⚠️、正常 ✅,断裂路径用虚线;样式约定见 references/analysis-guide.md;
  • 保存到环境准备阶段收集的输出目录,文件名用描述性主题(如 TextInput_onEndEditing触发时机平台差异分析.md);
  • 正文 zh-CN,技术标识符/类名/API 名/代码引用保留英文。

常见误区

详见 references/analysis-guide.md。核心几条:不要把每个差异都判为 bug;不要把三端时序图合并成一张;不要把版本对比混入平台对比;不要只比 API 签名不比机制;不要跳过代码核验;不要提出不指定文件/行号/改动的空泛方案;不要对平台特性强推修复。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐