Files
brainwave/docs/environment.md
T

179 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 本地开发环境基线
> 状态:已从当前主机实测
> 最后核验:2026-08-04
> 适用范围:`D:\OPC\brainwave` 的 Android 开发、构建和设备验证
本文件记录项目当前可用的本地工具链,不是期望环境清单。后续实现必须先使用这里已经确认的能力;需要升级或安装新工具时,应说明原因并在完成后更新本文件。
为避免泄密,本文件不记录主机名、设备序列号、Git 用户邮箱、完整 `PATH`、代理地址、密钥、令牌或用户级配置内容。
## 1. 主机环境
| 项目 | 实测值 |
|---|---|
| 操作系统 | Microsoft Windows 10 专业版,10.0.19045,Build 19045 |
| 架构 | 64 位 / amd64 |
| PowerShell | 7.3.12,Core Edition |
| 区域 | `zh-CN` |
| 时区 | `China Standard Time` |
| CPU | Intel Core i7-14650HX |
| 逻辑处理器 | 24 |
| 内存 | 15.8 GiB |
| Hypervisor | 已检测到(`HypervisorPresent=True`) |
| 工作区磁盘 | `D:`,检测时可用约 49.9 GiB |
环境结论:硬件和 Hypervisor 能满足 Android 构建;当前没有 Android Emulator 包,因此 Hypervisor 暂时不构成可用模拟器环境。
## 2. 仓库与终端工具
| 项目 | 实测值 |
|---|---|
| 仓库路径 | `D:\OPC\brainwave` |
| Git | `2.49.0.windows.1` |
| 默认分支 | `main`,跟踪 `origin/main` |
| 检测起点提交 | `fdb20b8` |
| `core.autocrlf` | `true` |
| `core.longpaths` | 未显式设置 |
| Python | `3.10.11`,`C:\Python310\python.exe` |
环境文件写入前,仓库没有 Gradle Wrapper、`build.gradle*`、`settings.gradle*` 或根 `AGENTS.md`。这些属于 Android 工程初始化阶段的交付物,不应被误认为已存在。
Windows 路径可能较长;如果后续依赖缓存或生成代码触发路径长度错误,应优先缩短包/生成目录或评估仓库级长路径配置,并把实际决定写入[决策记录](decisions.md)。
## 3. Java
| 项目 | 实测值 |
|---|---|
| `JAVA_HOME` | `D:\jdk17` |
| Java | Eclipse Temurin OpenJDK `17.0.13+11` |
| `java.exe` | `D:\jdk17\bin\java.exe` |
| `javac` | `17.0.13` |
当前 Android 构建必须优先使用该 JDK 17。不要在项目脚本中硬编码个人绝对路径;Wrapper/Gradle 应读取 `JAVA_HOME`,CI 则独立配置同一主版本。
## 4. Android SDK
`ANDROID_HOME` 和 `ANDROID_SDK_ROOT` 均已设置为:
```text
C:\Users\ila20\AppData\Local\Android\Sdk
```
已确认组件:
| 组件 | 版本/状态 |
|---|---|
| Android SDK Platform | Android 14,API 34,Revision 3 |
| Build Tools | `34.0.0` |
| Platform Tools | `37.0.0` |
| ADB | `1.0.41`,Version `37.0.0-14910828` |
| Command-line Tools | `22.0` |
| Android CLI | `1.0.15985488` |
| Android Emulator | 未安装 |
| AVD | 不可用;没有 Emulator 包 |
SDK 许可证目录存在,包含 Android SDK 相关许可证文件。这里只记录文件名存在,不复制许可证哈希或用户配置。
首次环境检测运行 Android CLI 时,该工具完成了自身嵌入式组件解包,并尝试发送匿名指标;指标请求因连接超时失败。没有通过该命令安装新的 Android platform、build-tools、system image 或项目依赖。以后调用 Android CLI 应使用关闭指标的选项,并且不能把这次结果视为外网稳定可用的证据。
## 5. Android Studio 与命令行开发
| 项目 | 实测值 |
|---|---|
| Android Studio | 标准安装位置、注册表和开始菜单均未发现 |
| JetBrains Toolbox | `3.6.3.86383` 已安装 |
| Toolbox 中 Android Studio | 未发现 |
| 全局 `gradle` | 未在 `PATH` 中发现 |
| 全局 `kotlinc` | 未在 `PATH` 中发现 |
Android Studio 不是当前环境的可用前提。项目必须先支持 PowerShell + Gradle Wrapper 的命令行构建、测试和安装;以后安装 IDE 只能作为开发体验增强,不能成为 CI 或代理验证的隐式依赖。
## 6. Gradle 本地缓存
虽然没有全局 Gradle,本机已有可运行的 Wrapper 分发缓存:
| 项目 | 实测值 |
|---|---|
| 缓存的 Gradle 分发 | `gradle-8.2-bin` |
| 已验证 Gradle | `8.2` |
| Gradle 使用的 JVM | Temurin `17.0.13` |
| 缓存的 Android Gradle Plugin | `8.2.0` |
| 用户级 `~/.gradle/gradle.properties` | 不存在 |
项目初始化应提交 `gradlew`、`gradlew.bat`、`gradle/wrapper/gradle-wrapper.jar` 和版本明确的 `gradle-wrapper.properties`。所有项目命令使用:
```powershell
.\gradlew.bat <task>
```
不要要求用户安装全局 Gradle。当前缓存能证明 Gradle 8.2 本体可运行,但不能证明 Compose、Kotlin、Hilt、Room 等全部 Maven 依赖已离线缓存;第一次构建仍需实际验证。
## 7. 已连接 Android 真机
检测时存在 1 台已授权的物理设备。为避免持久化设备标识,本文件不记录序列号。
| 项目 | 实测值 |
|---|---|
| 厂商/型号 | OnePlus `PKG110` |
| Android | 16 |
| API Level | 36 |
| ABI | `arm64-v8a` |
| 物理分辨率 | `1264 × 2780` |
| 当前覆盖分辨率 | `1080 × 2376` |
| 物理/覆盖密度 | `560 / 480 dpi` |
当前设备可用于 `adb` 安装、手工验收和 `connectedDebugAndroidTest`。测试脚本不得硬编码序列号;设备可能随时断开,纯 JVM 门禁必须独立可运行。
## 8. 网络与代理状态
- `HTTP_PROXY`:已设置,值未记录。
- `HTTPS_PROXY`:已设置,值未记录。
- `NO_PROXY`:未设置。
- Android CLI 指标请求曾连接超时。
结论:任何需要下载 Gradle、Maven 依赖或 SDK 组件的步骤都必须以实际命令结果为准。不得因为代理变量存在就宣称网络可用,也不得把代理地址写入仓库。
## 9. 当前实现基线
在环境发生变化前,Android 工程应遵守:
1. 使用现有 Temurin JDK 17。
2. 使用项目自带 Gradle Wrapper,不依赖全局 `gradle` 或 `kotlinc`。
3. 首次可构建配置只能依赖已安装的 SDK Platform 34 和 Build Tools 34.0.0;若模板要求更高版本,应先记录差异,再决定调整模板或安装 SDK。
4. 命令行构建是必须能力,不假设 Android Studio 存在。
5. 仪器测试优先使用已连接的 API 36、arm64 真机;不假设 Emulator/AVD 存在。
6. 不自动安装系统级工具、SDK 平台或模拟器;确需新增环境能力时,先说明影响。
7. 发布时的 `targetSdk` 和商店要求是独立发布门禁,不能因为本机只有 Platform 34 就永久锁定;工具链升级后必须更新本文件和相关 ADR。
## 10. 已知缺口
- Android 工程和 Gradle Wrapper 尚未创建。
- Android Studio 未安装。
- Android Emulator、system image 和 AVD 不可用。
- 本机只确认安装了 Android Platform 34 / Build Tools 34.0.0。
- Maven 依赖能否完整离线解析尚未验证。
- 代理已配置,但外部仓库和 Android CLI 网络连通性尚未验证。
- 没有根 `AGENTS.md` 和可执行的 `verifyLocal` 聚合任务。
这些缺口分别由[实施计划](implementation-plan.md)的 P0 和[质量门禁](quality-gates.md)处理。环境缺口不是跳过验证的理由;无法运行的门禁必须在交付报告中准确说明。
## 11. 复核命令
以下命令用于更新本文件时复核,输出必须人工脱敏后才能写入仓库:
```powershell
Get-CimInstance Win32_OperatingSystem
$PSVersionTable
git --version
java -version
javac -version
Get-ChildItem $env:ANDROID_HOME\platforms -Directory
Get-ChildItem $env:ANDROID_HOME\build-tools -Directory
& "$env:ANDROID_HOME\platform-tools\adb.exe" version
& "$env:ANDROID_HOME\platform-tools\adb.exe" devices -l
.\gradlew.bat --version # Wrapper 创建后
```
禁止把 `Get-ChildItem Env:`、用户级 Gradle 属性、ADB 私钥或未经筛选的系统信息原样提交。