From bce8d37d885c58f787754394075667174eadcf41 Mon Sep 17 00:00:00 2001
From: Zhou Weidong <502333560@qq.com>
Date: Tue, 20 Oct 2026 20:21:28 +0800
Subject: [PATCH] =?UTF-8?q?docs(plans):=20=E7=95=99=E7=97=95=20K68=20?=
=?UTF-8?q?=E7=BC=96=E8=AF=91=E6=9C=9F=E6=8E=A5=E5=8F=A3=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/plans/INBOX.md | 86 ++++++++++++++++++++++--------------------
docs/plans/PROGRESS.md | 30 +++++++++++++++
2 files changed, 76 insertions(+), 40 deletions(-)
diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md
index 604be5a..c927f3f 100644
--- a/docs/plans/INBOX.md
+++ b/docs/plans/INBOX.md
@@ -1,59 +1,65 @@
# INBOX
-## [已处理] K67-A 删除无引用代码与无用资源
+## [已处理] K68-A 指定 API_BASE_URL 时跳过地址探测
-### 扫描结论
+### 背景
-按「文件是否被 import/part/export 引用」做了全量可达性分析(含 `test/`),以下是彻底无引用的文件。
+正式包通过 `--dart-define=API_BASE_URL=http://39.162.50.99:8081` 指定接口地址,
+但 `AppConfig.probeAndApplyBaseUrl()` 不支持构建期地址:它只按
+`127.0.0.1 → 192.168.31.187 → 公网` 探测,探测结果又会覆盖 `apiBaseUrl`。
-### 要删除的 Dart 文件(10 个)
+后果:正式包启动时仍会去探测局域网;若公网暂时不可达,会回落到开发机地址
+`192.168.31.187`,正式包里所有请求都指向错误服务器。
-- `lib/core/widgets/library_drama_tile.dart`
-- `lib/pages/auth/auth_binding.dart`
-- `lib/pages/discover/category_dramas_page.dart`
-- `lib/pages/discover/widgets/category_grid.dart`
-- `lib/pages/discover/widgets/ranking_section.dart`
-- `lib/pages/home/home_browse_view.dart`
-- `lib/pages/home/home_browse_logic.dart`
-- `lib/pages/home/widgets/home_browse_header.dart`
-- `lib/pages/home/widgets/home_menu_sheet.dart`
-- `lib/pages/mine/widgets/continue_watching_card.dart`
+### 目标
-说明:`auth_form_widgets.dart`、`auth_widgets.dart`、`player_view_actions.dart`、
-`home_feed_overlay_parts.dart`、`player_overlay_parts.dart` 是 `part` 文件,**不要删**。
+- `API_BASE_URL` 已指定时,**不再探测**,直接使用该地址。
+- 运行时地址(用户在 App 内手动改的服务器)仍保持最高优先级,不被构建期地址覆盖。
+- 未指定 `API_BASE_URL` 时,探测逻辑保持现状。
-### 要删除的安卓资源
+### 实现
-- `android/app/src/main/res/drawable-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/splash_icon.png`
- (K60 遗留,已无任何 xml 引用)
-- `android/app/src/main/res/values/colors.xml` 里的
- `#FFF1E5`(自适应图标已改用
- `@mipmap/ic_launcher_background`,无引用)
+1. `lib/core/config/app_config.dart` 的 `probeAndApplyBaseUrl`:
-### 要删除的本机无用资源(未纳入 git)
+```dart
+static Future probeAndApplyBaseUrl({
+ Future Function(String baseUrl)? probe,
+ String? fallbackBaseUrl,
+ String? compiledOverride, // 仅测试注入用
+}) async {
+ final compiled = compiledOverride ?? compiledBaseUrl;
+ if (compiled.isNotEmpty) {
+ // 构建期已指定接口地址:直接使用,避免正式包回落开发机地址
+ if (_runtimeBaseUrl.isEmpty) applyRuntimeBaseUrl(compiled);
+ return;
+ }
+ // …原有探测逻辑不变
+}
+```
-- `assets/media/`(21 个 mp4,约 315MB)
-- `assets/images/`(4 张旧海报,约 3.7MB)
+2. `lib/main.dart` 不改(已 `AppConfig.ready = AppConfig.probeAndApplyBaseUrl()`)。
+3. 测试 `test/config/` 补充:
+ - 传 `compiledOverride` 时:`probe` 回调一次都不会被调用,`AppConfig.apiBaseUrl` 等于该地址
+ - 已存在运行时地址且传 `compiledOverride` 时:运行时地址不被覆盖
+ - 不传 `compiledOverride`(默认空)时:探测逻辑与现有测试保持一致
+ - 测试结束复位运行时地址
-这两个目录已被 `.gitignore` 忽略、pubspec 也未声明,删除只清理本机磁盘,不产生提交内容。
+### 验收
-### 不要动
+- 门禁:`dart analyze lib test` 零告警、`flutter test` 全过、`flutter build apk --debug` 成功。
+- 复核用正式包构建命令(Trae 负责重打,不需要 Codex 执行):
-- `assets/fonts/`(Outfit / PlusJakartaSans):虽然当前 pubspec 未声明,
- 但代码里仍在用这两个 family,删除/启用另行决策,本批保持原样。
-- `assets/icon/fruitshorts.png`:图标设计源图,保留。
-- `android/app/src/main/res/drawable*/splash.png`、`background.png`、`android12splash.png`、
- `ic_launcher_foreground.png`、`mipmap-*` 全部保留(仍被引用)。
+```
+flutter build apk --release --target-platform android-arm,android-arm64 \
+ --dart-define=API_BASE_URL=http://39.162.50.99:8081
+```
-### 任务
+### Git
-1. 删除上述文件与资源;删除后全局搜索确认无残留引用。
-2. 门禁:`dart analyze lib test` 零告警、`flutter test` 全过、`flutter build apk --debug` 成功。
-3. 从 `develop` 拉 `chore/cleanup-unused`,只提交 Dart 与安卓资源删除,**禁止 `git add -A`**。
-4. 提交:`chore(cleanup): 删除无引用代码与无用资源`,作者 `Zhou Weidong <502333560@qq.com>`。
-5. `--no-ff` 合回 `develop` 并 push;`FruitServer/docs/plans/PROGRESS.md` 追加 K67-A 留痕
- (列出删除清单、释放体积、门禁输出)。
+- 从 `develop` 拉 `fix/lock-compiled-base-url`。
+- 提交:`fix(config): 指定 API_BASE_URL 时跳过地址探测`,作者 `Zhou Weidong <502333560@qq.com>`。
+- `--no-ff` 合回 `develop` 并 push;`FruitServer/docs/plans/PROGRESS.md` 追加 K68-A 留痕。
### 约束
-- 全程中文;不改任何业务行为;完成后停住等待验收。
+- 全程中文;禁止 `git add -A`;不改探测候选顺序与超时;完成后停住等待验收。
diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md
index 024db55..d018553 100644
--- a/docs/plans/PROGRESS.md
+++ b/docs/plans/PROGRESS.md
@@ -22422,3 +22422,33 @@ Running Gradle task 'assembleDebug'...
```
解读:静态检查零告警,478 条测试全部通过,debug APK 构建成功。真机验收由用户执行。
+
+## 2026-10-20 ReelShort:K68-A 指定 API_BASE_URL 时跳过地址探测
+
+- 前置状态:K67-A 已完成并合并,develop 合并提交 `2c5ff35`。
+- 分支:`fix/lock-compiled-base-url`
+- 功能提交:`9ebb54e fix(config): 指定 API_BASE_URL 时跳过地址探测`
+- develop 合并提交:`51c3635 merge: 合并 K68-A 锁定编译期接口地址`,已推送。
+- `probeAndApplyBaseUrl()` 新增仅测试注入用的 `compiledOverride`;编译期地址非空时立即返回,不再发起任何候选探测。
+- 编译期地址仅在运行时地址为空时应用;用户运行时地址仍保持最高优先级,不会被 `API_BASE_URL` 覆盖。
+- 未指定编译期地址时,环回、开发机、公网的候选顺序、并行探测、超时与 fallback 行为均保持不变。
+
+测试:新增编译期地址零探测、运行时地址不被覆盖、空编译期地址继续原探测流程三条用例;测试结束复位运行时地址。
+
+门禁原始输出:
+
+```text
+$ dart analyze lib test
+Analyzing lib, test...
+No issues found!
+
+$ flutter test
+00:51 +481: All tests passed!
+
+$ flutter build apk --debug
+Running Gradle task 'assembleDebug'...
+ 8.4s
+✓ Built build/app/outputs/flutter-apk/app-debug.apk
+```
+
+解读:静态检查零告警,481 条测试全部通过,debug APK 构建成功。正式包由 Trae 按任务书命令重打并验收。