Flutter多渠道多资源配置终极解决方案,看这篇就够了
目前已经使用本方案成功上架了goole play和app store,流程较长,后面可以配合脚本使用。脚本的编写不在本篇文章展开,以机械式实操为主。
新鲜出炉:
Flutter多渠道多资源终极解决方案之自动化打包
极简的成本实现Flutter静态资源多渠道定制
1、Flutter内渠道配置
Flutter中的渠道配置一般用于埋点统计
使用--dart-define 进行渠道区分
打包时指令
flutter build apk --dart-define=CHANNEL=channelA
代码里获取渠道
String _channelName = const String.fromEnvironment('CHANNEL', defaultValue: 'develop');
2、多资源配置
Android
在项目根目录/android/app/build.gradle下进行渠道配置
...
android{
...
// 配置渠道对应appid,还支持配置其他渠道参数
productFlavors {
channelA{
applicationId "com.example.channelA"
}
channelB{
applicationId "com.example.channelB"
}
}
...
//配置渠道对应的安卓资源目录
sourceSets {
channelA.res.srcDirs 'src/main/res-channelA'
channelB.res.srcDirs 'src/main/res-channelB'
}
...
}
...
productFlavors还有buildConfigField manifestPlaceholders signingConfig等等配置,主要用于区分第三方SDK,配置渠道配置参数,渠道包签名等功能,这里不展开~
在项目根目录/android/app/main/目录下配置启动页,图片,App名称等资源
配置App图标

使用Android studio打开android目录,使用自带的图标生成工具生成,选中 res-channelA的文件夹右键 new -> Image Asset,选中对应渠道即可自动生成

配置启动图,如果遇到背景图不显示,删除渠道下的mipmap-anydpi-v26即可

配置App名称和App图标
每个渠道创建strings.xml文件,输入想要的App名称

以上配置在ChnnelB渠道下也需要同样配置,文件名需要一致,可以在channelA拷贝过去后进行修改
最后配置AndroidManifest.xml清单文件即可。

此外还有依赖库分渠道依赖,主要用来区分第三方依赖库。比如海外不需要推送sdk等需求
使用channelAImplementation到指定某依赖库只在某渠道下导入。Implementation前是渠道名。

至此Android多渠道多资源配置已经完成。
接下来需要进行debug运行配置
channelB同理。配置完成后选择对应的channelA 点击运行即可。
打包指令
apk
flutter build apk --flavor channelA --dart-define=CHANNEL=channelA
flutter build apk --flavor channelB --dart-define=CHANNEL=channelB
aab
flutter build appbundle --flavor channelA --dart-define=CHANNEL=channelA
flutter build appbundle --flavor channelB --dart-define=CHANNEL=channelB
IOS
由于Flutter build指令与ios target的冲突,每次运行Flutter build ios 都会使得ios项目target资源被清除。因此配置过程比较艰辛。但实测按照以下步骤应该是没有问题的。
安装XCode环境,懂得都懂~
使用XCode打开ios项目,确保项目能够正常运行。
分发target,选中Runner,在右侧的TARGETS右键选中Duplicate

此时会生成Runner copy-Info.plist文件,为方便管理,建议重新命名
修改target的plist文件

配置图标,启动图,启动页面等资源,为了方便管理,十分建议按这种方式去存放资源文件
新建文件夹channelA


在创建的Assets-ChannelA和Launch Screen-ChannelA 文件中自定义该渠道的App图标和启动页


将Target与所创建的资源关联。
点击General,填写该Target的相关信息,点击Build Phases 选择对应资源文件



channelB同理
添加scheme,为了我们能直接运行对应的Target


添加build scheme
选择Runner info 依次为渠道分发三个环境


添加target依赖库
打开ios/Profile,添加对应target的依赖库。为防止flutter build时运行Pod install时导致target依赖库丢失

至此,ios多渠道多资源配置完毕。 选择对应的channel运行试一下

ios打包
flutter build ios --release切换至release环境。避免上传TestFlight失败
flutter build ipa --flavor channelA 即可.\
目前为止,已经成功上架过几个项目到google play 和app store。
后期扩展,使用shell脚本+Jenkins打包。
转载自:https://juejin.cn/post/7115334513206493215