Commit Graph
30 Commits
Author SHA1 Message Date
lanterngamescnandClaude Opus 4.8 669d34918d docs: 分享 spec 修正——三端文本一律不含 url,systemLink 退役
微信/抖音 第二三层均不带 webpageUrl;webpageUrl 仅作 type4 本地视频路径;
系统分享统一 PLAIN_TEXT(title+description)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 12:36:53 +08:00
lanterngamescnandClaude Opus 4.8 124f2bf217 docs: 分享重构设计 spec(去SDK化+剪贴板指引+内容对齐原工程)
三端统一改为「剪贴板+指引→系统分享」,预留 QQ/抖音 SDK 接入点;
微信乐观回传 sharesuccess;文本格式逐渠道对齐原工程;支付桩边界确认。
契约/DTO 零改动(friendsSharetypeUrlToptitleDescript / sharesuccess / SharetypeBean)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 12:23:47 +08:00
lanterngamescnandClaude Opus 4.8 d335a589b6 修正 app_data.js 三处字段与 Android 不一致(H5 零改动)
§4.2 配置项接口逻辑审计发现 app_data.js 注入有三处偏离原 Android
inith5data(weclomeactivity1/NewwebviewActivity 两处实测一致):

1. app_version:Android 硬编码 `var app_version=1;`(数字常量,"初始化框架
   加载方式"标志,非资源版本);原实现误用 res.localVersion()(如 "261" 且成
   字符串)。改为固定数字字面量 1。契约文档 §6 此处亦误录为"version.xml 的
   version",一并纠正。
2. app_gamename:Android 取 getAllFilename("gamestart")(即 'gamehall');原
   实现误用 version.xml 的 <game name>(如"友乐游戏")。改为 config.gamestart。
3. app_getwifisignalLevel:Android 硬编码 `=1`(数字);原实现为字符串 '0'。
   改为固定数字字面量 1。

buildValues 签名随之简化为 (config, launchtype),去掉不再需要的 version/
gameName 入参;大厅(StartupOrchestrator '0')、子游戏(BridgeGameContainer '1')
两调用点同步更新。buildJs 对 app_version/app_getwifisignalLevel 输出数字字面量
(无引号),其余字符串字段保持引号,逐字对齐 Android。

其余审计结论一致:11 个本地配置键读取一致(servertype/gameserver 契约标
"无代码读取"已正确省略);桥 handler getmarketname→market、getOther→other、
getothername→按名取配置(lookupConfig 全键 + 未知返回'')均与 Android getAllFilename
对齐。真机回归:大厅 V1.261 正常加载渲染。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 09:31:22 +08:00
lanterngamescn 5f3161ee49 忽略screenshot 2026-06-27 01:48:08 +08:00
lanterngamescnandClaude Opus 4.8 f84988869c 新增真机 ArkWeb DevTools 一键脚本 + 文档补多设备/fport 坑
- scripts/arkweb-devtools.sh:自动找 hdc、选真机(排除模拟器)、取 pid(没运行则拉起)、
  清掉端口上所有旧转发并重建 tcp:9222、curl 自验。幂等可反复跑;应用重启后重跑即可重连。
  (修正:hdc `fport rm` 需 local/remote 两参数分开传,否则删不掉;会累积多条旧转发需逐条清。)
- 文档加「一键脚本」快速开始、「多设备必须带 -t」提示、fport rm 两参数/累积排查。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 01:03:35 +08:00
lanterngamescnandClaude Opus 4.8 344fe8d613 文档:真机 ArkWeb DevTools 调试说明(hdc fport + chrome network target)
新增 docs/开发调试/真机ArkWeb-DevTools调试.md:HarmonyOS 不走 chrome USB discovery,
需 hdc fport 转发 webview_devtools_remote_<pid> → localhost:9222,再加 network target;
含自动取 pid 一条命令、pid 随重启变化需重连、ARKWEB-CONSOLE 看日志、canvas 不可见元素、
以及"DevTools 鼠标点击≠真机触摸"的调试陷阱。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 00:52:30 +08:00
lanterngamescnandClaude Opus 4.8 4877e13f9a 闪屏一致性修复:SplashPage 复刻系统启动窗,消除两屏比例不一致
根因(代码层面):启动有两套不同资源/渲染的"闪屏":
- 系统启动窗(module.json5 startWindowIcon=$media:startIcon):1024×1024 方形(1:1),系统居中按图标尺寸渲染;
- ArkUI 闪屏(SplashPage):launch_image 2436×1125 横图(2.17:1),ImageFit.Cover 全屏铺满,logo 明显更大。
两套资源宽高比与 logo 占比都不同、渲染机制不同 → 同一 logo 两屏尺寸/比例不一致,切换跳变;
且系统启动窗图标尺寸系统固定、无法放大到全屏,只能让 ArkUI 闪屏向系统启动窗看齐。

