在 Flutter 中创建一个新项目,同时支持 Android、iOS、macOS、Windows 和 Linux 平台,假设你已经安装了 Flutter SDK 和必要的开发工具(如 Android Studio、Xcode 等)。

安装 Flutter SDK

按照 Flutter 官网 下载并按照指南进行安装。

创建新项目

打开终端或命令提示符,使用以下命令创建一个新的 Flutter 项目:

1
flutter create my_flutter_app

这个命令会创建一个名为 my_flutter_app 的新目录,其中包含一个支持 AndroidiOS 的 Flutter 项目的初始模板。

启用桌面支持

默认情况下,Flutter 支持 Android 和 iOS。如果你想要为 macOS、Windows 和 Linux 添加支持,你需要为每个桌面平台启用支持。运行以下命令:

1
2
3
4
cd my_flutter_app
flutter config --enable-windows-desktop
flutter config --enable-macos-desktop
flutter config --enable-linux-desktop

这些命令会启用桌面平台的支持。在你启用桌面支持之后,你的项目目录中将包括针对每个桌面平台的特定代码和资源。

运行和构建应用

现在你可以尝试在各个平台上运行你的应用了。使用以下命令来运行对应平台的应用:

1
2
3
4
5
flutter run -d windows  # 运行 Windows 应用
flutter run -d macos # 运行 macOS 应用
flutter run -d linux # 运行 Linux 应用
flutter run -d android # 运行 Android 应用
flutter run -d ios # 运行 iOS 应用

各个平台的构建产物

flutter build 命令是用于构建和编译 Flutter 应用程序的重要工具。它可以将您的 Flutter 项目编译成可以在不同平台上运行的二进制文件或包。

在 Flutter 中,当你使用 flutter build 命令构建项目时,每个平台的构建产物(build artifacts)将会被存放在项目目录下特定的位置。

  1. 基本语法: flutter build <平台>
  2. 支持的平台:
    • apk: 构建 Android APK 文件
    • appbundle: 构建 Android App Bundle
    • ios: 构建 iOS 应用
    • web: 构建 Web 应用
    • windows: 构建 Windows 应用
    • macos: 构建 macOS 应用
    • linux: 构建 Linux 应用
  3. 常用选项:
    • –release: 构建发布版本(默认)
    • –debug: 构建调试版本
    • –profile: 构建性能分析版本
    • –split-debug-info: 分离调试信息
    • –obfuscate: 混淆代码
    • –target-platform: 指定目标平台架构
  4. 示例:
    • 构建 Android APK: flutter build apk
    • 构建 iOS 应用: flutter build ios
    • 构建 Web 应用: flutter build web
  5. 特殊用法:
    • flutter build aar: 构建 Android Archive (AAR) 文件,用于将 Flutter 模块集成到现有 Android 项目中
    • flutter build bundle: 构建 Flutter 资源包,通常用于自定义构建过程
  6. 构建过程: build 命令会执行以下步骤:
    • 解析项目依赖
    • 编译 Dart 代码
    • 生成平台特定的代码
    • 打包资源文件
    • 生成最终的二进制文件或包
  7. 注意事项:
    • 确保在项目根目录下运行命令
    • 不同平台可能需要额外的设置或工具(如 iOS 需要 Xcode)
    • 构建时间可能较长,特别是首次构建
  8. 优化技巧:
    • 使用 –split-debug-info 和 –obfuscate 选项可以减小应用大小并提高安全性
    • 定期清理构建缓存(flutter clean)可以解决一些构建问题

Android

基本命令

1
flutter build apk

对于 Android,构建产物默认位于:

1
<project directory>/build/app/outputs/flutter-apk/

在这个目录下,你可以找到 APK 文件(如 app-release.apk),这是发布到 Android 设备的文件。

构建不同架构的 APK

默认情况下,flutter build apk 会生成一个包含 armeabi-v7aarm64-v8a(32位和64位 ARM 架构)的 APK。如果你需要为其他架构(如 x86)构建 APK 或者想要减小 APK 文件大小,你可以使用 --split-per-abi 选项:

1
flutter build apk --split-per-abi

这将生成针对每个支持的 ABI 的单独 APK 文件,通常用于减少每个 APK 的大小,使其更适合特定设备类型。

构建完成后,APK 文件默认位于以下路径:

1
[project root]/build/app/outputs/flutter-apk/

在这个目录下,你会找到生成的 APK 文件,如:

  • app-release.apk:未分割 ABI 的发布版本 APK。
  • app-armeabi-v7a-release.apk:仅包含 armeabi-v7a 架构的发布版本 APK。
  • app-arm64-v8a-release.apk:仅包含 arm64-v8a 架构的发布版本 APK。

这些文件可以直接用于安装或分发。如果你使用的是 --debug--profile 选项,相应的文件名也会反映出来(例如 app-debug.apk)。

