三路独立审查:桥引擎(对照 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>
26 lines
951 B
Plaintext
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;
|
|
}
|
|
}
|