Files
youle_app_ohos/common/src/main/ets/env/AppEnv.ets
T
lanterngamescnandClaude Opus 4.8 bdb920f61e review: M0/M1 成果审查后的质量加固
三路独立审查:桥引擎(对照 lzyzsd 逐字)与契约 SSOT(对照原 Android 44 handler)
两个命门维度【零问题】;以下为架构/质量改进项的修复:

- [安全红线] BridgeGameContainer setWebDebuggingAccess 加 AppEnv.isDebug() 守卫
  (common 新增 AppEnv,用 bundleManager.appInfo.debug 运行时判断,release 自动关闭,
  消除 CLAUDE.md 附录B 红线违反)
- [生命周期] BridgeController 加 dispose() 清回执表/注册表/启动队列;HandlerRegistry 加
  clear();容器 aboutToDisappear 先 dispose 桥再 dispose adapter 并置空,防残留命中/泄漏
- [事件总线] EventBus.on/once 返回取消函数支持 per-subscriber 精确退订;off→offAll 并
  标注谨慎(避免 M3 多容器订阅 appservice 时误注销他人回调)
- [单测] 加强 escape 断言覆盖内层 " 加倍(命门);新增 dispose 用例;16 用例全通过,
  桥核心覆盖率 89.0%
- [记录] Index.pageMap param as 运行期不校验,M4 外部 scheme 唤起时需补校验(已注释)

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

26 lines
951 B
Plaintext

/**
* 运行环境判断(生产加固,对应 CLAUDE.md 附录 B 红线)。
*
* isDebug():是否为 debug 包(debug 签名)。用于守卫仅 debug 可开的能力,
* 如 setWebDebuggingAccess——release 包 appInfo.debug 为 false,自动关闭远程调试。
* 等价 BuildProfile.DEBUG 的意图,但用运行时签名信息判断、不依赖构建期字段注入。
*/
import { bundleManager } from '@kit.AbilityKit';
export class AppEnv {
private static debugCache: boolean | undefined = undefined;
static isDebug(): boolean {
if (AppEnv.debugCache === undefined) {
try {
const info = bundleManager.getBundleInfoForSelfSync(
bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
AppEnv.debugCache = info.appInfo.debug;
} catch (e) {
AppEnv.debugCache = false; // 取不到时保守按 release(不开调试)
}
}
return AppEnv.debugCache;
}
}