修复:SplashPage 改为白底 + 居中显示**同一个 startIcon**(同资源/同宽高比/同位置),进度条置底。
两屏视觉一致,切换无跳变。(模拟器实测:系统启动窗在该机型渲染为纯白,序列为
白底→白底+logo淡入+进度,全程白底、logo 单次出现尺寸恒定。)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 20:30:38 +08:00
lanterngamescnandClaude Opus 4.8 ccf5a2acec 启动闪屏体验修复:品牌启动窗 + 阶段中文文案 + 白底可见的进度条
针对"首屏白底系统窗、闪屏文字不可见、缺阶段提示"修复:
- startWindowIcon(startIcon.png) 由 DevEco 默认蓝色图标换成与闪屏一致的品牌 logo
  (白底+金色游戏手柄+快乐游戏健康生活),系统启动窗与 SplashPage 无缝衔接,消除白屏突兀感。
- SplashPage:
  - 修复白色文字在白底闪屏上不可见的问题,改用品牌 navy 文字 + 金色进度条/加载圈。
  - 各启动阶段展示中文文案:读取本地配置/检测网络权限/获取配置文件/检测升级版本/
    准备游戏资源/正在下载更新NN%/即将进入大厅;下载阶段进度条实时推进。

模拟器验证:系统启动窗=白底金 logo;SplashPage 0.4s 显示"准备游戏资源35%",
下载期显示"正在下载更新69%"金色进度条。

注:网络/震动/传感器为 normal 级权限,安装即授予、无运行期弹窗(HarmonyOS 正常行为,非缺陷);
定位为 user_grant,按设计在 H5 首次调用定位能力时才弹窗,启动期不申请。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 18:07:35 +08:00
lanterngamescnandClaude Opus 4.8 0fcee6de1e 文档同步:远程配置格式按线上真实格式纠正(契约§4.3/4.4 + 框架指南 + WBS)
代码已对齐线上真实远程配置格式,同步修订设计文档(此前 §4 误录为废弃的
Bean1/GameupdateUtil 格式,会误导后续开发):
- 契约§4.3 配置 JSON 改为真实格式:顶层仅 agentlist、层级 agent→game→channel→market、
  资源字段 game_zip、marketid/版本为数字、无二级 url 二次请求;附旧格式纠正说明。
