Flutter多渠道多资源配置终极解决方案,看这篇就够了

8,731 阅读3分钟

目前已经使用本方案成功上架了goole playapp 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图标

image.png

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

image.png

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

image.png

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

image.png

以上配置在ChnnelB渠道下也需要同样配置,文件名需要一致,可以在channelA拷贝过去后进行修改

最后配置AndroidManifest.xml清单文件即可。

image.png

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

image.png

至此Android多渠道多资源配置已经完成。

接下来需要进行debug运行配置

image.png image.png 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

image.png

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

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

image.png

image.png

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

image.png

image.png

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

image.png

image.png

image.png

channelB同理

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

image.png

image.png

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

image.png

image.png

添加target依赖库

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

image.png

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

image.png

ios打包
flutter build ios --release切换至release环境。避免上传TestFlight失败
flutter build ipa --flavor channelA 即可.\

目前为止,已经成功上架过几个项目到google playapp store

后期扩展,使用shell脚本+Jenkins打包。

新鲜出炉:
Flutter多渠道多资源终极解决方案之自动化打包
极简的成本实现Flutter静态资源多渠道定制