Files
tongxunruanjian/docs/acceptance/b197-cross-platform-regression.md
T
2a817e77d8 docs: 记录 B-197/B-198 跨端构建修复与验收
补记 Dart/Gradle/锁文件提交 SHA、debug/release 与 PC 重构建命令、产物 SHA256、启动冒烟、未测项与回退。不宣布运行回归通过。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 06:16:08 +08:00

8.5 KiB
Raw Blame History

B-197 / B-198 跨端构建修复与验收记录

分支:agent/agent/7b089146(本卡工作树 agent/agent/2cae90a2 构建基线 HEAD2c81a11e03411fa1b033f0f74cd49139e258d1d3 越界对比基线:e26abad 本卡只做构建修复与验收记录,不部署、不发布、不换标。

B-197 已真实打通 PC 与 Android debug/release,但修复仅在部署工程师本机工作树。本文件记录 B-198 复核后的入库提交与重新真实构建结果。

结论:安装包构建与 PC 启动冒烟通过。登录、收发、语音、同步等运行时回归未测,不得视为跨端运行验收通过。

提交主题(可逐项 git revert

从新到旧回退:先本验收记录,再锁文件,再 Gradle 堆,再 Dart 编译修复。

主题 SHA 文件
本验收记录 本文件当次提交 docs/acceptance/b197-cross-platform-regression.md
同步 package-lock 根版本号 1.0.2 c150033b39d047852eb1baed1d55b1726a24e65a pc-client/package-lock.json
Android Gradle 堆 4096M 5160c8ec87f794f75a2ab2e06632a88c35f2d2e1 mobile-next/android/gradle.properties
FeatureFlags 导入 + 去掉预览 const 1767cf2547ca58102ba3734c06ae73ce85e646a2 personal_info_view.dartchat_picture_preview.dart

回退示例(新到旧):

git revert <本验收提交>
git revert c150033b39d047852eb1baed1d55b1726a24e65a
git revert 5160c8ec87f794f75a2ab2e06632a88c35f2d2e1
git revert 1767cf2547ca58102ba3734c06ae73ce85e646a2

回退不影响 mobile/account-service/config/scripts/、现网服务与已发布安装包。

复核的 4 处改动

  1. mobile-next/lib/pages/contacts/user_profile_panel/personal_info/personal_info_view.dart:6../../../company../../../../company。该文件在 personal_info/ 下,相对 lib/ 需要四层。目标模块是 lib/company/feature_flags.dartFeatureFlags,未引入其它模块。
  2. mobile-next/openim_common/lib/src/widgets/chat/chat_picture_preview.dart:97:去掉 Center 外层 constStyles.c_0089FF 定义为 static Color(非 const)。未改 SizedBox / CircularProgressIndicator,未做额外格式化。
  3. mobile-next/android/gradle.propertiesorg.gradle.jvmargs=-Xmx1536M-Xmx4096M。B-197 在 1536M 上 release 报 Java heap space;本卡用 4096M 重新打通 debug 与 release。未再试 2048M/3072M(缺少真实 release 证明),故采用已证明稳定的 4096M。
  4. pc-client/package-lock.json:仅根节点 "version": "1.0.1""1.0.2",与 package.json 的 1.0.2 对齐。lockfileVersion 仍为 3,无依赖树或包升级。其它 npm 回写视为环境噪音,未入库。

Gradle 机器内存要求

  • 配置:mobile-next/android/gradle.propertiesorg.gradle.jvmargs=-Xmx4096M(与 docs/upstream/build-and-rollback.mdGRADLE_OPTS=-Xmx4096M 一致)。
  • 机器:JVM 堆预留 4GB。建议物理内存 ≥ 8GB(堆 + Gradle daemon + 系统);本机构建机约 64GB,构建时未再出现 heap space。
  • 1536M 不能作为 release 稳定值。

环境

  • Flutter 3.24.5 / Dart 3.5.4C:\flutter324
  • Temurin JDK 17.0.20
  • Android SDK:既有 B-95 工具链(build-tools 36.0.0platforms 含 compileSdk 34
  • Node v24.18.0 / npm 11.16.0C:\Program Files\nodejs
  • npm installhusky install || true 在 Windows cmd 下仍以 exit 1 结束(已知非阻塞);node_modules 可用,后续 vite / electron-builder 成功。

检查与构建

Dart

  • 对上述两文件做过 dart format,但未提交格式化换行,只保留两处语义改动。
  • 定点 flutter analyzepersonal_info_view.dart 0 issueschat_picture_preview.dartinvalid_constant,仅存量 must_be_immutable / use_super_parameters
  • 全量 flutter analyzemobile-next):553 issues(约 18 error / 87 warning / 448 info)。error 全为存量:local_plugin/flutter_download_manager/exampleopenim_commonpush_controller.dart / custom_mk_controls.dart。本卡两文件无新增 error。

Android(必须重新真实构建)

命令(mobile-next/):

flutter pub get
flutter build apk --debug
flutter build apk --release
构建 结果 大小 SHA256 产物
debug 成功 109,391,065 B CE01F30CAFBA24CAFD686F0CFB32ACBDB53359395341B0B1EA2FB795F14C0748 mobile-next/build/app/outputs/flutter-apk/app-debug.apk
release 成功 53,273,539 B 52F02CBC855989C62A89112EB791510CC4313921D9E1998456E94A737F8B148B mobile-next/build/app/outputs/flutter-apk/app-release.apk

元数据(aapt / apksignerrelease):包名 io.openim.flutter.demoversionName 3.8.3 / versionCode 180minSdk 24 / targetSdk 33 / compileSdk 34,仅 arm64-v8alabel F-DEMO。签名 CN=openim,证书 SHA-256 1f38a82fb3c33be7951fb5d964ef5bd9c6c9bfc084ae1e2a8a40a0d1f44ae1fe

构建期告警:Flutter Gradle apply-script 弃用;部分依赖 Kotlin metadata 1.8.0 vs 工程预期 1.6.0。均属上游,debug/release 均通过。

PC(锁文件影响后的 build + 安装包)

npm install
npm run build
npx tsc --noEmit
npx electron-builder --win --x64
步骤 结果
npm install 依赖装上;husky prepare 在 Windows 报 exit 1(非阻塞)
vite build 通过(✓ built in 25.77s),antd "use client" 指令被忽略(存量告警)
tsc --noEmit exit 224 个存量错误,与 B-188 清单一致,本卡未新增
electron-builder 通过;extraResources 目录缺失,构建跳过该项

产物:pc-client/release/Base/1.0.2/畅联_1.0.2.exe105,891,730 B(约 101MB),SHA256 A5F15035D669E2184BA1ED2E68FFFB1432FB997703F1FC8103CE4B38D7BB362E

启动冒烟:启动 win-unpacked/畅联.exe,进程拉起且主窗口标题为「畅联」,随后结束进程。未登录。

tsc 存量错误(未修):useGroupMembers.ts TS18047 ×3、About.tsx TS2345 ×2、useHistoryMessageList.tsx TS18047 ×1、ChooseBox/index.tsx TS18047 ×2、RtcCallModal / RtcControl / RtcLayout TS2786 ×4、UserCardModal TS2345 ×1、imCommon.ts TS2322 ×11。

与 B-197 报告 SHA256 的差异

B-197 评论记录:

  • PC eab9bef6285c940351cdd995d850a0d4c67aebc122b83a0ba0680ea0f76e3df2
  • Android release b5029f0ece55cd11828a1fe4cb9364e660baad04495a74fe94f33639be8165c8
  • Android debug 035d5b6eba7b20351269d88339ad5e0cd2d1179ac7d8fdae8e18a0069fc6b6b7

本卡重跑后哈希均不同。APK / Electron 安装包内嵌构建时间戳,不是位级可复现;可复现的是工具链、命令、包名、签名证书与约 50.8MB / 101MB 量级。以本表 SHA256 为准。

越界比对

相对 2c81a11e:仅上述 4 个提交涉及的文件。

相对 e26abad

  • mobile/account-service/config/scripts/零改动
  • pc-client/src/store/pc-client/src/layout/MainContentWrap.tsxpc-client/src/pages/chat/queryChat/ChatFooter/useSendMessage.tspc-client/src/pages/chat/queryChat/useHistoryMessageList.tsx零改动
  • pc-client/electron/:仅既有 windowManage.tsminWidth=1080minHeight=680B-171 特批),本卡未再改

未测(缺外部条件,禁止写成通过)

  • 测试账号:无有效工号+密码,未登录
  • Android ARM64 真机:产物仅 arm64-v8a,未安装、未点验
  • 工号登录 / 会话同步 / 好友群组 / 文字图片文件语音 / 断线重连 / 录音取消 / 50–60 秒时限 / 未听红点 / 安卓语音通话
  • PC 人工交互:置顶、删除、断网恢复、1080×680 稳定性、双向收发

最小所需:管理员给测试工号;真机装 app-release.apkPC 装 畅联_1.0.2.exe;两工号同时登录做一轮双向收发。

安装与回退(本机产物,未入库)

安装:

  • Android:把 app-release.apk 拷到 ARM64 真机安装(包名 io.openim.flutter.demo,会覆盖同包名旧包)。
  • PC:运行 畅联_1.0.2.exe

回退代码:按上文 git revert 顺序。回退安装包:卸载本包 / 装回旧版安装包。现网服务与旧 mobile/ 不受影响。

风险清单

  • OpenIM 许可书面结论未落;未换标,label 仍 F-DEMO
  • APK 仍用上游 openim keystore;正式试用前需换正式签名
  • PC extraResources 目录缺失(构建跳过)
  • Electron 22 偏旧;内网地址写死 192.168.200.11
  • 全量 analyze / tsc 存量错误仍在,不作为本卡回归通过依据

功能质检与视觉审核须另排。本卡不宣布跨端运行验收通过。