- §4.4 分层匹配改为真实遍历与累积规则 + gameid 回退 version.xml。
- §4.2 gameconfig 改生产端点;§5.4/启动流程图 game_download→game_zip;验收清单同步。
- 框架设计指南 §8.2/§8.3/落地映射表、Plan WBS T-M2-05/06 描述同步。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 17:57:05 +08:00
lanterngamescnandClaude Opus 4.8 4e2b00b4b7 计划进度:LocalUploadServer 落地 + 分享截图上传链路
- T-M2-04 LocalUploadServer 从骨架→已落地(本机 HTTP server)
- T-M3-13 补 H5 主动 POST 截图上传链路(对齐原 OkHttpPhotoServer)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 08:20:02 +08:00
lanterngamescnandClaude Opus 4.8 cb3673cb1b 计划进度:M3 补全(分享面板/getcompareCode/app_gamename/EchoSample 移除)
- T-M3-13 更新为对齐原工程分享面板(微信SDK + QQ/抖音系统分享)
- 备注更新:getcompareCode 接版本决策、app_gamename 已解析、EchoSample 已移除
- M3 余项:T-M3-17 真机回归、录音 prepareaudio/微信注册 待外部

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 08:01:03 +08:00
lanterngamescnandClaude Opus 4.8 cc5db07ddd 计划进度:M5 收尾 03/06/07 完成,T-M5-08 延后 M6
- T-M5-03/06/07 标记完成(build 通过;真机量化/回归留真机阶段)
- T-M5-04/05 明细补 ☑(总览已完成,明细表对齐)
- T-M5-08 标 ⏸ 延后 M6(微信/七牛 SDK M6 才真集成);M6 登记承接

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 07:15:00 +08:00
lanterngamescn c0addf8ec2 M5(T-M5-05): 安全加固清单(明文HTTP白名单 + 日志脱敏审计)
- 明文 HTTP 最小授权:新增 resources/base/profile/network_config.json(网络栈自动识别)——
  base-config 默认禁明文,domain-config 仅放行 daoqi88.cn(含子域 tsgames/gameaudio)。附录B "明文域名显式放行"
- 日志脱敏审计:grep 确认无 code/token/openid/unionid/AppSecret/AK/SK 明文落日志(命中均为 resultCode/responseCode/stub)
- 已完成项复核:WebDebug 仅 debug(AppEnv.isDebug)、密钥下沉(微信code/七牛tokenProvider)、file 跨域最小授权(仅 filesDir/tsgames)
- 自定义 scheme(gamepaywelcome/gamepaywx…)随支付 M6 落地(现声明未处理 scheme 会致意外唤起,故延期)

WBS:M5 标记 T-M5-01/02/04/05 完成;余 T-M5-03 节流/06 可观测/07 冷启动/08 包体
devecocli build 通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 23:57:16 +08:00
lanterngamescn cf2eebdad9 计划进度:M5 T-M5-01/02 双 Web 架构完成(真机验证)
01_WBS:T-M5-01/02 标记完成(双 Web 槽 + WebSlot 激活协议 + Provider 前后台,真机验证大厅常驻/接口隔离/只一个激活);
M5 进入进行中,余 T-M5-03 节流/04 崩溃兜底/05 安全加固/06 可观测/07 冷启动/08 包体
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 23:37:35 +08:00
lanterngamescn f190fe69e3 M5 设计验证:file:// 存储共享真机验证通过 + 文档定稿
验证(临时 VerifyStoragePage 真机跑后已回退):
- localStorage:两个不同 file:// 路径(lsA/lsB)+setPathAllowingUniversalAccess 跨页共享 ✓(lsB 读到 lsA 写的值)
- cookie:file:// 不支持 WebView cookie;原 Android cookie 全在 native HTTP 层(Volley),WebView 未开 file-scheme cookie,
  H5 不用 WebView cookie → 非缺口;http(s) cookie 由 WebCookieManager 应用级全局共享
- 结论:采用 file:// + setPathAllowingUniversalAccess + WebCookieManager(全局),无需自定义协议

文档:
- 框架新增 §7.5 双 Web 大厅/子游戏架构定稿(结构隔离/激活协议四联动/onInactive 不停JS的平台限制与 appservice 正解/存储验证结论/状态机/改造清单)
- 01_WBS:M5 标记"设计就绪",记存储验证通过
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 23:23:10 +08:00
lanterngamescn d196b13e39 设计:确认 M5 大厅/子游戏双 Web 激活模型(用户约束)
用户明确:大厅 Web 常驻、子游戏 Web 进入创建/返回销毁(不保活);同时只一个激活(联网+收发包+界面更新),
非激活端 onInactive 彻底停网络+渲染;仅 大厅↔子游戏、无子游戏→子游戏;两 Web 各自独立桥+能力。

