flutter如何打多渠道包

在Flutter项目中,如何实现多渠道打包?不同的渠道需要配置不同的环境变量或参数,比如应用图标、API地址等。目前尝试过flutter flavors,但不太清楚如何与Android的productFlavors和iOS的schemes结合使用。有没有完整的配置步骤或最佳实践可以参考?

2 回复

Flutter打多渠道包可使用flutter build apk --flavor <渠道名>,配合Android的productFlavors和iOS的schemes配置不同渠道参数。

更多关于flutter如何打多渠道包的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中打多渠道包(为不同应用市场或环境构建不同版本)主要有以下几种方法:

1. 使用 flutter_flavorizr 插件(推荐)

安装配置

dev_dependencies:
  flutter_flavorizr: ^5.0.0

配置 flavors

pubspec.yaml 中添加:

flavorizr:
  flavors:
    dev:
      app:
        name: "My App Dev"
      android:
        applicationId: "com.example.dev"
      ios:
        bundleId: "com.example.dev"
    prod:
      app:
        name: "My App"
      android:
        applicationId: "com.example.prod"
      ios:
        bundleId: "com.example.prod"

运行命令生成配置:

flutter pub run flutter_flavorizr

构建命令

# Android
flutter build apk --flavor dev
flutter build appbundle --flavor prod

# iOS
flutter build ipa --flavor prod

2. 手动配置 flavors

Android 配置

android/app/build.gradle 中:

android {
    flavorDimensions "default"
    productFlavors {
        dev {
            dimension "default"
            applicationId "com.example.dev"
            resValue "string", "app_name", "My App Dev"
        }
        prod {
            dimension "default"
            applicationId "com.example.prod"
            resValue "string", "app_name", "My App"
        }
    }
}

iOS 配置

在 Xcode 中:

  1. 复制现有的 Scheme
  2. 为每个渠道创建不同的 Build Configuration
  3. 设置不同的 Bundle Identifier

3. 代码中区分渠道

import 'package:package_info_plus/package_info_plus.dart';

class FlavorConfig {
  static String get flavor {
    const flavor = String.fromEnvironment('FLAVOR');
    return flavor;
  }
  
  static bool get isDev => flavor == 'dev';
  static bool get isProd => flavor == 'prod';
}

4. 使用不同配置

void main() {
  if (FlavorConfig.isDev) {
    // 开发环境配置
  } else {
    // 生产环境配置
  }
  runApp(MyApp());
}

主要步骤总结:

  1. 配置不同渠道的应用ID和名称
  2. 使用 --flavor 参数构建对应渠道包
  3. 在代码中通过环境变量区分不同渠道
  4. 为不同渠道配置不同的 API 地址、功能开关等

这种方法可以高效管理多个渠道版本,便于测试和发布。

回到顶部