01_任务分解WBS:T-M3-13/14 标记完成;M3 进度更新为 10/17 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
26 KiB
01 · 任务分解(WBS)
全量任务清单。每个任务含:目标 / 产出物 / 依赖 / 验收 / 估时 / 角色。 角色缩写:桥=桥/容器、台=平台/领域、能=能力工程师、Q=QA。估时单位:人日(pd)。 验收一律以《契约规范》对应条目为准;通用 DoD 见 00_总体规划 §7。
进度总览
状态图例:☐ 未开始 / ◐ 进行中 / ☑ 完成 / ⚠ 受阻。每完成任务或里程碑及时更新(CLAUDE.md 工作约定)。最后更新:2026-06-25。
| 里程碑 | 状态 | 说明 |
|---|---|---|
| M0 脚手架 + 契约类型 | ☑ 完成 | 7 任务全完成并真机/模拟器验证 |
| M1 桥引擎 | ☑ 完成 | 8 任务全完成;V1 真机通过、桥核心单测覆盖 87.3% |
| M2 容器 + 启动 + 资源 | ☑ 完成 | 13 任务全完成;V2 真机通过(R-02 关闭)、VersionResolver 单测覆盖 81.8%;T-M2-12 机制已验证(真实远程大厅待服务端可用时终验) |
| M3 本期能力 | ◐ 进行中 | 批1~3 完成(10/17):占位桩/震动/剪贴板/系统/设备/网络/分享/登录(微信SDK);余 摇/定位/音频/扫码/相机/图片/导航/回归 |
| M4 通用网页容器 | ☐ 未开始 | — |
| M5 性能与加固 | ☐ 未开始 | — |
| M6 暂缓能力集成 | ☐ 未开始 | 按需 |
M0 任务明细(全部 ☑):
- ☑ T-M0-01 多模块工程(entry + 6 HAR)
- ☑ T-M0-02 模块依赖与导出(单向向下、无环)
- ☑ T-M0-03 构建/签名/CI(签名已配
tsgames.p12;CI =scripts/ci.sh) - ☑ T-M0-04 契约类型 SSOT(45 入站 + 21 出站 + 17 DTO + Result/Errors)
- ☑ T-M0-05 公共设施 common(Logger/Tracer/EventBus/DI/ErrorCenter)
- ☑ T-M0-06 引入桥 JS(lzyzsd 原文件 + BridgeJsLoader)
- ☑ T-M0-07 App 入口与路由壳(Navigation;真机验证启动→路由→回传→横屏)
M1 任务明细:
- ☑ T-M1-01 IWebController + WebviewControllerAdapter(emitter UI 线程守卫) + FakeWebController
- ☑ T-M1-02 Message + MessageCodec(lzyzsd 二次转义逐字复刻 + 单引号转义修复)
- ☑ 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.sh(DevEco hvigorw 本地单测,已解决 R-18)
M2 任务明细(全部 ☑):
- ☑ T-M2-01 平台存储/文件:KvStore(preferences)、FileSystem(fileIo 增删读写/列目录/拷贝内置 rawfile)
- ☑ T-M2-02 网络/下载:HttpClient(GET 禁缓存)、Downloader(http 流式写盘+进度)
- ☑ T-M2-03 解压:Unzipper(zlib.decompressFile)。偏差:下载/解压用原生异步 API 即满足"UI 不阻塞", 独立 TaskScheduler(TaskPool) 推迟到 M5 真有 CPU 密集任务(MD5)时再加,避免投机性死代码
- ☑ T-M2-04 权限/上传:PermissionGuard(用时申请,沙箱文件免存储权限)、LocalUploadServer(骨架,TCP 服务 M3 落地)
- ☑ T-M2-05 ConfigManager:本地 rawfile/app_config.json + 远程拉取/校验(<30 阻断)/二级 url + 决策
- ☑ T-M2-06 VersionResolver:纯函数两棵树后层覆盖;单测 8 用例全通过,覆盖率 81.8%(≥80%)
- ☑ T-M2-07 ResourceManager:路径规范、内置包拷贝解压、version.xml 解析、远程 zip 下载/删旧/解压、版本比较
- ☑ T-M2-09 AppDataInjector:加载前写 app_data.js(§6 全局变量同名同义)
- ☑ T-M2-11 StartupOrchestrator:INIT→…→ENTER_HALL 状态机,远程失败降级本地、showmessage 阻断
- ☑ T-M2-13 能力插件框架骨架:CapabilityProvider/Context/Registrar + 组装根 buildCapabilities() + 样板
- ☑ T-M2-10 BridgeGameContainer 完整化:Registrar 注册能力、首次 100% 推 appservice/setPostUrl、清理、入口 URL
- ☑ T-M2-08 V2 阻塞性验证真机通过:file:// fetch/XHR 首测被 CORS 拦截,用
setPathAllowingUniversalAccess放开资源根跨域(对 H5 透明)后复测 OK;R-02 关闭 - ☑ T-M2-12 集成联调:用内置测试大厅(gamehall_builtin.zip)端到端验证全链路(启动→资源→app_data→ file:// 加载→跨域 fetch→桥双向)真机通过。真实远程大厅 H5 需服务端/网络可用时做终验
M3 任务明细(进行中,8/17):
- ☑ T-M3-15 RoomStubProvider/PayStubProvider(§6.5 占位桩,全 void、不触发出站)
- ☑ T-M3-04 VibrateProvider(vibrator/repeatvibrator/canclevibrator)
- ☑ T-M3-05 ClipboardProvider(gameCopytext/gamepastetext)
- ☑ T-M3-01 AppSystemProvider(orientation/browser/finsh/openApplyDownloadpath/notification空)
- ☑ T-M3-02 DeviceProvider(getTime/getphonestate/getbattery/getwifiLevel/getcompareCode/getphoneInfo/getmarketname/getothername/getOther)
- ☑ T-M3-03 NetworkProvider(getnetwork + 出站广播)
- ☐ T-M3-08 ShakeProvider(@ohos.sensor 加速度 + shakeEnd)
- ☐ T-M3-09 LocationProvider(geoLocationManager,隐私合规初始化)
- ☐ T-M3-10 AudioProvider(AVPlayer/SoundPool/录音上传,最复杂)
- ☐ T-M3-11 ScanProvider(Scan Kit)
- ☐ T-M3-12 CameraProvider(Camera Picker)
- ☐ T-M3-07 PhotoProvider(批量下载,复用 Downloader)
- ☑ T-M3-13 ShareProvider(@tencent/wechat_open_sdk 网页分享 → sharesuccess;截图/图片/视频 TODO)
- ☑ T-M3-14 LoginProvider(微信授权取 code;profile 换取待服务端端点,AppSecret 不入端)
- ☐ T-M3-06 NavProvider(SwitchOverGameData 容器内切换;OpenurlTitleData 依赖 M4 通用容器)
- ◐ T-M3-16 前后台 appservice(容器 EventBus 联动已就位,随 EntryAbility 前后台触发)
- ☐ T-M3-17 契约一致性回归(全 44 入站逐条真机核对)
已落地 Provider 当前为 build 验证 + 契约逐字对齐;真机逐条验证在 T-M3-17 回归阶段统一做(最小回显页不覆盖业务 handler)。 getcompareCode 暂返 '0'、ShareProvider/LoginProvider 待微信 SDK——均有 TODO 标注。
M2 期间确立的项目决策/偏差:
- file:// 跨域采用
WebviewController.setPathAllowingUniversalAccess([filesDir/tsgames])(官方"本地资源跨域"方案),优于通用 onInterceptRequest 代理。 - 沙箱路径简化:弃用 Android 的
<包名>/<时间戳>多级目录,用固定filesDir/tsgames/<gamedir>(§5.1 许可,对 H5 无影响)。 - 启动期不申请敏感权限(沙箱文件免存储权限;定位/电话等由 M3 Provider 用时申请),仅声明 INTERNET。
- 内置
gamehall_builtin.zip为 M2 测试大厅(含 V2 验证页),真实大厅由远程 zip 生产下发;M3 用真实 Provider 替换 EchoSampleProvider。
M0 期间确立的项目决策(超出原计划的补充):
- 包名
com.lobby.daoqi;横屏项目,module.json5配auto_rotation_landscape(横屏两朝向跟随旋转、不进竖屏,H5 显式方向控制保留)。 - ArkTS 验证用
devecocli build(其 CompileArkTS 为权威编译器);deveco-mcp 的 LSP check 因 70s 索引 / 20s 超时不可用。 devecocli无test子命令,单测运行方式待 M1 解决。
M0 · 工程脚手架 + 契约类型
| ID | 目标 | 产出物 | 依赖 | 验收 | 估时 | 角色 |
|---|---|---|---|---|---|---|
| T-M0-01 | 创建多模块工程 | devecocli create 生成 entry + 6 HAR(feature_bridge/feature_capabilities/domain_resource/platform/contracts/common) |
— | 工程可 devecocli build(debug)通过 |
1 | 桥 |
| T-M0-02 | 模块依赖与导出 | 各 oh-package.json5 依赖关系(单向向下);index.ets 导出 |
T-M0-01 | 跨模块 import 无环、可编译 | 0.5 | 桥 |
| T-M0-03 | 构建/签名/CI | build-profile.json5(debug/release product);调试签名;CI 脚本(build+单测) |
T-M0-01 | PR 触发 CI 通过 | 1 | 桥 |
| T-M0-04 | 契约类型(SSOT) | contracts HAR:enum Handlers(全部入站/出站 handler 名常量,含 finsh/getcameraaAddress/backgameData- 等原样拼写);DTO interface(sharetypeBean/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 HAR:Logger(分级)/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 入口与路由壳 | EntryAbility(Stage 模型生命周期,含 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 | 消息编解码 | Message(5 字段)+ MessageCodec:toJson/toArray/escape,与 lzyzsd 完全一致的二次转义(\、") |
T-M0-04 | 单测:与 Android 端样例字节级一致 | 1 | 桥 |
| T-M1-03 | Handler 注册表 | HandlerRegistry(put/get/default)+ DefaultHandler(空实现兜底) |
T-M0-04 | 未注册名落默认 handler 不抛错(框架 §5.2/§6.5) | 0.5 | 桥 |
| T-M1-04 | 桥控制器 | BridgeController:onLoadIntercept/callHandler/registerHandler/onPageEnd/flushMessageQueue/handleReturnData/dispatch/queue;_fetchQueue 走 yy://return/ 回传(非 runJavaScript 返回值);UI 线程守卫(§5.5) |
T-M1-01/02/03 | 单测(FakeWebController):模拟 H5 callHandler→handler 分发、原生 callHandler→下发、回执路由、启动队列补发 | 2.5 | 桥 |
| T-M1-05 | 桥 JS 注入 | onPageEnd 中 runJavaScript(BRIDGE_JS) + 启动消息补发 |
T-M1-04/T-M0-06 | 页面就绪后 window.WebViewJavascriptBridge 可用 |
0.5 | 桥 |
| T-M1-06 | 最小回显 H5 | 测试用 H5(registerHandler('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-07(V1)通过 + 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(存储/电话/定位/相机/麦克风 用时申请);LocalUploadServer(socket/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 | 分层覆盖 | VersionResolver:agentlist/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 | 启动状态机 | StartupOrchestrator:INIT→…→ENTER_HALL;可重试/降级/阻断 |
T-M2-05/07/09 | 真机按序走通;失败降级本地缓存 | 1.5 | 台 |
容器(轨道 A)
| ID | 目标 | 产出物 | 依赖 | 验收 | 估时 | 角色 |
|---|---|---|---|---|---|---|
| T-M2-13 | 能力插件框架骨架 | feature_capabilities:CapabilityProvider 接口、CapabilityContext、注册表对接桥、组装根 buildCapabilities()/AppModule(DI 装配)、Provider 样板(框架 §6.1/§6.2) |
T-M1-04、T-M0-05 | 一个示例 Provider 可注册并被桥分发;组装根可批量装配 | 1 | 桥 |
| T-M2-10 | 大厅/子游戏容器 | BridgeGameContainer:Web + 属性(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-08(V2)通过。 注:
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 |
orientation、browser、finsh、openApplyDownloadpath、notification(空) |
— | 屏幕方向、拉起浏览器、退出、按包名启动/下载兜底 | 1.5 | 能 |
| T-M3-02 | DeviceProvider |
getTime、getphonestate、getbattery、getwifiLevel、getcompareCode、getphoneInfo、getmarketname、getothername、getOther |
getBattery、getwifiLevel、phonestate |
deviceInfo/telephony/batteryInfo/wifiManager;裸串 vs JSON 严格区分 | 2.5 | 能 |
| T-M3-03 | NetworkProvider |
getnetwork |
getnetwork(广播变化) |
NetworkKit 监听 | 1 | 能 |
| T-M3-04 | VibrateProvider |
vibrator、repeatvibrator、canclevibrator |
— | @ohos.vibrator | 0.5 | 能 |
| T-M3-05 | ClipboardProvider |
gameCopytext、gamepastetext |
—(gamepastetext 同步返回串) | @ohos.pasteboard | 0.5 | 能 |
| T-M3-06 | NavProvider |
OpenurlTitleData、SwitchOverGameData、getGameinstall(同步 0/1)、backgameData |
getWebdata |
打开通用容器(M4)、同容器切换、目录判断 | 1.5 | 能/桥 |
| T-M3-07 | PhotoProvider |
getphoto |
getphoto(下载完成数组) |
批量下载图片到本地 + Downloader | 1.5 | 能 |
| T-M3-08 | ShakeProvider |
startshake、SwitchShake、stopshake |
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(录音)、mediaTypeAudio、srcIsloop、voicePlaying |
getaudiourl({audiourl,time})、gameui_play_voice、gameui_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(仅微信) |
微信分享 SDK;type==2 截图:runJavaScript(canvas.toDataURL) + LocalUploadServer |
2.5 | 能 |
| T-M3-14 | LoginProvider |
accreditlogin |
sharelogin(用户资料) |
微信登录;建议 code 模式(密钥下沉) | 2 | 能 |
| T-M3-15 | RoomStubProvider/PayStubProvider |
createRoom/exitRoom/getVideoinfo/DragViewvideoIsshow;paybrowser/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 | 通用容器 | GenericWebContainer:Web + 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 |
| 合计(M0–M5) | 56 | ≈73.5 pd(含测试/缓冲) |
| M6 | 3 | 视集成 |
估时为"工作量"非"日历"。3 人并行、关键路径串行下,日历周期约 5–7 周(见 00 §1)。
附:框架设计 → 计划覆盖矩阵(完整性自检)
逐条证明《框架设计与开发指南》每个章节都有计划任务承接,无遗漏。
| 框架章节 | 计划任务 | 状态 |
|---|---|---|
| §1 设计原则 | 贯穿 DoD(00 §7)与代码规范(00 §6) | ✓ 原则类,非任务 |
| §2 能力映射总表 | 各能力/桥任务的实现依据(引用表) | ✓ 参考 |
| §3 分层架构 / §4 工程结构 | T-M0-01/02(建 entry+6 HAR)、T-M0-07(EntryAbility/路由/Splash) | ✓ |
| §5.1–5.2 桥协议/控制器 | T-M1-02/03/04/05 | ✓ |
| §5.3 同步/异步 | T-M1-04 + 各 Provider | ✓ |
| §5.4 裸串vsJSON | T-M0-04(payloadType) | ✓ |
| §5.5 线程模型 | T-M1-04(UI 守卫) | ✓ |
| §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-08(V2 阻塞验证) | ✓ |
| §8.1 启动状态机 | T-M2-11 | ✓ |
| §8.2 ConfigManager | T-M2-05 | ✓ |
| §8.2 分层覆盖 | T-M2-06(VersionResolver) | ✓ |
| §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-05(Tracer)、T-M5-06 | ✓ |
| §10 ErrorCenter | T-M0-05(已含 ErrorCenter) | ✓ 已补 |
| §10 事件总线/DI | T-M0-05 | ✓ |
| §10 权限 | T-M2-04(PermissionGuard) | ✓ |
| §10 安全 | T-M5-05 | ✓ |
| §10 可测试 | T-M1-01/08 + 各单测 | ✓ |
| §11 可追溯矩阵 | 02 测试与验收 §4 契约核对清单 + 本矩阵 | ✓ |
| §12 路线图 M0–M6 | 本 WBS 全部里程碑 | ✓ |
| §13 验收标准 | 02 测试与验收计划 | ✓ |
| 附录 A ArkTS/ArkUI 适配 | 贯穿 DoD(00 §7 已引用 §5.5/§9.1)+ T-M0-07/T-M2-10 落地 | ✓ |
| 附录 B 生产加固合规 | T-M5-05(逐项)+ 02 §5 M5 Gate | ✓ |
结论:框架设计指南全部章节均有计划任务承接,覆盖完整。本次自检新增
T-M0-07、T-M2-13、T-M5-08及T-M0-05的 ErrorCenter,补齐了能力插件框架骨架、入口/路由壳、ErrorCenter、包体裁剪四处缺口。