- 框架 §7.1:子游戏切换加"双 Web 激活模型"铁律块;M2/M4 单 WebView loadUrl 标为过渡实现
- 框架 §9:Web 保活/预热行改为双 Web 槽 + onActive/onInactive 模型
- 01_WBS:T-M5-01/02 重写为双 Web 槽(大厅常驻保活 + 子游戏临时 + 仅一个激活 + 各自独立桥),估时上调
- 记入项目记忆 m5-dual-web-activation-model
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:49:45 +08:00
lanterngamescn 6bec98d584 review: M3+M4 成果审查后的质量加固
八角度审查 15 Provider+微信/七牛+双容器+导航。桥核心/契约骨架基本无误;修确凿问题:

正确性/健壮性
- ShakeProvider:stop()/onDestroy 取消未决 shakeEnd 计时并复位 pending(修停止后仍触发出站、重启后首摇被吞、计时器泄漏)
- VibrateProvider:startRepeat 先 stopRepeat(修重复 repeatvibrator('1') 叠加出无法取消的孤儿计时链)
- PhotoProvider:JSON.parse 后 Array.isArray 守卫(修 H5 传非数组致 .map 抛错、出站永不下发使 H5 挂死);去不可达 .catch
- GenericWebContainer:getWebdata 直调改用 JSON.stringify 生成 JS 字符串实参(修 data 含换行/行分隔符断行致注入语法错误)
- LocationProvider:单次请求前先停连续监听(修连续后切单次仍持续推送);去 push() 中 !continuousOn→stopContinuous 死代码

加固/清理
- BridgeGameContainer:抽 firstReadyPush() 幂等助手(appservice/setPostUrl/pendingWebdata);保持 100% 触发时序
  (注明为何用 100% 而非更早 onPageEnd:确保 H5 已注册 handler);aboutToDisappear 置空 hostCtx/config/resource

研判驳回(与原 Android 一致/契约默认/自愈):getphonestate CallState 值映射、通用容器 orientation 默认横屏、setMuted prepared 自愈、exitDialog backgameData() 无参通知。
延期(随微信集成):WeChatApi 单例陈旧回调/instanceof(容器重建后回调打旧 bridge;微信运行期本就待开放平台注册)。
记录待重构:AbstractProvider 基类 + parseJson 助手(去 15 Provider 重复 bridge/ctx/解析样板)、AVPlayer 复用、openBrowser/orientation 抽公共。

devecocli build 通过;单测通过;模拟器复测桥往返/appservice/setPostUrl 无回归。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:30:06 +08:00
lanterngamescn 6bd0cf7488 计划进度:M4 完成、NavProvider(T-M3-06)完成
- 01_任务分解WBS:M4 标记完成;T-M3-06 随 M4 完成;M3 进度 16/17(余 T-M3-17 真机回归、录音待服务端)
- 真机冒烟:16 能力含 nav 全注册、桥 appservice/getTime/nativeEcho 往返无回归(无 registration failed/RenderExited)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:00:56 +08:00
lanterngamescn ef04f4e9e1 计划进度:M3 批5(音频播放+七牛上传器,15/17)
01_任务分解WBS:T-M3-10 音频播放完成、录音分档(QiniuUploader 就绪);M3 进度 15/17;
余 T-M3-06 NavProvider(并入 M4)、T-M3-17 真机回归
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 20:14:29 +08:00
lanterngamescn 829f267966 计划进度:M3 批4 完成(14/17,图片/摇/扫码/相机/定位)+ 真机回归冒烟
- 01_任务分解WBS:T-M3-07/08/09/11/12 标记完成;M3 进度 14/17;
  余 T-M3-10 AudioProvider(录音上传需服务端,待单独推进)、T-M3-06 NavProvider(并入 M4)、T-M3-17 真机回归
