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 写一个 <meta-data/> ,如果要保持原来原生的统计方式不变,那么首先我们需要获渠道 命令参数(--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文件中读取命令参数完成渠道的配置