likes
comments
collection
share

Flutter 解放双手-Shell自动化打包之配置

作者站长头像
站长
· 阅读数 49

您能在这里看到啥

  1. 温故知新
  2. 参数配置
  3. 缓存配置
  4. 构建配置
  5. DEMO
  6. 脚本地址

温故知新

流程图如下所示

Flutter 解放双手-Shell自动化打包之配置

脚本目录如下所示

Flutter 解放双手-Shell自动化打包之配置

从上面的流程图,可以看的出来,我们今天讲的就是打包前三步,这三步都是为了打包前的配置功能,也是为了可以在真正打包的时候,可以正常输出.下面我来讲解一下前三步是,怎么来的,怎么改的,怎么用的.


参数配置

 - 命令参数配置
 - 项目路径配置
 - 安卓打包配置
 - iOS打包配置
 - 蒲公英配置

  1. 命令参数配置

配置项中传入参数具体赋值到项目中的参数

Flutter 解放双手-Shell自动化打包之配置

然后我们看看具体这些参数是怎么赋值,以及代表的意思.先看一下默认命令参数,在命令行输入

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项目环境配置完成,才可以正常打包.当然这两个项目配置项,不在这里详细讲解,我会在

  1. 导出配置

    打完包,我们需要有地方来存储导出的ipaapk,因此,我这边也添加了导出配置.

    当然默认的project_path是工程的相对路径,这里我们看一下项目的目录,方便你理解导出文件在哪里,以及打包文件在哪里

完整的项目目录

Flutter 解放双手-Shell自动化打包之配置

android-导出路径配置

Flutter 解放双手-Shell自动化打包之配置 这里由于我们的打包环境是可以是DebugRelease的,所以我为了更好的区分打出的包,就分别把DebugRelease做了区分.

iOS-导出路径配置

Flutter 解放双手-Shell自动化打包之配置 由于iOS的是通过xcodeBuild进行打包,导出的,所以需要存放xcarchiveipa,我这里也添加了对应的文件夹,方便管理.

export文件夹目录,这个就是存放我们打包导出的文件.如下所示

Flutter 解放双手-Shell自动化打包之配置

如果想要找得对应打包文件,在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
评论
请登录