- 真机冒烟:15 个能力全部注册成功、桥 appservice/setPostUrl/getTime/nativeEcho 往返无回归(无崩溃/RenderExited)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 20:02:54 +08:00
lanterngamescn 841a964693 计划进度:M3 批3 完成(10/17,微信分享+登录)
01_任务分解WBS:T-M3-13/14 标记完成;M3 进度更新为 10/17
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 19:43:40 +08:00
lanterngamescn 89af002e95 计划进度:M3 进行中(批1+批2 完成,8/17)
01_任务分解WBS:M3 标记进行中,新增 M3 任务明细块(已完成 6 Provider+2 桩,余 摇/定位/音频/扫码/相机/图片/分享/登录/导航/回归)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 19:20:46 +08:00
lanterngamescn 40b8c2e91c 计划进度:M2 完成、R-02(V2 file:// 跨域)关闭
- 01_任务分解WBS:M2 标记完成(13 任务),新增 M2 任务明细块与决策/偏差记录
- 03_风险登记册:R-02 关闭(setPathAllowingUniversalAccess 方案 + 真机复测 OK)
- 框架 §7.3:file:// 跨域改为已验证的具体方案(setPathAllowingUniversalAccess),保留 onInterceptRequest 回退
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 18:43:18 +08:00
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
lanterngamescnandClaude Opus 4.8 38307e8d71 计划进度:M1 核心+V1 通过、单测受阻登记 R-18
- 01_WBS 进度总览:M1 近完成,T-M1-01~07 全 ☑、V1 真机通过;T-M1-08 单测代码就位待运行
- 03_风险登记册:新增 R-18(单测运行工具链缺口)+ 受阻任务记录 T-M1-08

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 09:07:49 +08:00
lanterngamescnandClaude Opus 4.8 206db9730a M1: 桥引擎核心(T-M1-01~04)
100% 复刻 lzyzsd/JsBridge(对照原 Android com.tagmae.jsbridge 逐字):
- IWebController + WebviewControllerAdapter(emitter UI 线程守卫,§5.5) + FakeWebController(单测用)
- Message(5字段,undefined省略) + MessageCodec(toJson/toArray + dispatchMessage 两次正则转义逐字复刻)
- HandlerRegistry + 空实现 DefaultHandler 兜底(H5 调用永不报错最后防线)
- BridgeController:onLoadIntercept(decode→yy://return/yy://)/callHandler/send/onPageEnd/
  flushMessageQueue(_fetchQueue 经 yy://return 回传,非 runJavaScript 返回值)/handleReturnData/
  启动队列补发;对能力零感知、纯逻辑可测
- build 编译通过(ArkTS 严格)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 08:51:11 +08:00
lanterngamescnandClaude Opus 4.8 9280c00809 计划进度更新机制 + 标记 M0 完成
- CLAUDE.md 工作约定新增「及时更新计划进度」:按 Plan 实施时主动更新
  01_任务分解WBS 任务状态,与代码提交同节奏
- 01_任务分解WBS 新增「进度总览」:M0 全部 7 任务标记完成 ☑,M1~M6 未开始;
  记录 M0 期间确立的项目决策(包名/横屏/验证策略/devecocli 无 test)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 08:40:24 +08:00
lanterngamescnandClaude Opus 4.8 82459c708c 横屏改为 auto_rotation_landscape:横屏两朝向跟随传感器旋转,不进竖屏
- module.json5:landscape → auto_rotation_landscape(横屏正/反向 180° 跟随重力
  感应自动旋转,但不进入竖屏),build 校验取值合法、安装启动通过
- 同步契约 §7 与框架 §7.4:'不跟随传感器' 修正为 '横屏两朝向内跟随旋转'
- H5 显式方向控制(含竖屏)仍由 setPreferredOrientation 保留,零改动不变

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 08:38:05 +08:00
lanterngamescnandClaude Opus 4.8 3a333bfe32 docs: 补充横屏项目约束(默认横屏、不支持竖屏自动旋转)
- 契约规范 §7:新增屏幕方向约束——默认横屏、不跟随传感器自动旋转;
  但遵守 H5 零改动铁律,保留 orientation/SwitchOverGameData webtype/通用网页
  orientation 三处 H5 显式方向控制(含竖屏),与原 Android 一致
- 框架指南 §7.4:实现落地——module.json5 orientation:landscape 默认横屏 +
  运行时 window.setPreferredOrientation 按 H5 请求动态切换
- 经核对原 Android:上述三处确为真实竖屏切换(非死代码),故定调为
  '默认横屏 + 不破坏 H5 方向控制'

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 08:26:40 +08:00
joywayer 561af47817 first commit 2026-06-25 06:25:30 +08:00