目前已经使用本方案成功上架了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
安装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打包。