Flutter Shell自动化打包解放双手

目录
  • 正文
  • 脚本运行视频
  • 打包流程图
  • 脚本目录讲解
    • pack.sh(入口)
    • pack_config.sh(全局配置项)
  • 脚本使用

正文

经过一段时间的学习和项目实践,你会发现,

打包->上传蒲公英->生成二维码

是一个枯燥且乏味的事情,只要打包配置项,配置完成,剩下的基本上就是无聊的等待,和机械的步骤.

之前在写iOS项目的时候,一直都是使用fastlane,和xcodebuild,进行脚本打包的.

只是那个时候,只是会简单的打包,并没有深究上传.

最近花时间把flutter自动化打包也给加上了.

脚本运行视频

打包流程图

在开始编写打包工具前,我们需要先把打包流程自己画一画,可以让我们在脑子里,先过一下整体流程,哪些需要准备,哪些需要单独处理.这里我把我从第一次写流程图,到最终流程图确定的过程也分享给大家.也算是一种记录吧.

第一版

第二版

第三版

相对来说,经过这三版的改进,也算是把整体流程捋顺了,从一开始不能自定义参数,到可以自定义参数,从只会打包出apk和ipa.到可以上传到蒲公英,上传到iOS商店.也算是基本完成了我的需求,所以下一步,就是按照我们画的流程图,进行代码的编

脚本目录讲解

├── shell_pack
│   ├── ExportOptions.plist(导出iOS商店包需要的plist)
│   ├── ExportOptions_dev.plist(导出iOS测试包)
│   ├── ExportOptions_hoc.plist(导出hoc包)
│   ├── pack.sh(入口)
│   ├── pack_apk.sh(apk打包模块)
│   ├── pack_clear_create_tool.sh(清缓存和构建文件模块)
│   ├── pack_config.sh(全局配置项)
│   ├── pack_ipa.sh(ipa打包模块)
│   ├── pack_tool.sh(工具模块)
│   └── pgyer_upload.sh(蒲公英模块)

这就是根据我们画的流程图,我这边设计的代码实现分布,之前也看过其他人写的shell脚本,一般都是把所有的代码写到一块,可能我这边一看到这么多代码,就会有抗拒心里,所以,根据我的开发习惯,我会把主流程放在入口模块,具体的业务实现,会下发到各个功能模块里,这样的话也方便各个模块的独自联调测试.,我来简单介绍一下对应模块的功能.

pack.sh(入口)

# shellcheck disable=SC1091
# shellcheck disable=SC2154
source ./pack_tool.sh
source ./pack_ipa.sh
source ./pack_apk.sh
source ./pack_config.sh
source ./pack_clear_create_tool.sh
# 为了可以执行 sh 文件所有的函数
chmod a+x pack_clear_create_tool.sh pack_tool.sh
echomsg "STAR"
echomsg "开始配置参数"
param_count=$#
if [ $param_count == 0 ]; then
    normalTip
else
    for i in "$@"; do
        if [[ $i == "-h" ]]; then
            echoHelp
            exit
        else
            funWithParam "$i"
        fi
    done
fi
configbuildType
echomsg "参数配置完成"
# 最终打包配置结果显示
echoTip
# 清楚缓存
cleanFun
# 构建文件
createLib
# 打包上传
if [ "$pack_os" == 0 ]; then
    buidApk
    buidIos
elif [ "$pack_os" == 1 ]; then
    buidApk
else
    buidIos
fi
echomsg "END"

从代码中,我把入口模块划分成4个小模块

1. 配置参数

2. 清理缓存

3. 构建文件

4. 打包上传

这也符合我们梳理的流程图.这里我打算把具体的代码实现分为三部分进行讲解.

第一部分

  • 参数配置
  • 清理缓存
  • 构建版本

第二部分

  • 安卓项目配置项
  • 安卓打包
  • 上传蒲公英

第三部分

  • iOS项目配置项
  • iOS打包
  • 上传蒲公英
  • 上传商店

分类,我会在以后的文章里进行详细讲解.我继续讲解一下

  • pack_config.sh(全局配置项)
  • 脚本使用

pack_config.sh(全局配置项)

