From 28e52959117adf5a940a00faef9d0b303ca7d655 Mon Sep 17 00:00:00 2001 From: kdletters Date: Thu, 18 Jun 2026 09:14:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=A7=BB=E5=8A=A8=E5=A3=B3?= =?UTF-8?q?=E5=AE=89=E5=8D=93=E8=87=AA=E5=8A=A8=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移动壳 Android 包配置显式设置 allowBackup=false 移动壳检查脚本拒绝恢复 Android 自动备份 宿主壳方案和共享决策记录移动端备份边界 --- apps/mobile-shell/app.json | 1 + apps/mobile-shell/scripts/check-config.mjs | 4 ++++ docs/project-memory/shared-memory/decision-log.md | 1 + ...【前端架构】ExpoReactNative与Tauri宿主壳方案-2026-06-17.md | 2 ++ 4 files changed, 8 insertions(+) diff --git a/apps/mobile-shell/app.json b/apps/mobile-shell/app.json index cbcaa060..0b33ae7b 100644 --- a/apps/mobile-shell/app.json +++ b/apps/mobile-shell/app.json @@ -49,6 +49,7 @@ "package": "world.genarrative.mobile", "versionCode": 1, "usesCleartextTraffic": false, + "allowBackup": false, "blockedPermissions": [ "android.permission.RECORD_AUDIO" ], diff --git a/apps/mobile-shell/scripts/check-config.mjs b/apps/mobile-shell/scripts/check-config.mjs index e66f50b5..4bafd0f5 100644 --- a/apps/mobile-shell/scripts/check-config.mjs +++ b/apps/mobile-shell/scripts/check-config.mjs @@ -243,6 +243,10 @@ if (appConfig.android?.usesCleartextTraffic !== false) { throw new Error('mobile shell Android package must disable cleartext traffic'); } +if (appConfig.android?.allowBackup !== false) { + throw new Error('mobile shell Android package must disable app data backup'); +} + if ( !appConfig.android?.blockedPermissions?.includes( 'android.permission.RECORD_AUDIO', diff --git a/docs/project-memory/shared-memory/decision-log.md b/docs/project-memory/shared-memory/decision-log.md index 1a8bcbc5..1dabcbbe 100644 --- a/docs/project-memory/shared-memory/decision-log.md +++ b/docs/project-memory/shared-memory/decision-log.md @@ -58,6 +58,7 @@ - 2026-06-18 桌面壳 bundle 图标集:Tauri 桌面壳从现有真实品牌 PNG `apps/desktop-shell/src-tauri/icons/icon.png` 派生 `32x32.png`、`128x128.png`、`128x128@2x.png`、`icon.ico` 和 `icon.icns`,并在 `bundle.icon` 中同时声明这些平台图标。检查脚本会校验 PNG 尺寸、ICO 多尺寸头部、ICNS 容器长度和 bundle 图标列表,避免后续退回单图标或替换为非品牌 / 占位素材。 - 2026-06-18 移动壳网络安全元数据:Expo 移动壳默认包配置显式禁用 Android 明文流量 `usesCleartextTraffic=false`,iOS ATS 禁用任意加载 `NSAllowsArbitraryLoads=false`,并设置 `ITSAppUsesNonExemptEncryption=false` 作为当前未接入自定义加密能力的出口合规声明;本地 Vite 联调只通过 development build 显式环境变量进入,不把任意明文流量开关带进默认包配置。 - 2026-06-18 移动壳麦克风权限禁用:Expo 移动壳的 `expo-image-picker` 插件必须保持 `microphonePermission=false`,Android 包配置必须通过 `android.blockedPermissions` 显式移除 `android.permission.RECORD_AUDIO`,且不得在 `android.permissions` 中重新声明;移动壳现阶段没有录音、后台音频采集或远程语音 SDK,音频导入只走系统文档选择器。配置检查会拒绝麦克风权限拦截缺失或被反向加入。 +- 2026-06-18 移动壳 Android 自动备份关闭:Expo 移动壳必须保持 `android.allowBackup=false`,避免 WebView cookie、localStorage、缓存文件和宿主文件导入导出中间态进入 Google Drive 自动备份 / 恢复链路;正式业务事实仍以后端账号、作品、钱包和草稿状态为准。配置检查会拒绝恢复 Android 默认允许备份的包配置。 - 影响范围:`src/services/host-bridge/`、未来 `apps/mobile-shell/`、未来 `apps/desktop-shell/`、移动端支付 / 分享 / 深链 / 推送、桌面端系统能力、AI H5 sandbox 的 GameBridge 边界。 - 验证方式:普通浏览器、小程序、Expo 壳、Tauri 壳都能返回正确 `getHostRuntime()`;未支持能力能回退 H5;固定玩法在各宿主中读取同一作品数据和运行态 snapshot;AI sandbox 无法直接调用 HostBridge;Tauri release 不允许任意远端页面调用桌面命令。 - 关联文档:`docs/【前端架构】ExpoReactNative与Tauri宿主壳方案-2026-06-17.md`、`docs/【前端架构】宿主壳能力统一协议-2026-06-17.md`。 diff --git a/docs/【前端架构】ExpoReactNative与Tauri宿主壳方案-2026-06-17.md b/docs/【前端架构】ExpoReactNative与Tauri宿主壳方案-2026-06-17.md index 4bb4f618..69606272 100644 --- a/docs/【前端架构】ExpoReactNative与Tauri宿主壳方案-2026-06-17.md +++ b/docs/【前端架构】ExpoReactNative与Tauri宿主壳方案-2026-06-17.md @@ -319,6 +319,8 @@ GameBridge 禁止: 2026-06-18 追加:移动壳 Android 包级权限显式移除麦克风。`expo-image-picker` 插件继续设置 `microphonePermission=false`,同时 Expo `android.blockedPermissions` 固定包含 `android.permission.RECORD_AUDIO`,防止后续插件或 manifest 合并把录音权限带入最终包;`android.permissions` 也不得重新声明该权限。移动壳拍照只请求相机,相册只请求媒体读取,本地通知只请求即时通知权限,音频导入走系统文档选择器,不申请麦克风或后台录音能力。`apps/mobile-shell/scripts/check-config.mjs` 会拒绝麦克风权限缺失拦截或被重新声明。 +2026-06-18 追加:移动壳 Android 自动备份显式关闭。Expo `android.allowBackup=false`,避免 WebView cookie、localStorage、缓存文件、系统剪贴板导入中间文件等本地宿主状态进入 Google Drive 自动备份 / 恢复链路;正式业务事实仍以后端账号、作品、钱包和草稿状态为准,不依赖设备备份恢复。`apps/mobile-shell/scripts/check-config.mjs` 会拒绝恢复默认允许备份的 Android 包配置。 + ### Phase 4:宿主能力扩展 - 移动端接入系统分享、推送、原生登录和渠道支付。