M3 补全:移除 EchoSample 样板 + getcompareCode 接版本决策 + app_gamename

- 移除 EchoSampleProvider(组装根/导出/文件):M3 全部 Provider 已就位,
  getTime 由 DeviceProvider 提供;样板回显仅 M1 测试页用,生产无依赖
- getcompareCode:启动期 StartupOrchestrator 把网络 App 版本(VersionDecision.appVersion)
  存 KvStore(KV_KEY_NET_APP_VERSION),DeviceProvider 同步读出与本地 config.appversion 比较,
  本地>网络→'1' 否则'0'(对齐 Android apputil.code 语义)
- app_gamename:VersionXml.parse 解析子 <game name>;ResourceManager.localGameName 暴露;
  AppDataInjector.buildValues 接 gameName 参数;大厅/子游戏两处注入均填入

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lanterngamescn
2026-06-26 07:33:13 +08:00
co-authored by Claude Opus 4.8
parent cc5db07ddd
commit 01e4c0e99e
10 changed files with 72 additions and 53 deletions
+1 -4
View File
@@ -5,14 +5,13 @@
* M2:仅示例能力(验证插件模式)。M3:替换为全部真实 Provider + 占位桩
* RoomStubProvider/PayStubProvider,§6.5),契约 handler 名/数量不变。
*/
import { CapabilityProvider, EchoSampleProvider, RoomStubProvider, PayStubProvider,
import { CapabilityProvider, RoomStubProvider, PayStubProvider,
VibrateProvider, ClipboardProvider, AppSystemProvider, DeviceProvider,
NetworkProvider, ShareProvider, LoginProvider, PhotoProvider, ShakeProvider,
ScanProvider, CameraProvider, LocationProvider, AudioProvider, NavProvider } from 'feature_capabilities';
export function buildCapabilities(): CapabilityProvider[] {
return [
new EchoSampleProvider(), // M2 回显样板(M3 全部 Provider 就位后可移除)
// —— M3 已落地能力(顺序无关,互不依赖)——
new AppSystemProvider(), // orientation/browser/finsh/openApplyDownloadpath/notification
new VibrateProvider(), // vibrator/repeatvibrator/canclevibrator
@@ -31,7 +30,5 @@ export function buildCapabilities(): CapabilityProvider[] {
// —— 暂缓能力占位桩(§6.5)——
new RoomStubProvider(),
new PayStubProvider(),
// —— M3 待落地:DeviceProvider/NetworkProvider/ShakeProvider/LocationProvider/AudioProvider/
// ScanProvider/CameraProvider/PhotoProvider/NavProvider/ShareProvider/LoginProvider ——
];
}
@@ -133,7 +133,7 @@ export struct BridgeGameContainer {
}
const subDir: string = `${res.paths().urlpath}/${d.dir}`;
// 子游戏目录自带 app_data.jsH5 同步读),launchtype='1'
const values: AppDataValues = AppDataInjector.buildValues(cfg.getLocal(), `${res.localVersion()}`, '1');
const values: AppDataValues = AppDataInjector.buildValues(cfg.getLocal(), `${res.localVersion()}`, '1', res.localGameName());
AppDataInjector.inject(subDir, values);
this.slotL?.deactivate();
this.slotS = new WebSlot('subgame', new webview.WebviewController(), true, this.uploadServer);