# ======================== 命令参数 ======================== #
# 打包系统 0 全部 1 apk 2 ipa
pack_os=0
# 上传类型 1 商店 2 蒲公英
upload_type=1
# 打包环境 1 Releas 2 Deubg
project_build_type=1
# 编译环境
build_type="release"
# 是否清理缓存 1 清理 0不清理
project_is_clear=1
# 0 全部市场 具体 123 是你自己修改apk_channels 对应的渠道
pack_apk_channel=0
# ======================== 工程配置项 ======================== #
# 工程相对路径
project_path=$(dirname $(pwd))
# ======================== Android ======================== #
# Flutter android release 打包生成的路径
flutter_release_apk_path=$project_path/build/app/outputs/apk/release/
# Flutter android debug 打包生成的路径
flutter_debug_apk_path=$project_path/build/app/outputs/apk/debug/
# 安卓打包根文件
export_android_path=$project_path/export/apk
# apk 最终Release存放的地方
export_apk_release_path=$export_android_path/release/
# apk 最终Debug存放的地方
export_apk_debug_path=$export_android_path/debug/
# 安卓渠道HUAWEI VIVO YYB
apk_channels=(HUAWEI)
# 安卓渠道 个数
apk_chanhels_length=0
# ======================== IOS ======================== #
# 工程名字
project_name=Runner
# scheme 名字
project_scheme=$project_name
# xcworkspace路径
project_workspace_path=$project_path/ios/$project_name.xcworkspace
# xcarchive 名字
xcarchive_name=${project_name}.xcarchive
# ipa 名字
ipa_name=$project_name
# ios 团队ID
ios_teamID=""
# 商店账号
xcrun_u=""
# 账号专属密码
xcrun_p=""
# 导出iOS文件路径
export_ios_path=$project_path/export/ios
# 导出 xcarchive路径
export_xcarchive_path=$export_ios_path/xcarchive/
# 导出ipa存放文件路径
export_ipa_path=$export_ios_path/ipa/
# ExportOptions.plist app-store路径
export_options_plist_store=$project_path/shell_pack/ExportOptions.plist
# ExportOptions.plist app-hoc路径
export_options_plist_hoc=$project_path/shell_pack/ExportOptions_hoc.plist
# ExportOptions.plist app-dev路径
export_options_plist_dev=$project_path/shell_pack/ExportOptions_dev.plist
# 最后选择的环境
export_options_plist=$export_options_plist_store
# ======================== 蒲公英配置信息 ======================== #
# 蒲公英api_key
api_key=""
# 蒲公英iOS二维码地址
pgyer_ios_code_url=""
# 蒲公英安卓二维码地址
pgyer_android_code_url=""

从上面的代码里,我这边主要分了5个模块

命令参数配置

如果你想修改默认的配置参数,你可以修改这个模块
比如修改默认的上传环境为
upload_type=2
这样默认上传的就是蒲公英了,当然我们也可以通过shell参数进行修改上传环境

项目路径配置

默认的打包工具shell_pack存放路径如下所示

如图所示,shell_pack文件,默认是放在项目根目录下,如果你想把shell_pack放到其他地方,请修改获取项目路径配置参数project_path=$(dirname $(pwd))(修改成项目的路径,默认打包工具放在项目根目录下)

安卓打包配置

安卓需要修改的配置项就是安卓渠道,这个可以根据你们项目需求进行修改,
apk_channels=(HUAWEI VIVO YYB)

iOS打包配置

这里我只实现了一种上传商店的方式,就是配置商店账号专属秘密的形式,进行商店上传的.所以这里需要修改的配置就是
xcrun_u="" xcrun_p=""
  • 蒲公英配置
  • 只需要修改api_key即可

脚本使用

shell_pack打包工具文件,放到你项目的根目录下.如下所示

  • 在终端进入到shell_pack目录下
  • xx@xxx shelltest %cd shell_pack
  • 在终端输入执行命令,如果你不需要修改默认配置执行即可
  • sh pack.sh 如果你需要修改默认配置项,并且你不知道默认配置项是啥的时候,你只需要输入
  • sh pack.sh -h

就会显示默认的配置参数以及参数说明

修改完成后,执行对应的命令即可,比如我这边修改了u:2,把默认上传到商店,修改成了上传到蒲公英 执行命令如下

sh pack.sh -u:2

至此,自动化打包就已完成,你可以快乐的解放双手.做你想做的事情了. 喜欢看源码的

项目地址

DEMO

脚本地址

以上就是Flutter Shell自动化打包解放双手的详细内容,更多关于Flutter Shell自动化打包的资料请关注我们其它相关文章!

(0)

