# mobile-next 构建与回退方法（docs/upstream）

## 前置环境

```bat
set JAVA_HOME=<JDK17 目录>
set ANDROID_HOME=<Android SDK 目录>
set PATH=%JAVA_HOME%\bin;<Flutter SDK 目录>\bin;%PATH%
set GRADLE_OPTS=-Xmx4096M
```

`mobile-next/android/local.properties` 需包含（本机路径，不入库）：

```
sdk.dir=<Android SDK 目录，反斜杠转义>
flutter.sdk=<Flutter SDK 目录，反斜杠转义>
```

首次依赖解析（生成 `.dart_tool`，不产生源码改动）：

```
cd mobile-next
flutter pub get
```

## 构建命令

```bat
flutter build apk --debug      :: 产物 build/app/outputs/flutter-apk/app-debug.apk
flutter build apk --release    :: 产物 build/app/outputs/flutter-apk/app-release.apk
```

- release 使用上游自带 keystore `android/app/openim`（alias/password 均为 `openim`），保留 OpenIM 标识与签名。
- 注意：上游 `android/app/build.gradle` 的 `ndk { abiFilters "arm64-v8a" }` 只打 arm64；如需 x86_64 模拟器联调，临时放开 `"x86_64"` 再还原（本地产物，不入库）。

## 本卡实测结果（2026-08-19，本机锁定环境）

| 构建 | 结果 | 产物 | 大小 | SHA256 |
|---|---|---|---|---|
| debug | 成功 | `app-debug.apk` | 109,454,925 B | `DD7D9700BC1F5830B7495875387948AAD536CA63FDC3EF66B4C0F4D152407B72` |
| release | 成功 | `app-release.apk` | 53,323,411 B | `4969AF4A4800A8E7C0B0C2F50687CB8C765925E4F2B3B7A53762D1D9E49CA604` |

> SHA256 与字节大小仅为**当次构建产物记录**，不是位级可复现承诺。APK 内嵌构建时间戳，换机/换次重跑时哈希必然不同；大小差通常在时间戳/元数据量级。可复现的是工具链、构建命令与包名/签名证书。B-149 复核重跑：debug 109,454,749 B（差 176 B）、release 53,323,375 B（差 36 B），签名证书 SHA-256 与上表一致。

APK 元数据（aapt badging）：package `io.openim.flutter.demo`，versionCode `180`，versionName `3.8.3`，minSdk 24 / targetSdk 33 / compileSdk 34。
release 签名（apksigner verify --print-certs）：CN=openim，证书 SHA-256 `1f38a82fb3c33be7951fb5d964ef5bd9c6c9bfc084ae1e2a8a40a0d1f44ae1fe`，与官方基线同一 keystore。

构建期告警（不影响产物）：Flutter Gradle 插件 apply-script 弃用提示；部分依赖 Kotlin metadata 版本（1.8.x）高于工程 Kotlin（1.9.23 预期 1.6.0/1.8.0）的警告，均属上游依赖组合特性，debug/release 均通过。

## 失败停止点

任一核心门禁失败即停止后续迁移，在本卡汇报并附错误证据，不得继续迁移。本阶段 debug/release 均构建成功，无失败步骤。

## 逐提交回退

本卡分支基于回退基线 `fa8584a`，主题提交相互独立，可单独回退：

| 主题 | 提交 | 回退命令 |
|---|---|---|
| 官方基线导入 + 双构建 | 8046ec7483d68f67011913da12e5e671479b5ff0 | `git revert 8046ec7483d68f67011913da12e5e671479b5ff0` 或 `git rm -r mobile-next` |
| SDK hotfix.12 接入 + 核心能力实测 | 2c9dab160eefcaa5a4ad76a24ec2948bffaccc7e | `git revert 2c9dab160eefcaa5a4ad76a24ec2948bffaccc7e` |

`2c9dab1` 实际包含 **5 个文件**：`mobile-next/pubspec.yaml`、`openim_common/pubspec.yaml`、`openim_live/pubspec.yaml`、`mobile-next/pubspec.lock`，以及实测记录文档 `docs/mobile-next-hotfix-sdk-verification.md`。`git revert` 会一并撤掉该文档，不只是 4 个依赖文件。

回退任一提交均不影响 `mobile/`、`pc-client/`、`account-service/`、现网服务器与已发布安装包。SDK hotfix 提交的手动回退：把上述 3 个 `pubspec.yaml` 中 `flutter_openim_sdk` 改回 `3.8.3+3` 后 `flutter pub get`（锁文件随之回写；实测记录文档需另行保留或删除）。
