前语

本文将经过奇妙的方式,以简单的本钱完成flutter的静态资源多途径装备。

Flutter多途径怎么装备?请参阅往前文章:
Flutter的多途径多资源装备【Android+iOS】
Flutter多途径脚本自动化打包

流程分析

Android中,咱们能够经过装备不同的productFlavors,经过sourcesets装备不同途径引证的静态资源res-channel目录。终究gradle会自动帮咱们生成assembleChannelReleaseassembleChannelDebug的任务。打包时只需要运转相对应的任务即可。

极简的成本实现Flutter静态资源多渠道定制

flutter里没有gradle帮咱们生成好相关的打包脚本。那一起经过脚原本完成一个简易版的吧
简易版完成流程分析:
1、创立对应途径的资源文件夹,里面放该途径的静态资源
2、编写对应的脚本进行资源替换后打包,成功生成apk或xcarchive后,将资源rollback(经过git)。
3、支撑途径资源替换,方便测验。

开端

创立途径资源文件夹_channelA。 放入该途径定制化的图标。_是为了让途径资源文件夹靠前,方便检查。

极简的成本实现Flutter静态资源多渠道定制

脚本编写
先写打包的主脚本,build_channelA.shbuild_channelA_ios.sh。相当于androidgradleassembleXXXReleasetask

脚本目录:

极简的成本实现Flutter静态资源多渠道定制
build_channelA.sh,用来打包apk包

channel="channelA"
echo ">>>>>当前途径:$channel"
# 过程1:clean操作
chmod 777 ./clean_work_space/clean.sh
cd ./clean_work_space
clean.sh
cd ..
# 过程2:资源替换
chmod 777 ./assets_swap/assets_swap.sh
cd ./assets_swap
assets_swap.sh $channel
cd ..
# 过程3:打包apk/ios
echo ">>>>>开端编译apk"
flutter build apk --flavor ${channel} --obfuscate --split-debug-info=debugInfo --split-per-abi --dart-define=UMENG_CHANNEL=${channel}
mv ../build/app/outputs/flutter-apk/app-armeabi-v7a-${channel}-release.apk ../output_dir/${channel}.apk
# 过程4:资源回滚
chmod 777 ./assets_swap/rollback_assets.sh
cd ./assets_swap
rollback_assets.sh $channel

build_channel_ios.sh,用来打包ios包。过程是如出一辙的,修改打包指令而已

channel="channelA"
echo ">>>>>当前途径:$channel"
# 过程1:clean操作
chmod 777 ./clean_work_space/clean.sh
cd ./clean_work_space
clean.sh
cd ..
# 过程2:资源替换
chmod 777 ./assets_swap/assets_swap.sh
cd ./assets_swap
assets_swap.sh $channel
cd ..
# 过程3:打包aios
echo ">>>>>开端编译ios"
flutter build ios --release
flutter build ipa --flavor ${channel} --obfuscate --split-debug-info --split-per-abi  --dart-define=UMENG_CHANNEL=${channel}
mv ../build/ios/archive/${channel}.xcarchive ../output_dir/${channel}.xcarchive
# 过程4:资源回滚
chmod 777 ./assets_swap/rollback_assets.sh
cd ./assets_swap
rollback_assets.sh $channel

clean.sh,进行clean操作和创立文件夹操作

# 创立文件夹 与 clean操作
if [ ! -d '../../output_dir' ]; then
  mkdir '../../output_dir'
fi
rm -rf ../../output_dir/*
echo ">>>>>clean已经完成"

assets_swap.sh,进行途径资源替换操作,直接覆盖即可

# 多途径替换flutter静态资源,用des替换至src
channel="_$1"
echo ">>>>>正在替换途径资源"
if [ ! -d "../../assets/${channel}" ]; then
  echo ">>>>>替换失败,请检查../../assets/${channel},目录是否存在"
else
  cp -rf ../../assets/${channel}/ ../../assets/
  echo ">>>>>成功替换资源,当前途径资源:${channel}"
fi

rollback_assets.sh,进行途径资源回滚,使用git checkout指令操作

# 替换资源完成后,打完包后,履行rollback assets 操作,来保证git记录不会修改,
channel="_$1"
# 遍历途径下的文件,履行checkout回退指令
function rollback(){
  for file in `ls $1`
    do
      if [ -d "$1/$file" ]
      then
        rollback $1"/"$file
      else
        local path=$1"/"$file
        local delete=$channel"/"
        echo ">>>>>需要回滚的图片:${path//$delete}"
        git checkout ${path//$channel"/"}
      fi
    done
}
rollback "../../assets/${channel}"

打包运转

极简的成本实现Flutter静态资源多渠道定制

关于调试

在终端运转assets_swap.sh channelA来切换资源。使用rollback_assets.sh channelA来回滚资源。

新增一个途径,需要做什么?
1、依照Flutter的多途径多资源装备【Android+iOS】装备好。
2、复制一份build_xxx.sh和build_xxx_ios.sh。修改channel即可。
3、自动化打包请参阅Flutter多途径脚本自动化打包。

最终

本文只是用一种比较奇妙的方式来暴力的完成flutter多途径多资源。
比较简单和本钱也相对低。
当然还是有很多能够优化的当地和很多其他完成的方案。

关于flutter的多途径装备的文章就到完毕了。
往期文章:
怎么装备 => Flutter的多途径多资源装备【Android+iOS】
自动化打包 => Flutter多途径脚本自动化打包
资源定制 => 极简的本钱完成Flutter静态资源多途径定制(本篇)