Flutter打包
從 Flutter v1.17 開始寞埠,F(xiàn)lutter 命令工具增加了自定義參數(shù)的功能 --dart-define召调,我們可以用這個命令參數(shù)在打包或運(yùn)行App時設(shè)置參數(shù)即可
flutter run --dart-define=APP_CHANNEL=BaiduChannel
傳遞多組參數(shù)命令
flutter run --dart-define=APP_CHANNEL=BaiduChannel --dart-define=OTHER_VAR=百度渠道
在 Dart 代碼中你需要這樣寫娇掏,一定是和命令參數(shù)是對應(yīng)的
// 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/> ,如果要保持原來原生的統(tǒng)計方式不變桶雀,那么首先我們需要獲渠道 命令參數(shù)(--dart-define=APP_CHANNEL=BaiduChannel --dart-define=OTHER_VAR=百度渠道)的內(nèi)容辕狰,則需要更改 Gradle 配置
// android/app/build.gradle
/// 獲取渠道參數(shù)使用,這里設(shè)置一下默認(rèn)值
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()]
}
}
總結(jié)
通過Flutter命令工具的自定義參數(shù)功能進(jìn)行渠道差分打包改备,在Dart文件或者gradle文件中讀取命令參數(shù)完成渠道的配置