前语
本文将经过奇妙的方式,以简单的本钱完成flutter
的静态资源多途径装备。
Flutter多途径怎么装备?请参阅往前文章:
Flutter的多途径多资源装备【Android+iOS】
Flutter多途径脚本自动化打包
流程分析
在Android
中,咱们能够经过装备不同的productFlavors
,经过sourcesets
装备不同途径引证的静态资源res-channel
目录。终究gradle
会自动帮咱们生成assembleChannelRelease
,assembleChannelDebug
的任务。打包时只需要运转相对应的任务即可。
但flutter
里没有gradle
帮咱们生成好相关的打包脚本。那一起经过脚原本完成一个简易版的吧
简易版完成流程分析:
1、创立对应途径的资源文件夹,里面放该途径的静态资源
2、编写对应的脚本进行资源替换后打包,成功生成apk或xcarchive后,将资源rollback(经过git)。
3、支撑途径资源替换,方便测验。
开端
创立途径资源文件夹_channelA
。 放入该途径定制化的图标。_
是为了让途径资源文件夹靠前,方便检查。
脚本编写
先写打包的主脚本,build_channelA.sh
和 build_channelA_ios.sh
。相当于android
中gradle
的assembleXXXRelease
的task
。
脚本目录:
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}"
打包运转
关于调试
在终端运转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静态资源多途径定制(本篇)