Flutter渠道打包功能

Flutter打包

从 Flutter v1.17 开始,Flutter 命令工具增加了自定义参数的功能 --dart-define,我们可以用这个命令参数在打包或运行App时设置参数即可

flutter run --dart-define=APP_CHANNEL=BaiduChannel

传递多组参数命令

flutter run --dart-define=APP_CHANNEL=BaiduChannel --dart-define=OTHER_VAR=百度渠道

在 Dart 代码中你需要这样写,一定是和命令参数是对应的

// main.dart
class EnvironmentConfig {
  static const APP_CHANNEL = String.fromEnvironment('APP_CHANNEL');
  static const OTHER_VAR = String.fromEnvironment('OTHER_VAR');
}

原生打包

通常 Android 的多渠道是给 AndroidManifest.xml 写一个 ,如果要保持原来原生的统计方式不变,那么首先我们需要获渠道 命令参数(--dart-define=APP_CHANNEL=BaiduChannel --dart-define=OTHER_VAR=百度渠道)的内容,则需要更改 Gradle 配置

// android/app/build.gradle
/// 获取渠道参数使用,这里设置一下默认值
def dartEnvironmentVariables = [
    APP_CHANNEL: 'main',
    OTHER_VAR: 'other',
]

if (project.hasProperty('dart-defines')) {
    dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
        .split(',')
        .collectEntries { entry ->
            // 1.22.6 版本
            def pair = URLDecoder.decode(entry).split('=')
            // 2.2 版本
            //def pair = new String(entry.decodeBase64(), 'UTF-8').split('=')
            [(pair.first()): pair.last()]
        }
}

总结

通过Flutter命令工具的自定义参数功能进行渠道差分打包,在Dart文件或者gradle文件中读取命令参数完成渠道的配置

参考文章:Flutter 中如何优雅的实现多渠道打包(埋点统计系列)

你可能感兴趣的:(Flutter渠道打包功能)