Files
youle_app_ohos/docs/设计文档/Plan/01_任务分解WBS.md
T
lanterngamescnandClaude Opus 4.8 74b302e131 计划进度:M1 完成、R-18 关闭
- 01_WBS:M1 ☑ 完成(8 任务全 ☑,V1 通过、桥核心覆盖 87.3%)
- 03_风险登记册:R-18 关闭(探明 hvigorw 本地单测命令,封装 scripts/test.sh)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 12:27:18 +08:00

21 KiB
Raw Blame History

01 · 任务分解(WBS

全量任务清单。每个任务含:目标 / 产出物 / 依赖 / 验收 / 估时 / 角色。 角色缩写:桥=桥/容器、台=平台/领域、能=能力工程师、Q=QA。估时单位:人日(pd)。 验收一律以《契约规范》对应条目为准;通用 DoD 见 00_总体规划 §7


进度总览

状态图例:☐ 未开始 / ◐ 进行中 / ☑ 完成 / ⚠ 受阻。每完成任务或里程碑及时更新(CLAUDE.md 工作约定)。最后更新:2026-06-25。

里程碑 状态 说明
M0 脚手架 + 契约类型 ☑ 完成 7 任务全完成并真机/模拟器验证
M1 桥引擎 ☑ 完成 8 任务全完成;V1 真机通过、桥核心单测覆盖 87.3%
M2 容器 + 启动 + 资源 ☐ 未开始 含 V2 阻塞性验证
M3 本期能力 ☐ 未开始
M4 通用网页容器 ☐ 未开始
M5 性能与加固 ☐ 未开始
M6 暂缓能力集成 ☐ 未开始 按需

M0 任务明细(全部 ☑)

  • ☑ T-M0-01 多模块工程(entry + 6 HAR
  • ☑ T-M0-02 模块依赖与导出(单向向下、无环)
  • ☑ T-M0-03 构建/签名/CI(签名已配 tsgames.p12CI = scripts/ci.sh
  • ☑ T-M0-04 契约类型 SSOT45 入站 + 21 出站 + 17 DTO + Result/Errors
  • ☑ T-M0-05 公共设施 commonLogger/Tracer/EventBus/DI/ErrorCenter
  • ☑ T-M0-06 引入桥 JSlzyzsd 原文件 + BridgeJsLoader
  • ☑ T-M0-07 App 入口与路由壳(Navigation;真机验证启动→路由→回传→横屏)

M1 任务明细

  • ☑ T-M1-01 IWebController + WebviewControllerAdapter(emitter UI 线程守卫) + FakeWebController
  • ☑ T-M1-02 Message + MessageCodeclzyzsd 二次转义逐字复刻 + 单引号转义修复)
  • ☑ T-M1-03 HandlerRegistry + 空实现 DefaultHandler 兜底
  • ☑ T-M1-04 BridgeController(对能力零感知、纯逻辑可测)
  • ☑ T-M1-05 桥 JS 注入(onPageEnd
  • ☑ T-M1-06 最小回显 H5 + 容器接桥(BridgeGameContainer 挂 Web
  • T-M1-07 V1 阻塞性验证真机通过yy:// 被 onLoadIntercept 捕获、_fetchQueue 经 yy://return 回传、双向回执、含 \"\\/'中文 特殊字符转义往返一致。技术路线成立。
  • ☑ T-M1-08 桥引擎单测:15 用例全通过,桥核心覆盖率 87.3%(≥80%); 运行方式 = scripts/test.shDevEco hvigorw 本地单测,已解决 R-18

M0 期间确立的项目决策(超出原计划的补充)

  • 包名 com.lobby.daoqi;横屏项目,module.json5auto_rotation_landscape(横屏两朝向跟随旋转、不进竖屏,H5 显式方向控制保留)。
  • ArkTS 验证用 devecocli build(其 CompileArkTS 为权威编译器);deveco-mcp 的 LSP check 因 70s 索引 / 20s 超时不可用。
  • devecoclitest 子命令,单测运行方式待 M1 解决。

M0 · 工程脚手架 + 契约类型

ID 目标 产出物 依赖 验收 估时 角色
T-M0-01 创建多模块工程 devecocli create 生成 entry + 6 HARfeature_bridge/feature_capabilities/domain_resource/platform/contracts/common 工程可 devecocli builddebug)通过 1
T-M0-02 模块依赖与导出 oh-package.json5 依赖关系(单向向下);index.ets 导出 T-M0-01 跨模块 import 无环、可编译 0.5
T-M0-03 构建/签名/CI build-profile.json5debug/release product);调试签名;CI 脚本(build+单测) T-M0-01 PR 触发 CI 通过 1
T-M0-04 契约类型(SSOT contracts HARenum Handlers(全部入站/出站 handler 名常量,含 finsh/getcameraaAddress/backgameData- 等原样拼写);DTO interfacesharetypeBean/MaplocationInfo/phoneInfoBean/savephotoURLBean/videoinfobean/Othervideoinfo/GamePay/sharelogin/sharesuccess);Result<T>/Errors;每 handler 的 `payloadType:'raw' 'json'` 标注 T-M0-02 全量对照《契约规范》§8/§9/§12,零缺漏;编译通过 1.5
T-M0-05 公共设施 common HARLogger(分级)/BridgeTracer(traceId)/EventBus(emitter 封装)/DIContainer/ErrorCenter(异常收敛+弹窗/静默/上报策略)/Result<T> 配套 T-M0-02 单测覆盖;可被各模块引用(框架 §10) 1.5
T-M0-06 引入桥 JS 把 lzyzsd WebViewJavascriptBridge.js 原文件放入 feature_bridge/assets,建读取/内联机制 T-M0-01 文件就位、可被注入流程读取 0.5
T-M0-07 App 入口与路由壳 EntryAbilityStage 模型生命周期,含 onForeground/onBackground 钩子接口)+ Navigation/路由骨架(Splash↔BridgeGameContainer↔GenericWebContainer 跳转与回传通道)+ SplashPage 壳(框架 §4 T-M0-01 空壳可启动、可路由跳转;前后台钩子可触发 1

M1 · 桥引擎(最高优先

ID 目标 产出物 依赖 验收 估时 角色
T-M1-01 Web 控制器抽象 IWebController 接口 + WebviewControllerAdapter(包 webview.WebviewController+ FakeWebController(测试用) T-M0-01 桥不直接依赖系统类;Fake 可记录脚本/模拟回执 1
T-M1-02 消息编解码 Message5 字段)+ MessageCodectoJson/toArray/escape与 lzyzsd 完全一致的二次转义\" T-M0-04 单测:与 Android 端样例字节级一致 1
T-M1-03 Handler 注册表 HandlerRegistryput/get/default+ DefaultHandler(空实现兜底) T-M0-04 未注册名落默认 handler 不抛错(框架 §5.2/§6.5 0.5
T-M1-04 桥控制器 BridgeControlleronLoadIntercept/callHandler/registerHandler/onPageEnd/flushMessageQueue/handleReturnData/dispatch/queue_fetchQueueyy://return/ 回传(非 runJavaScript 返回值);UI 线程守卫(§5.5 T-M1-01/02/03 单测(FakeWebController):模拟 H5 callHandler→handler 分发、原生 callHandler→下发、回执路由、启动队列补发 2.5
T-M1-05 桥 JS 注入 onPageEndrunJavaScript(BRIDGE_JS) + 启动消息补发 T-M1-04/T-M0-06 页面就绪后 window.WebViewJavascriptBridge 可用 0.5
T-M1-06 最小回显 H5 测试用 H5registerHandler('echo')callHandler('getTime')+ 一个挂桥的最小测试页 T-M1-04 真机:H5↔原生双向回显成功 1 桥/Q
T-M1-07 ⚠ 阻塞性验证 V1 真机验证 yy:// 的 iframe 导航被 onLoadIntercept 捕获;产出结论报告 T-M1-06 V1 通过;若不通过,按 00 §5 回退方案并更新设计 1 桥/技术负责人
T-M1-08 桥引擎单测 BridgeController/MessageCodec/HandlerRegistry 单测套件 T-M1-04 覆盖率 ≥80%(框架 §13 1.5 桥/Q

M1 出口T-M1-06 跑通 + T-M1-07V1)通过 + T-M1-08 达标。


M2 · 容器 + 启动 + 资源(轨道 A 容器 / 轨道 B 平台领域)

平台层(轨道 B,可与 M1 并行起步)

ID 目标 产出物 依赖 验收 估时 角色
T-M2-01 存储/文件 KvStore(@ohos.data.preferences)、FileSystem(@ohos.file.fs) T-M0-01 读写 urlpath/upurlpath;文件增删查 1
T-M2-02 网络/下载 HttpClient(@ohos.net.http 或 rcp)、Downloader(断点可选、进度回调) T-M0-01 GET 禁缓存;大文件下载带进度 1.5
T-M2-03 解压/并发 Unzipper(@ohos.zlib decompressFile)、TaskScheduler(TaskPool/Worker) 仅传 Sendable + emitter 进度(§9.1 T-M0-01 zip 解压成功;解压在子线程、UI 不阻塞 1.5
T-M2-04 权限/上传服务 PermissionGuard(存储/电话/定位/相机/麦克风 用时申请);LocalUploadServersocket/NAPI 本机端口服务,截图上传用) T-M0-01 权限流程合规;本机端口可访问 1.5

配置/资源/启动(轨道 B

ID 目标 产出物 依赖 验收 估时 角色
T-M2-05 本地+远程配置 ConfigManager:内置 rawfile/app_config.json(§4.2 全键);远程配置请求(http://gameconfig 去-换/ .txt?a=ts,禁缓存);showmessage 阻断、<30 错误文案 T-M2-02 配置键齐全;远程 JSON 正确解析、阻断逻辑生效 2
T-M2-06 分层覆盖 VersionResolveragentlist/gamelist 两棵树 + 二级 url 二次请求 + agent→channel→market→game 后层覆盖(纯函数) T-M2-05 单测:多层样例覆盖结果正确(《契约规范》§4.4) 2
T-M2-07 资源管理 ResourceManager:路径规范、内置包拷贝+解压、version.xml 解析(@ohos.xml)、远程 zip 下载/删旧/解压、版本比较 T-M2-03/06 首启拷贝、版本更新下载解压到正确目录(§5) 2
T-M2-08 ⚠ 阻塞性验证 V2 真机验证 file:// 大厅页 XHR/fetch 取本地资源;结论报告 T-M2-07 + T-M2-10 V2 通过;否则启用 §7.3 自定义协议方案并更新设计 1 台/桥
T-M2-09 app_data 注入 AppDataInjector:加载前写 <urlpath>/gamehall/app_data.js(§6 全局变量同名同义) T-M2-07 H5 加载时能读到 app_* 变量;时序在加载前(§7.1 铁律) 1
T-M2-11 启动状态机 StartupOrchestratorINIT→…→ENTER_HALL;可重试/降级/阻断 T-M2-05/07/09 真机按序走通;失败降级本地缓存 1.5

容器(轨道 A

ID 目标 产出物 依赖 验收 估时 角色
T-M2-13 能力插件框架骨架 feature_capabilitiesCapabilityProvider 接口、CapabilityContext、注册表对接桥、组装根 buildCapabilities()/AppModuleDI 装配)、Provider 样板(框架 §6.1/§6.2 T-M1-04、T-M0-05 一个示例 Provider 可注册并被桥分发;组装根可批量装配 1
T-M2-10 大厅/子游戏容器 BridgeGameContainerWeb + 属性(JS/DOM/file/mixed/cache/geo/zoom+ 生命周期接桥(onControllerAttached 注册能力、onLoadIntercept 接桥、onPageEnd 注桥)+ 首次进度 100% 推 appservice/setPostUrl + SwitchOverGameData 同容器 loadUrl 切换 + aboutToDisappear 清理 T-M1-08、T-M2-13、T-M0-07 入口 URL 规则正确(weburl 空→file://,非空→http://,带 ?Launchtype=0 2
T-M2-12 集成联调 大厅 H5 真机加载 + 进子游戏 T-M2-08/10/11 现有大厅 index.html 正常显示、可进子游戏 1 桥/Q

M2 出口T-M2-12 跑通 + T-M2-08V2)通过T-M2-13 能力插件框架骨架是 M3 全部 Provider 与 T-M2-10 容器注册能力的前置依赖,须先于铺开能力完成。


M3 · 本期能力(轨道 C,各 Provider 高度并行)

前置依赖M3 全部 Provider 均依赖 T-M2-13(能力插件框架骨架)+ T-M2-10(容器可加载)+ T-M0-04(契约类型)。这三者就绪后,各 Provider 之间互不依赖、可多人并行。 通用验收(每个 Provider):入站 handler 名/参数解析、出站 handler 名/data 结构/时机逐条对照《契约规范》§8/§9/§12;异步回传经 UI 线程守卫;真机录用例。

ID Provider 入站 handler 出站 handler 关键实现/SDK 估时 角色
T-M3-01 AppSystemProvider orientationbrowserfinshopenApplyDownloadpathnotification(空) 屏幕方向、拉起浏览器、退出、按包名启动/下载兜底 1.5
T-M3-02 DeviceProvider getTimegetphonestategetbatterygetwifiLevelgetcompareCodegetphoneInfogetmarketnamegetothernamegetOther getBatterygetwifiLevelphonestate deviceInfo/telephony/batteryInfo/wifiManager;裸串 vs JSON 严格区分 2.5
T-M3-03 NetworkProvider getnetwork getnetwork(广播变化) NetworkKit 监听 1
T-M3-04 VibrateProvider vibratorrepeatvibratorcanclevibrator @ohos.vibrator 0.5
T-M3-05 ClipboardProvider gameCopytextgamepastetext —(gamepastetext 同步返回串) @ohos.pasteboard 0.5
T-M3-06 NavProvider OpenurlTitleDataSwitchOverGameDatagetGameinstall(同步 0/1)、backgameData getWebdata 打开通用容器(M4)、同容器切换、目录判断 1.5 能/桥
T-M3-07 PhotoProvider getphoto getphoto(下载完成数组) 批量下载图片到本地 + Downloader 1.5
T-M3-08 ShakeProvider startshakeSwitchShakestopshake shakeEnd(空串,触发后~1s) @ohos.sensor 加速度 + 节流;声音可选 1.5
T-M3-09 LocationProvider startlocation(1连续/否单次)、getlocationinfo(同步) getlocationinfo(MaplocationInfo/错误码) geoLocationManager隐私合规初始化;错误码 0/-1/-2 2
T-M3-10 AudioProvider prepareaudio(录音)、mediaTypeAudiosrcIsloopvoicePlaying getaudiourl({audiourl,time})、gameui_play_voicegameui_stop_voice AVPlayer/SoundPool;录音上传(七牛等)wav 路径拼接 3
T-M3-11 ScanProvider opensaoma getsaomaData Scan Kit 1
T-M3-12 CameraProvider opencamera getcameraaAddress Camera Picker 1
T-M3-13 ShareProvider friendsSharetypeUrlToptitleDescript sharesuccess(仅微信) 微信分享 SDKtype==2 截图:runJavaScript(canvas.toDataURL) + LocalUploadServer 2.5
T-M3-14 LoginProvider accreditlogin sharelogin(用户资料) 微信登录;建议 code 模式(密钥下沉) 2
T-M3-15 RoomStubProvider/PayStubProvider createRoom/exitRoom/getVideoinfo/DragViewvideoIsshowpaybrowser/getGameplay —(不触发) 占位桩:空实现 + 日志(§6.5 0.5
T-M3-16 前后台联动 appservice('1'/'2') UIAbility.onForeground/onBackground → callHandler 0.5
T-M3-17 契约一致性回归 全 44 入站 + 全出站真机逐条核对 对照《契约规范》§8/§9,出回归报告 2 Q

M3 出口:本期能力真机逐条通过;视频房/支付桩被调用不报错不卡死T-M3-17 含此项)。


M4 · 通用网页容器(轨道 A,可与 M3 尾段并行)

ID 目标 产出物 依赖 验收 估时 角色
T-M4-01 通用容器 GenericWebContainerWeb + cacheMode(有网 Default/无网 Only) + javaScriptProxy 注入 settings T-M2-10 打开任意 url、属性正确 1.5
T-M4-02 settings 注入 + 直调 SettingsProxy 6 方法(backgameData/loadurl/browser/finishweb/isexitdialogeshow/isbackfinishweb+ 3 个 runJavaScript 直调(getWebdata/gamebackkeydown/backgameData T-M4-01 逐一对照《契约规范》§11.3 1.5
T-M4-03 回传与返回键 101 结果经 router/emitter 回上层 → 上层 callHandler('getWebdata');返回键逻辑(isbackfinishweb/isexitdialogeshow T-M4-02 活动页/收银台/客服打开、回传、返回正常 1

M5 · 性能与加固(轨道 D,部分贯穿 M3/M4)

ID 目标 产出物 依赖 验收 估时 角色
T-M5-01 Web 保活/预热 NodeController+BuilderNode 离屏预创建/保活;启动期预热空 Web T-M2-10 子游戏切换 <300ms、无白屏 2
T-M5-02 切换与桥重绑 子游戏切换走 loadUrl 复用;切换后桥/handler 重绑时序正确 T-M5-01 切换后桥功能正常 1
T-M5-03 高频节流/批处理 定位/电量等高频 handler 节流;出站批处理 T-M3-* 跨引擎调用次数下降、无卡顿 1
T-M5-04 崩溃兜底/内存 onRenderExited 重载;aboutToDisappear 彻底清理 T-M2-10 渲染子进程崩溃可自恢复 1
T-M5-05 安全加固 WebDebug 按 isDebug 守卫;密钥下沉服务端;明文 HTTP 域名白名单;file 跨域最小授权;自定义 scheme 注册(module.json5);日志脱敏 各能力就绪 安全审查清单(附录 B)全过 2 桥/台
T-M5-06 可观测 BridgeTracer 全链路 traceId;接 APM/Crash T-M0-05 能还原一条桥消息全链路 1
T-M5-07 冷启动优化 StartupOrchestrator 无依赖步骤并行化 T-M2-11 冷启动到首帧达标(<2s 基线) 1
T-M5-08 包体/渠道裁剪(可选) 能力 Provider 按渠道用 HSP 动态特性裁剪;包体瘦身(框架 §9 包体) T-M3-* 不同渠道包仅含所需能力,包体下降 1 桥/台

M6 · 暂缓能力集成(按需,可延后)

ID 目标 产出物 依赖 验收 估时 角色
T-M6-01 视频房真实 RoomProvider(声网 RTC HarmonyOS SDK)替换桩 M3 完成 createRoom/exitRoom/getVideoinfo/DragViewvideoIsshow + 出站 getVideoinfo 真打通;H5 零改动 视 SDK
T-M6-02 支付真实 PayProvider(浏览器收银台/或 App 内支付)替换桩;如启用 App 内支付则补 PayuserPaytypePaystate M3 完成 支付闭环;H5 零改动 视 SDK
T-M6-03 补齐项(可选) 抖音/快手登录(code)、主动截图 getCanvasBase64、QQ/抖音分享回传统一 按需 对照框架 §6.4 视需求

任务总数与估时汇总

里程碑 任务数 估时(pd)
M0 7 7
M1 8 9
M2 13 19
M3 17 24.5
M4 3 4
M5 8 10
合计(M0M5) 56 ≈73.5 pd(含测试/缓冲)
M6 3 视集成

估时为"工作量"非"日历"。3 人并行、关键路径串行下,日历周期约 5–7 周(见 00 §1)。


附:框架设计 → 计划覆盖矩阵(完整性自检)

逐条证明《框架设计与开发指南》每个章节都有计划任务承接,无遗漏

框架章节 计划任务 状态
§1 设计原则 贯穿 DoD00 §7)与代码规范(00 §6 ✓ 原则类,非任务
§2 能力映射总表 各能力/桥任务的实现依据(引用表) ✓ 参考
§3 分层架构 / §4 工程结构 T-M0-01/02(建 entry+6 HAR)、T-M0-07EntryAbility/路由/Splash
§5.15.2 桥协议/控制器 T-M1-02/03/04/05
§5.3 同步/异步 T-M1-04 + 各 Provider
§5.4 裸串vsJSON T-M0-04payloadType
§5.5 线程模型 T-M1-04UI 守卫)
§5.6 IWebController T-M1-01
§6.1/6.2 插件框架/组装根/DI T-M2-13(能力插件框架骨架) ✓ 已补
§6.3 Provider 样板/截图分享 T-M3-09(样板)、T-M3-13(分享截图)
§6.4 补齐项 T-M6-03
§6.5 占位桩 T-M3-15
§7.1 大厅/子游戏容器 T-M2-10
§7.2 通用网页容器 T-M4-01/02/03
§7.3 file:// 跨域 T-M2-08V2 阻塞验证)
§8.1 启动状态机 T-M2-11
§8.2 ConfigManager T-M2-05
§8.2 分层覆盖 T-M2-06VersionResolver
§8.3 ResourceManager T-M2-07
§8.4 AppDataInjector T-M2-09
§9 性能(保活/并发/批处理/就绪渲染/内存/冷启动) T-M5-01/02/03/04/07、T-M2-03
§9 包体/HSP 裁剪 T-M5-08 ✓ 已补
§9.1 TaskPool Sendable T-M2-03
§10 契约类型 SSOT T-M0-04
§10 日志/追踪 T-M0-05Tracer)、T-M5-06
§10 ErrorCenter T-M0-05(已含 ErrorCenter ✓ 已补
§10 事件总线/DI T-M0-05
§10 权限 T-M2-04PermissionGuard
§10 安全 T-M5-05
§10 可测试 T-M1-01/08 + 各单测
§11 可追溯矩阵 02 测试与验收 §4 契约核对清单 + 本矩阵
§12 路线图 M0M6 本 WBS 全部里程碑
§13 验收标准 02 测试与验收计划
附录 A ArkTS/ArkUI 适配 贯穿 DoD00 §7 已引用 §5.5/§9.1+ T-M0-07/T-M2-10 落地
附录 B 生产加固合规 T-M5-05(逐项)+ 02 §5 M5 Gate

结论:框架设计指南全部章节均有计划任务承接,覆盖完整。本次自检新增 T-M0-07T-M2-13T-M5-08T-M0-05 的 ErrorCenter,补齐了能力插件框架骨架、入口/路由壳、ErrorCenter、包体裁剪四处缺口。