Files
conti-docs/flutter-app/15-flutter-sdk-cli.md
T

274 lines
13 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.
# 15. Flutter SDK CLI:官方 SDK 与 OpenHarmony SDK 速查
本文是本仓库的 **Flutter 命令行总手册**:先记录官方 Flutter SDK 的通用开发命令,再标记 CPF-Flutter OpenHarmony(OHOS)SDK 所增加的命令、环境和限制。它不是只讲 OHOS 的手册。
同一套 Dart / Flutter 业务代码通常使用相同的 CLI;区别主要在可用目标平台、原生构建工具、构建产物及插件实现。开发前先选定本次终端使用的 SDK,避免官方 Flutter 与 CPF-Flutter 混用。
> 本文是开发操作指南,不替代产品上线验收。首版正式交付范围仍以 [README](./README.md) 所述 Android / iOS 为准;OHOS 的真机、插件和原生能力须分别验收。
## 1. 先选 SDK:官方 Flutter 还是 OHOS Flutter
| 目标 | 应使用的 SDK | 典型命令 |
| --- | --- | --- |
| Android、iOS、Web、Windows、macOS、Linux | 官方 Flutter SDK | `flutter run`、`flutter build apk`、`flutter build appbundle`、`flutter build ipa`、`flutter build web` 等 |
| OpenHarmony | CPF-Flutter OHOS SDK | `flutter run -d <OHOS设备>`、`flutter build hap` |
| 同时维护 Android / iOS / OHOS | CPF-Flutter OHOS SDK(项目和插件须完成 OHOS 兼容验证) | `flutter run -d <对应设备>`、按目标使用 `build apk` / `build hap` |
检查当前终端实际使用哪个 SDK:
```powershell
Get-Command flutter -All
flutter --version
```
不要把两个 SDK 的 `bin` 目录同时放在 `PATH` 前部并期待 Flutter 自动切换。`flutter` 命令只会使用 PATH 中排在最前的那个 SDK。需要明确切换时,调整 PATH、使用 FVM,或直接用目标 SDK 的 `flutter.bat` 完整路径执行。
### 官方 Flutter SDK 的通用命令
以下命令来自 Flutter CLI 本身,官方 Flutter SDK 与 CPF-Flutter OHOS SDK 都会保留(具体平台能力由当前 SDK 与目标设备决定):
| 场景 | 命令 | 说明 |
| --- | --- | --- |
| 查看版本 | `flutter --version` | 确认实际 SDK 与 Dart 版本 |
| 检查环境 | `flutter doctor -v` | 检查平台工具链与已连接设备 |
| 配置 SDK | `flutter config --<key> <value>` | 查看:`flutter config --list` |
| 新建 App | `flutter create --org <org> <appName>` | 默认创建当前 SDK 支持的平台 |
| 列出设备 | `flutter devices` | 获取 `deviceId` |
| 启动调试 | `flutter run -d <deviceId>` | 构建、安装、运行、连接调试器 |
| 连接已运行应用 | `flutter attach -d <deviceId>` | 不重新安装应用 |
| 截屏 | `flutter screenshot -d <deviceId> -o .\screen.png` | 默认截取设备完整屏幕 |
| 静态分析 | `flutter analyze` | 按 `analysis_options.yaml` 分析代码 |
| 执行测试 | `flutter test` | 执行 unit / widget 测试 |
| 获取依赖 | `flutter pub get` | 按 `pubspec.yaml` 解析依赖 |
| 更新依赖 | `flutter pub upgrade` | 更新允许范围内的依赖版本 |
| 查看依赖状态 | `flutter pub outdated` | 查看可升级依赖 |
| 清理项目 | `flutter clean` | 清理当前工程的构建与工具缓存 |
| 修复全局缓存 | `flutter pub cache repair` | 重新下载全局 Pub 缓存中的包 |
| 清空全局缓存 | `flutter pub cache clean` | 影响所有 Flutter / Dart 项目,最后手段 |
### 官方 Flutter SDK 的常见构建目标
这些是官方 SDK 的常用构建命令;是否可用取决于该平台的工具链与项目是否已生成对应目录。
```powershell
flutter build apk --debug # Android 测试 APK
flutter build apk --release # Android 正式 APK
flutter build appbundle --release # Android Play 上架 AAB
flutter build ipa --release # iOS IPA(仅 macOS + Xcode 环境)
flutter build web --release # Web 静态产物
flutter build windows --release # Windows 桌面应用(Windows + Visual Studio)
flutter build macos --release # macOS 桌面应用(仅 macOS)
flutter build linux --release # Linux 桌面应用(仅 Linux)
```
`flutter assemble` 是底层 Flutter 资源构建入口,通常由上述 `flutter build <target>` 自动调用;日常不应把它当作完整应用打包命令。
## 2. 当前项目状态
`app/` 已经是一个包含 OpenHarmony 平台目录的 Flutter 项目,**不要在 `app/` 目录重新执行 `flutter create`**。这会以模板补全/修复工程,可能改写已有原生配置。
| 项目 | 当前值 / 状态 |
| --- | --- |
| Flutter SDK | CPF-Flutter `3.41.10-ohos-1.0.0` |
| Flutter SDK 路径 | `C:\Users\A200477427\Developments\flutter_flutter` |
| OHOS 工程 | `app/ohos/` 已存在 |
| DevEco OHOS SDK | `C:\Program Files\Huawei\DevEco Studio\sdk` |
| 已验证模拟器 | `127.0.0.1:5555`,`ohos-x64` |
| Flutter OHOS 开关 | 已启用:`enable-ohos` |
## 3. OpenHarmony 专用:一次性环境配置(Windows)
CPF-Flutter 不是官方 Flutter release channel,因此 `flutter doctor` 可能提示非标准 remote / channel。这是该 OHOS SDK fork 的预期提示;不要为消除这条提示切回标准 Flutter SDK。
### Flutter 配置
```powershell
flutter config --enable-ohos
flutter config --ohos-sdk "C:\Program Files\Huawei\DevEco Studio\sdk"
flutter config --ohpm-home "C:\Program Files\Huawei\DevEco Studio\tools\ohpm"
```
### Windows 用户级 PATH
将下面两个目录加到**用户环境变量** `Path`,然后重启 PowerShell、VS Code / Android Studio:
```text
C:\Program Files\Huawei\DevEco Studio\tools\ohpm\bin
C:\Program Files\Huawei\DevEco Studio\tools\hvigor\bin
```
可选地设置:
```text
OHPM_HOME=C:\Program Files\Huawei\DevEco Studio\tools\ohpm
```
仅对当前 PowerShell 临时生效时:
```powershell
$env:Path = "C:\Program Files\Huawei\DevEco Studio\tools\ohpm\bin;C:\Program Files\Huawei\DevEco Studio\tools\hvigor\bin;$env:Path"
```
### 验证
```powershell
flutter doctor -v
flutter devices
```
必须看到:
```text
[✓] HarmonyOS toolchain - develop for HarmonyOS devices
```
若未看到,优先检查 `ohpm` 和 `hvigorw` 是否能在新打开的 PowerShell 中直接执行,以及 DevEco Studio 是否安装了 OHOS SDK。
## 4. OpenHarmony 专用:日常运行、构建与安装
所有项目命令从 `app/`(包含 `pubspec.yaml` 的目录)运行:
```powershell
cd C:\Users\A200477427\Developers\Continental-App\conti-retail-app\app
```
### 模拟器运行
```powershell
flutter pub get
flutter devices
flutter run -d 127.0.0.1:5555
```
`flutter run` 会构建、安装、启动应用,并连接调试器。运行期间:`r` 热重载、`R` 热重启、`q` 退出调试。
### HAP 构建
```powershell
# x64 模拟器测试包
flutter build hap --debug --target-platform ohos-x64
# ARM64 真机测试包(默认目标也为 ohos-arm64)
flutter build hap --debug --target-platform ohos-arm64
# ARM64 真机正式包
flutter build hap --release --target-platform ohos-arm64
```
日常使用 SDK 自带的 OHOS Engine,不需 `--local-engine`。仅在自行编译了兼容 OHOS 的 Flutter Engine 时才传入该路径:
```powershell
flutter build hap --debug --target-platform ohos-arm64 --local-engine="C:\path\to\ohos_debug_engine"
```
### 安装、附加调试和截图
```powershell
# 构建并安装到指定设备(本机 SDK 的实际参数为 -d)
flutter install -d 127.0.0.1:5555 --debug
# 附加到已运行应用,不重新构建/安装
flutter attach -d 127.0.0.1:5555
# 截取完整设备屏幕
flutter screenshot -d 127.0.0.1:5555 -o .\ohos-screenshot.png
```
部分历史 OHOS SDK 文档将已有 HAP 的安装写为 `flutter install -t <deviceId> <hap路径>`。应以当前 SDK 的 `flutter help install` 为准;本项目当前 SDK 显示的是 `-d` / `--device-id`,且不将 HAP 路径作为该命令的位置参数。
## 5. OpenHarmony 扩展命令速查
`[]` 和 `<>` 均是文档占位符,实际执行时不要输入。
| 指令 | 作用 | 常用示例 |
| --- | --- | --- |
| `doctor` | 检查开发环境 | `flutter doctor -v` |
| `config` | 配置 OHOS SDK 与工具 | `flutter config --enable-ohos` |
| `create`(App) | 创建独立多端应用 | `flutter create --platforms ohos,android,ios --org com.conti my_app` |
| `create`(Module) | 创建嵌入原生应用的 Flutter module | `flutter create -t module my_module` |
| `create`(Plugin) | 创建 MethodChannel 插件 | `flutter create -t plugin --platforms ohos,android,ios my_plugin` |
| `create`(Plugin FFI) | 创建基于 Dart FFI 的插件 | `flutter create -t plugin_ffi --platforms ohos,android,ios my_plugin_ffi` |
| `devices` | 查找已连接设备 | `flutter devices` |
| `assemble` | 构建 Flutter 底层资源 | `flutter assemble`(通常由 `build hap` 自动调用) |
| `build hap` | 构建 OHOS HAP 安装包 | `flutter build hap --debug` / `--release` |
| `run` | 构建、安装、启动并调试 | `flutter run -d <deviceId>` |
| `install` | 构建并安装到设备 | `flutter install -d <deviceId> --debug` |
| `attach` | 附加到已运行应用 | `flutter attach -d <deviceId>` |
| `screenshot` | 截取设备屏幕 | `flutter screenshot -d <deviceId> -o .\screen.png` |
| `pub get` | 获取当前项目依赖 | `flutter pub get` |
| `clean` | 清理当前项目构建缓存 | `flutter clean` |
| `pub cache` | 管理全局 Pub 缓存 | `flutter pub cache repair` |
| `pub cache clean` | 清空全局 Pub 缓存 | `flutter pub cache clean` |
### 依赖与缓存的正确清理顺序
```powershell
# 首选:只影响当前项目
flutter clean
flutter pub get
# 缓存确实损坏时:修复整机 Pub 缓存
flutter pub cache repair
# 最后手段:清空整机所有 Pub 缓存,再重新下载
flutter pub cache clean
flutter pub get
```
`flutter pub cache clean` 会影响电脑上的所有 Flutter / Dart 项目,不能作为普通构建失败时的第一反应。
## 6. CPF-Flutter OHOS SDK 与标准 Flutter SDK 的区别
| 维度 | 标准 Flutter SDK | CPF-Flutter OHOS SDK |
| --- | --- | --- |
| 维护与发行 | Flutter 官方渠道及其 Engine | CPF-Flutter 维护的 OpenHarmony 适配发行版 |
| 新增目标平台 | Android、iOS、Web、桌面等 | 在 Flutter 工具链中增加 `ohos` |
| 原生工程目录 | `android/`、`ios/` 等 | 额外生成 `ohos/` |
| 产物 | Android APK/AAB、iOS IPA 等 | OpenHarmony `.hap` |
| 构建命令 | `flutter build apk`、`appbundle`、`ipa` 等 | `flutter build hap --debug` / `--release` |
| 原生构建工具 | Gradle、Xcode 等 | DevEco Studio SDK、`ohpm`、`hvigorw` |
| 设备发现/运行 | `flutter devices` / `flutter run` | 命令保持相同,但发现并运行 OHOS 实机/模拟器 |
| 插件实现 | 各平台的官方 embedding / API | 插件必须有 OHOS 适配实现;并非所有 pub.dev 插件天然可用 |
| SDK 版本标识 | 例如 `3.41.x stable` | 例如 `3.41.10-ohos-1.0.0`,带 OHOS fork 后缀 |
### 不变的部分
- Dart、Flutter Widget、`pubspec.yaml`、`flutter pub get`、Widget / 单元测试的开发体验基本相同。
- `flutter devices`、`flutter run`、`flutter attach`、`flutter screenshot` 仍是主要 CLI 入口。
- 应用业务层不应因为增加 OHOS 平台而把平台判断散落到 feature 中;平台差异应集中在插件或原生集成层。
### 需要额外注意的部分
1. **插件兼容性不是自动获得的。** 每个含原生能力的依赖(相机、扫码、WebView、推送、存储、权限等)都必须确认其是否有 OHOS implementation,并在 OHOS 模拟器与真机分别验证。
2. **OHOS 使用 DevEco 构建链。** `flutter build hap` 内部会准备 Flutter 资源,再由 `ohpm` / `hvigorw` 完成 HAP 组装;前述工具未在 PATH 时 `flutter doctor` 会失败。
3. **模拟器与真机架构不同。** 当前模拟器是 `ohos-x64`;大多数真机是 `ohos-arm64`。构建/测试时应明确目标。
4. **本地 Engine 是高级路径。** `--local-engine` 仅用于 SDK / Engine 开发或特定兼容性验证,普通业务开发使用随 CPF-Flutter SDK 提供的 Engine。
5. **Windows 路径约束。** CPF-Flutter 文档提示,在 Windows 上 Flutter 项目与依赖插件项目应位于同一磁盘分区,避免宿主构建/插件解析出现路径问题。
## 7. 故障排查顺序
```text
flutter doctor -v
↓
确认 HarmonyOS toolchain 为 ✓
↓
flutter devices
↓
确认目标设备 ID 与架构
↓
flutter clean && flutter pub get
↓
flutter run -d <deviceId>
```
- `ohpm` / `hvigorw` 缺失:确认第 3 节 PATH 配置,重开终端后再执行 `flutter doctor -v`。
- 设备未出现:确认模拟器已启动或真机已开启开发者模式/USB 调试,然后再次 `flutter devices`。
- 构建残留导致异常:先 `flutter clean`,再 `flutter pub get`;不要直接清除全局缓存。
- 某个原生功能不可用:先检查对应插件 OHOS 兼容性与 `ohos/` 侧实现,不要默认 Dart 层代码跨平台即代表原生能力可用。
## 8. 来源与版本原则
- [CPF-Flutter / flutter_flutter](https://gitcode.com/CPF-Flutter/flutter_flutter):OHOS Flutter SDK、支持命令与版本分支。
- [OpenHarmony-SIG flutter_flutter README](https://gitee.com/openharmony-sig/flutter_flutter/blob/master/README.en.md):环境要求、命令与 OpenHarmony 适配说明。
- 本机行为以 `flutter --version`、`flutter help <command>` 和 `flutter doctor -v` 为准。OHOS fork 版本演进很快,历史文档中的命令参数若与当前 CLI 帮助不一致,应以当前 CLI 为准。