目前已经使用本方案成功上架了
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
下进行渠道配置
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
点击运行即可。
flutter build apk --flavor channelA --dart-define =CHANNEL=channelA flutter build apk --flavor channelB --dart-define =CHANNEL=channelB flutter build appbundle --flavor channelA --dart-define =CHANNEL=channelA flutter build appbundle --flavor channelB --dart-define =CHANNEL=channelB
由于
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打包。
新鲜出炉: