Flutter 解放双手-Shell自动化打包之配置
您能在这里看到啥
温故知新
流程图如下所示
脚本目录如下所示
从上面的流程图,可以看的出来,我们今天讲的就是打包的前三步,这三步都是为了打包前的配置功能,也是为了可以在真正打包的时候,可以正常输出.下面我来讲解一下前三步是,怎么来的,怎么改的,怎么用的.
参数配置
- 命令参数配置
- 项目路径配置
- 安卓打包配置
- iOS打包配置
- 蒲公英配置
- 命令参数配置
配置项中传入参数具体赋值到项目中的参数
然后我们看看具体这些参数是怎么赋值,以及代表的意思.先看一下默认命令参数,在命令行输入
sh pack.sh -h
-h 获取帮助
-o:0 系统类型[0 全部,1 apk,2 ipa],默认: 0
-u:1 上传类型[1 商店 , 2 蒲公英],默认: 1
-b:1 打包环境[1 Release, 2 Debug],默认: 1
-c:1 清理本地缓存[1 清 ,0 不] 默认: 1
-a:0 安卓渠道[0: All
从上面我们知道
-o:0 对应的值是pack_os
-u:1 对应的值是upload_type
-b:1 对应的是project_build_type,然后根据project_build_type的值,赋值build_type=release或者debug.
-c:1 对应的值是project_is_clear
-a:0 是安卓的渠道对应的你设置的apk_channels=(HUAWEI),0代表数组全部,1,2,3,代表对应的渠道值
通过对各个参数的讲解,这样就方便我们在使用的时候,通过shell命令传参的方式,来修改默认参数,下面我举例说明一下,参数是怎么传的
默认不修改参数,调用命令
sh pack.sh
修改系统类型,只打apk
sh pack.sh -o:1
修改系统类型,只打ipa
sh pack.sh -o:2
修改上传类型,蒲公英
sh pack.sh -u:2
修改打包环境,Debug
sh pack.sh -b:2
不清理缓存
sh pack.sh -c:0
修改安卓安装渠道,默认全部
sh pack.sh -a:1
组合使用
sh pack.sh -o:1 -u:2 -b:2 -c:0 -a:1
通过上面的讲解,基本上就可以调用起打包脚本了.当然,想要正常打包,必须要还需要你把安卓和iOS项目环境配置完成,才可以正常打包.当然这两个项目配置项,不在这里详细讲解,我会在
-
导出配置
打完包,我们需要有地方来存储导出的ipa和apk,因此,我这边也添加了导出配置.
当然默认的project_path是工程的相对路径,这里我们看一下项目的目录,方便你理解导出文件在哪里,以及打包文件在哪里
完整的项目目录
android-导出路径配置
这里由于我们的打包环境是可以是Debug和Release的,所以我为了更好的区分打出的包,就分别把Debug和Release做了区分.
iOS-导出路径配置
由于iOS的是通过xcodeBuild进行打包,导出的,所以需要存放xcarchive和ipa,我这里也添加了对应的文件夹,方便管理.
export文件夹目录,这个就是存放我们打包导出的文件.如下所示
如果想要找得对应打包文件,在export文件夹里,找到你需要的文件就行.用于你自己的使用. 到这里,参数配置就分享完成.下面我们再看看看缓存配置
缓存配置
# 清理工程
cleanFun() {
if [ "$project_is_clear" == 1 ]; then
echomsg "清理缓存STAR"
if [ "$pack_os" == 0 ]; then
clearIos
clearAndroid
elif [ "$pack_os" == 1 ]; then
clearAndroid
else
clearIos
fi
clearFlutter
echomsg "缓存清理END"
fi
}
从代码层上来说,业务逻辑相对简单,就不再说了,这里清理缓存主要分为两个方面,一个是项目缓存一个打包缓存,这边我就简单说一下清理对应平台的方法.
- clearIos
# 清理iOS
clearIos() {
clearIosLib
clearIosBuild
}
# 清理iOS文件
clearIosLib() {
echomsg "清理IOS文件夹STAR"
if [ -d "${export_ios_path}" ]; then
rm -rf "${export_ios_path}"
fi
echomsg "清理IOS文件夹END"
}
# 清理iOS Build缓存
clearIosBuild() {
# 通过判断有没有iOS文件,再执行xcodebuild clean 命令
if [ -d "${project_path}"/ios ]; then
echomsg "清理XCODE STAR"
xcodebuild clean -workspace "${project_workspace_path}" -scheme "${project_scheme}" -configuration "$build_type" -quiet || exit
echomsg "清理XCODE END"
fi
}
- clearAndroid
# 清理 Android文件、
clearAndroidLib() {
# 通过你打包的环境,进行清理对应环境的导出文件
echomsg "清理Android文件STAR"
if [[ $project_build_type == 1 ]]; then
if [ -d "${export_apk_release_path}" ]; then
rm -rf "${export_apk_release_path}"
fi
else
if [ -d "${export_apk_debug_path}" ]; then
rm -rf "${export_apk_debug_path}"
fi
fi
echomsg "清理Android文件END"
}
- clearFlutter
# 清理 Flutter缓存
clearFlutter() {
# 需要判断,项目里是否有pubspec.yaml,我通过这个来判断是不是flutter项目
# 如果是flutter项目.执行flutter clean 命令,来清理flutter项目
if [ -e "${project_path}"/pubspec.yaml ]; then
echomsg '清理FLUTTER STAR'
flutter clean
echomsg '清理FLUTTER END'
fi
}
构建配置
构建文件这里,我把它弱化了,只负责构建导出文件的创建.具体项目,我这边放到了打包流程里了,下面我们简单看一下对应的执行方法吧.内容相对简单,我就简单的讲一下代码
# =========================== 构建模块 =========================== #
# 构建Android文件夹
createAndroidLib() {
echomsg "创建Android文件夹 STAR"
if [[ $project_build_type == 1 ]]; then
if [ ! -d "${export_apk_release_path}" ]; then
mkdir -p "${export_apk_release_path}"
fi
else
if [ ! -d "${export_apk_debug_path}" ]; then
mkdir -p "${export_apk_debug_path}"
fi
fi
echomsg "创建Android文件夹 END"
}
# 构建iOS文件夹
createIosLib() {
echomsg "创建IOS文件夹 STAR"
if [ ! -d "${export_xcarchive_path}" ]; then
mkdir -p "${export_xcarchive_path}"
fi
if [ ! -d "${export_ipa_path}" ]; then
mkdir -p "${export_ipa_path}"
fi
echomsg "创建IOS文件夹 END "
}
# 构建导出文件
createLib() {
echomsg "构建文件 STAR"
if [ "$pack_os" == 0 ]; then
createIosLib
createAndroidLib
elif [ "$pack_os" == 1 ]; then
createAndroidLib
else
createIosLib
fi
echomsg "构建文件 END"
}
系列文章
转载自:https://juejin.cn/post/7152040182496591908