Android App Bundle
在 Flutter 中,构建一个 Android App Bundle (.aab 文件) 是一个常见的需求,特别是当你需要通过 Google Play 发布你的应用时。Android App Bundle 是 Google 推荐的发布格式,因为它允许 Google Play 根据用户的设备配置动态地生成并提供优化的 APK 包,从而减小应用的下载和安装大小。

要构建 Android App Bundle,你可以使用以下 Flutter 命令:

1
flutter build appbundle

构建完成后,App Bundle 文件默认位于以下路径:

1
[project root]/build/app/outputs/bundle/release/

在这个目录下,你会找到生成的 .aab 文件,通常命名为 app-release.aab

发布到 Google Play

生成的 .aab 文件是准备好上传到 Google Play 的。上传 App Bundle 而不是 APK 有几个好处:

  1. 大小优化:Google Play 会根据每个用户的设备生成并提供最适合的 APK,这通常会减少应用的下载和安装大小。
  2. 简化的版本管理:你只需上传一个 .aab 文件,Google Play 会处理不同设备所需的各种 APK 分发。
  3. 按需加载:你可以配置你的应用以按需加载资源和功能,进一步减少初始下载的大小。

注意事项

确保在构建 App Bundle 之前,你的应用满足所有必要的 Google Play 要求,包括但不限于适当的 AndroidManifest.xml 配置、API 级别要求和权限声明。此外,如果你的应用使用了特定的硬件或软件功能,确保这些功能在 AndroidManifest.xml 中正确声明。

iOS

基本命令

1
flutter build ios

对于 iOS,构建产物位于:

1
<project directory>/build/ios/iphoneos/

在这个目录中,你会找到一个 .app 目录,这是实际的应用程序包,通常用于模拟器或真实设备的测试。如果你使用 Xcode 进行归档,归档产物将会在 Xcode 的 Organizer 中。

macOS

基本命令

1
flutter build macos

对于 macOS,构建产物位于:

1
<project directory>/build/macos/Build/Products/Release/

这里你可以找到 .app 应用程序包,这是可以直接运行的 macOS 应用。

Windows

基本命令

1
flutter build windows

对于 Windows,构建产物位于:

1
<project directory>/build/windows/x64/runner/Release/

或者是 Debug 文件夹,取决于你构建的是发布版还是调试版。在这个目录下,你会找到 .exe 文件及其相关的依赖文件。

Linux

基本命令

1
flutter build linux

对于 Linux,构建产物位于:

1
<project directory>/build/linux/x64/release/bundle/

在这个路径中:

  • [project root] 是你的 Flutter 项目的根目录。
  • x64 表示目标架构,目前 Flutter 支持的是 x64(64位)。
  • release 是构建类型,这里是发布版本。如果你构建的是调试版本,这里会是 debug
  • bundle 目录包含了可执行文件和所有必需的依赖文件,这是最终的发布包。

bundle 目录内,你会找到一个可执行文件(通常以你的项目名命名),以及可能的一些资源文件和库文件。这个可执行文件就是你可以直接运行的 Linux 应用程序。

Web

基本命令

1
flutter build web

对于 Web 平台,构建产物位于:

1
<project directory>/build/web/

这个目录包含了所有部署到 Web 服务器的静态文件,如 HTML、JavaScript 和 CSS 文件。

确保在构建前选择正确的构建配置(如 Debug 或 Release),因为这将影响构建产物的性能和大小。

在这个 web 目录中,你会找到以下类型的文件和目录:

  • **index.html**:这是你的应用的入口文件。如果你使用了 --base-href 选项,<base> 标签的 href 属性将被设置到你指定的路径。
  • **main.dart.js**:这是你的 Dart 代码编译成 JavaScript 后的文件,是运行你的 Flutter 应用的核心。
  • **assets/**:包含所有静态资源,如图片、字体以及其他从 Dart 代码中引用的文件。
  • **favicon.png**:网站的图标文件。
  • 其他 JavaScript 和源映射文件:例如,用于调试的 .map 文件等。

部署

当你准备将你的 Flutter Web 应用部署到服务器时,你需要将整个 build/web 目录的内容上传到你的服务器。确保服务器的配置能正确处理你的应用,特别是如果你设置了基本路径(如使用了 --base-href)。

本地测试

在部署之前,你可以在本地设置一个 HTTP 服务器来测试这些文件,确保一切按预期工作。你可以使用 Python 的 http.server 模块,或者 Node.js 的 http-server,或者任何其他能够提供静态文件服务的工具。

例如,使用 Python 的简单 HTTP 服务器:

1
2
cd [project root]/build/web
python -m http.server 8000

然后在浏览器中访问 http://localhost:8000 来查看你的应用。

确保在实际的生产环境中使用专业的 Web 服务器,如 Nginx 或 Apache,以提供更好的性能和安全性。