相关推荐

  • Flutter移动端进行多渠道打包发布的全过程

    目录 前言 Android端 1.配置build.grade 2.配置mainfest 3.新增对应资源 4.打包编译 iOS端 1.分发Target Flutter端区分渠道 总结 前言 随着项目的运营推广,总少不了各种客户定制化的需求,当前大部分软件其实都离不开Saas的玩法:定制化需求虽然利润高(特别是海外客户),但对于开发人员来说却比较难搞,同一套代码需要支持不同的需求. 一般我们处理这种需求的时候会引入渠道包的概念,每个客户拥有独立渠道,通过渠道指定不同的资源.赋予不同的功能,从而编译

  • 详解Flutter 响应式状态管理框架GetX

    目录 一.状态管理框架对比 Provider BLoC GetX 二.基本使用 2.1 安装与引用 2.2 使用GetX改造Counter App 2.3 GetX代码插件 三.其他功能 3.1 路由管理 3.2 依赖关系管理 3.3 工具 3.4 改变主题 3.5 GetConnect 3.6 GetPage中间件 Priority Redirect onPageCalled OnBindingsStart OnPageBuildStart 3.7 全局设置和手动配置 3.8 StateMix

  • Android开发Flutter 桌面应用窗口化实战示例

    目录 前言 一.应用窗口的常规配置 应用窗口化 自定义窗口导航栏 美化应用窗口 二.windows平台特定交互 注册表操作 执行控制台指令 实现应用单例 三.桌面应用的交互习惯 按钮点击态 获取应用启动参数 四.写在最后 前言 通过此篇文章,你可以编写出一个完整桌面应用的窗口框架. 你将了解到: Flutter在开发windows和Android桌面应用初始阶段,应用窗口的常规配置: windows平台特定交互的实现,如:执行控制台指令,windows注册表,应用单例等: 桌面应用的交互习惯,如

  • Flutter使用push pop方法及路由进行导航详解

    目录 正文 准备工作 第一种导航方式 第二种导航方式 正文 在 Web/Mobile 应用程序中,导航是一个很重要的特性,因为它允许你从一个页面跳转到另一个页面. 在 flutter 应用程序中,我们可以使用 push(), pop() 方法实现导航,或者编写我们自己的路由. 准备工作 我们假设 FirstScreen 和 SecondScreen 是两个不同的类,分别在各自的 FirstScreen.dart 和 SecondScreen.dart 文件内. FirstScreen.dart

  • ios开发Flutter构建todo list应用

    目录 正文 基础 Flutter 应用脚手架 创建 TodoItem 展示 Dialog 去添加列表项 列表项添加状态 正文 今天,我们将使用 Flutter 构建一个动态的 todo list 的应用. 开发完成的效果如下: 我们直接进入正题. 基础 Flutter 应用脚手架 # create new project flutter create flutter_todo_app # navigate to project cd flutter_todo_app # run flutter

  • Flutter使用Overlay与ColorFiltered新手引导实现示例

    目录 思路 Flutter BlendMode ColorFiltered 实现 获取镂空位置 ColorFiltered child 完整代码 最终效果 小结 思路 开发过程中常见这样的需求,页面中有几个按钮,用户首次进入时需要对这几个按钮高亮展示并加上文字提示.常见的一种方案是找UI切图,那如何完全使用代码来实现呢? 就以Flutter原始Demo页面为例,如果我们需要对中间展示区域以及右下角按钮进行一个引导提示. 我们需要做到的效果是除了红色框内的Widget,其余部分要盖上一层半透明黑色

  • Flutter开发Widgets 之 PageView使用示例

    目录 构造方法以及参数: 基本用法 无限滚动 实现指示器 切换动画 总结: 构造方法以及参数: PageView可用于Widget的整屏滑动切换,如当代常用的短视频APP中的上下滑动切换的功能,也可用于横向页面的切换,如APP第一次安装时的引导页面,也可用于开发轮播图功能. PageView({ Key? key, this.scrollDirection = Axis.horizontal, // 设置滚动方向 垂直 / 水平 this.reverse = false, // 反向滚动 Pag

  • Flutter Shell自动化打包解放双手

    目录 正文 脚本运行视频 打包流程图 脚本目录讲解 pack.sh(入口) pack_config.sh(全局配置项) 脚本使用 正文 经过一段时间的学习和项目实践,你会发现, 打包->上传蒲公英->生成二维码 是一个枯燥且乏味的事情,只要打包配置项,配置完成,剩下的基本上就是无聊的等待,和机械的步骤. 之前在写iOS项目的时候,一直都是使用fastlane,和xcodebuild,进行脚本打包的. 只是那个时候,只是会简单的打包,并没有深究上传. 最近花时间把flutter自动化打包也给加上

  • Python实现iOS自动化打包详解步骤

    可能是最简单的iOS自动化打包方式:无需手动配置证书,无需填写配置文件名称,更无需配置Bundle Identifer,总之无需很多繁琐配置,让打包流程一句命令完成!下面将会分享两种打包方式,一种是快速打包(打包时间就在一眨眼),一种是基于shenzhen(速度会比较慢),都实现了一行命令完成打包并上传蒲公英! 一:基于编译的打包 这种打包方式应该是目前所有打包方式中最快的,就是编译工程--找到.app文件--新建Payload文件夹--拷贝.app到Payload文件夹--压缩成zip--更改

  • 教你编写Windows的VBScript与Mac的AppleSCript脚本解放双手

    目录 一.Windows 篇 —— VBScript 1.效果图 2.VBS 简介 3.代码实现 4.代码详解 5.其他语法 6.附:VBS 特殊字符表格 二.Mac 篇 —— AppleScript 1.效果图 2.代码实现 3.代码详解 一.Windows 篇 —— VBScript 最近发现 windows 上有一个好玩的东西,叫做 VBScript,可以用来自动执行一些操作. 1.效果图 先来看下最终效果吧! 以上就是一个简单的 VBS 脚本,运行时自动打开 Chrome 浏览器,然后自

  • Python的iOS自动化打包实例代码

    前言 这段时间刚刚学习了一段时间的Python,加上自己是做iOS开发的,就想着用Python来做一个自动化打包,可以自动完成打包,上传到蒲公英,并且发送邮箱给测试人员. 一是可以减少打包功夫,二来可以练练手,结合自己的工作来输出一点东西.废话不多说,直接上代码... 原理 就是使用xcodebuild来控制Xcode进行一系列的操作,从而完成打包的操作. 为什么要做这个? 在我们日常开发的时候,特别是在内部测试的时间,有可能需要频繁的打包,打包的工作比较繁琐,需要等待点击下一步,选择之类,影响

  • Docker搭建Jenkins并自动化打包部署项目的步骤

    Jenkins的安装及配置 Docker环境下的安装 下载Jenkins的Docker镜像: docker pull jenkins/jenkins:lts 在Docker容器中运行Jenkins: docker run -p 8080:8080 -p 50000:5000 --name jenkins \ -u root \ -v /mydata/jenkins_home:/var/jenkins_home \ -d jenkins/jenkins:lts 直接通过虚拟机ip+端口访问jks,

  • iOS中使用Fastlane实现自动化打包和发布

    简介 Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包.发布等工作,可以节省大量的时间. Github:https://github.com/fastlane/fastlane 官网:https://fastlane.tools/ 文档:https://docs.fastlane.tools/ 安装 1.首先要安装正确的 Ruby 版本.在终端窗口中用下列命令来确认: ruby -v 2.然后检查 Xcode 命令行工具是否安装.在终端窗口中输入命令:

  • MyBatis官方代码生成工具给力(解放双手)

    摘要 在我们使用MyBatis的过程中,如果所有实体类和单表CRUD代码都需要手写,那将会是一件相当麻烦的事情.MyBatis官方代码生成器MyBatis Generator可以帮助我们解决这个问题,在我的开源项目mall中也是使用的这个代码生成器,用习惯了也挺不错的.本文将介绍MyBatis Generator的使用方法及使用技巧,希望对大家有所帮助! 简介 MyBatis Generator(简称MBG)是MyBatis官方提供的代码生成工具.可以通过数据库表直接生成实体类.单表CRUD代码

  • Jenkins自动化打包为war包

    一.需求 Jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是>需要编译和打包的,一般情况下编译和打包都是用maven完成,所以系统环境中需要安装maven.因本公司仓库使用svn,这里通过svn部署. 二.实验环境 三.实验步骤 1.安装插件 "系统管理"--"管理插件"--"可选插件" Java 项目所需插件下载 2.安装打包工具maven (1)软件下载 wget http://mirror.bit.edu.c

  • jenkins+shell自动化部署的实现步骤

    通过jenkins与shell脚本相结合,实现war包自动部署到多台服务器上 环境: 192.168.2.120 jenkins服务器 192.168.2.117 tomcat服务器 设置jenkins服务器免密钥登陆tomcat服务器 117服:执行命令ssh-keygen -t rsa120服:cd .ssh/;scp -p id_rsa.pub root@192.168.2.117:/root/.ssh/authorized_keys或scp -p ~/.ssh/id_rsa.pub ro

  • ES6中解构赋值实现变量批量赋值解放双手

    目录 引言 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量操作变量赋值,先有个印象, 下面慢慢来看 变量的解构赋值一共分为以下几种:数组的解构赋值 .对象的解构赋值 .字符串的解构赋值 . 一.数组的解构赋值 先来看一下我们平时对很多个变量赋值是如何操作的: let a = 1 let b = 2 let c = 3 let d = 4 那么我们看一下如何批量命名这些变量: let

随机推荐