# 2026-09-22 ## 排查:API 环境配置(`lib/core/network/api_env.dart`) 用户提问:`kProdBaseUrl` / `kLocalBaseUrl` 如何工作、如何保证正式包连真实后端。未改动代码,仅分析并给出改进建议。 ### 机制(已确认) - `baseUrl` getter 三级优先级:`--dart-define=API_BASE_URL`(`String.fromEnvironment`,编译期)> `!kDebugMode` 时 `kProdBaseUrl` > 默认 `kLocalBaseUrl`。 - 消费方:`dio_client.dart` 的 `dioProvider` 把 `baseUrl` 塞进 `BaseOptions.baseUrl`;API 层(如 `auth_api.dart`)只用相对路径 `/auth/login`,由 dio 拼接。 - 正式包的保证来自**编译期常量折叠**:release 下 `kDebugMode == false`,`return kLocalBaseUrl` 成为死代码被 tree-shake,本地地址字符串不会进入产物。 ### 发现的 3 个风险点(重要,待处理) 1. **`--dart-define` 可击穿保证**:其优先级最高且 release 同样生效。`docs/Flutter打包与真机安装指南.md` 第 203 行就给出了 `flutter build apk --release --dart-define=API_BASE_URL=http://192.168.50.182:12345/api`,一旦复制粘贴或 CI 残留,会产出指向局域网的"正式包"。 2. **profile 模式会连生产**:`kDebugMode` 在 profile 下为 false → 走 `kProdBaseUrl`。`flutter run --profile`(做性能验证时常用)直接打生产库。建议改用 `kReleaseMode` 显式判断。 3. **配置与文档/注释不一致,且 iOS 会直接失败**: - 代码 `kProdBaseUrl = 'http://103.36.220.231:12345/api'`(**明文 HTTP + 裸 IP + 非标端口**),但同文件注释写"生产环境 HTTPS",`docs/Flutter打包与真机安装指南.md` 第 178 行写的是 `https://accounting.aqroid.cn/api`。 - Android 端能跑,是因为 `android/app/src/main/AndroidManifest.xml` 开了 `android:usesCleartextTraffic="true"`(而打包指南第 350 行却说"生产是 HTTPS,其实可以不开")。 - **iOS 端 `ios/Runner/Info.plist` 中完全没有 `NSAppTransportSecurity` 配置**,请求该 http 地址会被 ATS 拦截(URLError -1022),iOS 正式包无法联网。 - Web 端若部署在 HTTPS 页面下,浏览器会以 mixed content 拦截 http 请求(另有 CORS 问题)。 - 硬编码裸 IP:换服务器/加域名/上 HTTPS 都必须重新打包发版。 ### 给用户的改进方向(尚未实施) - `baseUrl` 判断改为显式 `kReleaseMode`,并处理 profile(如新增 `kProfileBaseUrl` 或按需回退)。 - 生产改用域名 + HTTPS,同步更新 Android 明文流量开关与 iOS ATS 例外。 - 多环境改用 `--dart-define-from-file=config/prod.json`,避免长命令行被误复制。 - 增加运行时自检:release 下若 `API_BASE_URL` 非空则报错/显著日志;启动时打印当前 baseUrl。 --- ## 实施:App 名称与图标(已完成) 用户提供品牌原图位置 `D:\nzy\workspace_nzy\AI-accounting-soft-uniApp\static\images\logo.png`(与项目内 `assets/images/logo.png` 同一张),要求改名 + 换图标。 ### 关键结论:原 logo 不能作图标 该图为 1120×928 贴纸海报(熊头 + 3 只狗 + "强宝爱记账"5 个大字),带虚化底纹。实测用洪水填充/PIL 去背景**失败**(底纹色差超出阈值,水印残留),且缩小到 48px 后文字糊成一团。已明确告知用户并改为同画风专用素材。 ### 已完成改动 | 内容 | 文件 | 值 | |---|---|---| | Android 桌面名 | `android/app/src/main/AndroidManifest.xml` | `android:label="强宝爱记账"` | | iOS 桌面名 | `ios/Runner/Info.plist` | `CFBundleDisplayName` = `强宝爱记账` | | Web 标签页/主屏名/描述 | `web/index.html` | `