相关文章推荐
朝气蓬勃的包子  ·  Stata | ...·  1 年前    · 
安静的冰棍  ·  SQL ...·  2 年前    · 

目前已经使用本方案成功上架了 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 点击运行即可。

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打包。

新鲜出炉: