持续创造,加快生长!这是我参加「日新计划 10 月更文应战」的第2天,点击检查活动概况
您能在这儿看到啥
- 温故知新
- 参数装备
- 缓存装备
- 构建装备
- DEMO
- 脚本地址
温故知新
看过Flutter 解放双手-Shell自动化打包之概要这篇文章的同学,应该现已了解了脚本的功用散布, 以及咱们在规划脚本前的流程图,喜爱看代码的同学,可以直接下载脚本地址直接检查.但咱们仍是要在这儿简略的解说一下,便利咱们再回顾一下.
流程图如下所示 |
---|
脚本目录如下所示 |
---|
从上面的流程图,可以看的出来,咱们今天讲的便是打包的前三步,这三步都是为了打包前的装备功用,也是为了可以在真正打包的时分,可以正常输出.下面我来解说一下前三步是,怎样来的,怎样改的,怎样用的.
参数装备
对应的装备项悉数都在pack_config.sh文件里面,因为在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项目环境装备完成,才可以正常打包.当然这两个项目装备项,不在这儿具体解说,我会在
- Flutter 解放双手-Shell自动化打包之APK(未发布)
- Flutter 解放双手-Shell自动化打包之IPA(未发布) 这两篇文章具体解说,敬请期待.
-
导出装备
打完包,咱们需求有当地来存储导出的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"
}
系列文章
- Flutter 解放双手-Shell自动化打包之概要
- Flutter 解放双手-Shell自动化打包之APK(未发布)
- Flutter 解放双手-Shell自动化打包之IPA(未发布)