使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发
在快节奏的移动应用程序开发世界中,速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时,开发人员可以创建无缝管道,加速开发生命周期并确保交付高质量的应用程序。在本文中,我们将探讨如何使用 GitHub Actions 为 Flutter 应用程序设置 CI/CD。
我正在为客户开发一个长期项目,每次我进行一些更改或将功能分支合并到开发时,我都必须手动构建并将更新的 apk 发送给我的客户或团队,以便他们可以审核。我进行了一些搜索,发现了一个很棒的工具,可以使用 GitHub Actions 自动执行此操作。现在,每次我向开发人员推送或创建 PR 时,GitHub Actions 都会自动构建、测试工件并将其上传到 Github,以便我的团队或客户可以从 GitHub Actions 获取更新的 APK。
这非常简单,只需 5 到 10 分钟即可实现。
了解 CI/CD 和 GitHub Actions
持续集成(CI)是指每天多次将代码更改集成到共享仓库中。主要目的是尽早发现并解决集成问题,确保代码库保持功能性和一致性。持续部署(CD)通过将代码变更自动部署到生产或暂存环境,对这一流程进行了扩展。这种方法最大限度地减少了人工干预,降低了人为错误的风险。
GitHub Actions 是 GitHub 提供的多功能自动化平台。它允许开发人员将工作流程定义为代码,自动执行任务,例如直接从存储库构建、测试和部署代码。通过 GitHub Actions,开发人员可以设置由代码推送、拉取请求或发布等事件触发的自定义工作流程。
使用 GitHub Actions 为 Flutter 应用程序设置 CI/CD
第 1 步:创建工作流程文件
- 导航到 GitHub 上的 Flutter 应用程序存储库。
- 创建一个名为
.github/workflows的新目录(如果尚不存在)。 - 在此目录中,创建一个新的 YAML 文件,例如
main.yml。 (见下图)。

第 2 步:定义工作流程
在 main.yml 文件中,定义您的工作流程。这是我在我的用例中使用的一个示例。
on:pull_request:branches:- dev
name: Test, Build and Release apk
jobs:build:name: Build APKruns-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: actions/setup-java@v2with:distribution: 'zulu'java-version: '11'- uses: subosito/flutter-action@v2with:flutter-version: '3.7.7'- run: flutter pub get- run: flutter test- run: flutter build apk --release- uses: actions/upload-artifact@v1with:name: release-apkpath: build/app/outputs/apk/release/app-release.apk
在本示例中,工作流是在向 dev 分支提出 pull_request 时触发的。您可以根据需要在任何 github action(如推送等)上运行此工作流。它执行以下任务:
- 检查存储库代码。
- 使用
flutter pub get安装依赖项。 - 使用
flutter test运行测试(如果您已定义任何测试)。 - 使用
flutter build apk构建 APK。 - 使用上传工件将开发好的 apk 上传到工件。
可从 Github Actions 详情中找到上传的工件(见下图)。

您还可以集成您的 Play 控制台或 Firebase 帐户,以便在完成该功能后立即部署您的应用程序。
相关文章:
使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发
在快节奏的移动应用程序开发世界中,速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时,开发人员可以创建无…...
微软 CEO Satya Nadella 的访谈
Nicolai: 大家好。我刚经历了人生中最不可思议的事情,我有幸采访了微软的 CEO、Satya Nadella。微软现在是全球市值最高的公司。真是太棒了,请继续关注。 第一章 微软的发展与平台转变 Nicolai: Satya,你是全球市值最高公司的 CEOÿ…...
万界星空科技商业开源MES,技术支持+项目合作
商业开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境:jdk11tomcatmysql8springbootmaven 可以免费使用,需要源码价格便宜,私信我获取。 一、系统概述: MES制造执…...
Docker Mysql无root账户创建最高权限用户
创建最高权限用户 进入 MySQL 容器的命令行界面。您可以使用以下命令: 修改配置文件my.cnf 无密码进入 [mysqld]下输入 skip-grant-tables重启mysql容器 进入容器内部 container_name 容器ID或name docker restart mysql docker exec -it <container_name>…...
常用芯片学习——DS3231M芯片
DS3231M RTC实时时钟 芯片介绍 DS3231M是一款低成本、极其精确的 I2C 实时时钟 (RTC)。该设备集成了电池输入,并在设备主电源中断时保持准确的计时。微型电子机械系统 (MEMS) 谐振器的集成提高了器件的长期精度&…...
蓝桥杯单片机快速开发笔记——矩阵键盘
一、原理分析 二、思维导图 三、示例框架 定义了四个位控制变量,用于控制键盘扫描时的行列信号。 在Scan_Keys()函数中,首先设置行列信号,将其中一个行信号置为0,另一个行信号置为1,同时将列信号置为1,用于…...
每周一算法:双向深搜
题目描述 达达帮翰翰给女生送礼物,翰翰一共准备了 N N N 个礼物,其中第 i i i 个礼物的重量是 G [ i ] G[i] G[i]。 达达的力气很大,他一次可以搬动重量之和不超过 W W W的任意多个物品。 达达希望一次搬掉尽量重的一些物品,请…...
蓝桥杯刷题(十)
1.翻转 代码 输入数据,每组数据进行比较,j的范围掐头去尾,若a[j]b[j],继续,若出现010,101子串则改成000,111,遍历完后比较a是否等于b,相同则输出次数,不同则输出-1。 for _ in ran…...
ioDraw:与 GitHub、gitee、gitlab、OneDrive 无缝对接,绘图文件永不丢失!
🌟 绘图神器 ioDraw 重磅更新,文件保存再无忧!🎉 无需注册,即刻畅绘!✨ ioDraw 让你告别繁琐注册,尽情挥洒灵感! 新增文件在线实时保存功能,支持将绘图文件保存到 GitHu…...
利用 Python 处理遥感影像数据:计算年度平均影像
在地球科学、气象学以及环境监测等领域,遥感影像数据是一种重要的信息源,它们可以提供地表的地形、植被覆盖、气候变化等丰富信息。然而,随着观测技术的进步,我们通常会获得大量的遥感影像数据,如何高效地处理和分析这…...
【Leetcode-73.矩阵置零】
题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&…...
redis 常见的异常
目录 一、缓存穿透 1、概念 解决方案 (1)布隆过滤器 (2)、缓存空对象 二、缓存雪崩 1、概念 解决方案 (1)redis高可用 (2)限流降级 (3)数据预热 一、缓存穿透 1、概念 缓…...
npm包、全局数据共享、分包
使用 npm 包 小程序对 npm 的支持与限制 目前,小程序中已经支持使用 npm 安装第三方包,从而来提高小程序的开发效率。但是,在小程序中使用npm 包有如下 3 个限制: ① 不支持依赖于 Node.js 内置库的包 ② 不支持依赖于浏览器内置…...
UnityShader:IBL
效果: 实现: Shader "MyShader/IBL" {Properties{_CubeMap ("环境贴图", Cube) "white" {}_Exposure("曝光",float)1.0_Color("颜色",color)(1,1,1,1)_NormalMap("法线贴图",2d)"bu…...
每日五道java面试题之mybatis篇(三)
目录: 第一题. MyBatis的框架架构设计是怎么样的?第二题. 为什么需要预编译?第三题. Mybatis都有哪些Executor执行器?它们之间的区别是什么?第四题. Mybatis中如何指定使用哪一种Executor执行器?第五题. Mybatis是否支持延迟加载…...
C#开发五子棋游戏:从新手到高手的编程之旅
C#开发五子棋游戏:从新手到高手的编程之旅 目录 一、引言 二、项目规划与设计思路 三、棋盘与棋子的数据模型构建 四、交互式用户界面设计 五、核心游戏逻辑实现 一、引言 五子棋,作为一种古老的策略型棋类游戏,在全球拥有广泛的爱好者…...
ELK日志管理实现的3种常见方法
ELK日志管理实现的3种常见方法 1. 日志收集方法 1.1 使用DaemonSet方式日志收集 通过将node节点的/var/log/pods目录挂载给以DaemonSet方式部署的logstash来读取容器日志,并将日志吐给kafka并分布写入Zookeeper数据库.再使用logstash将Zookeeper中的数据写入ES,并通过kibana…...
深度强化学习01
Random variable Probability Density Function 期望 Random Sampling 学习视频 这绝对是我看过最好的深度强化学习!从入门到实战,7小时内干货不断!_哔哩哔哩_bilibili...
C++ 智能指针的使用
智能指针类型 在C程序中,普通变量使用栈内存,为函数运行时专用,结束后会自动释放,无须考虑内存释放问题。 但堆内存是共用的,其使用是通过指针变量的new来分配,使用delete来释放,因指针使用方便…...
Flutter 核心原理 - UI 框架(UI Framework)
Flutter 既能保证很高的开发效率,又能获得很好的性能。 这两年 Flutter 技术热度持续提高,整个 Flutter 生态和社区也发生了翻天覆地的变化。目前Flutter 稳定版发布到了3.0,现在已经支持移动端、Web端和PC端,通过Flutter 开发的…...
Wand-Enhancer:3步解锁WeMod专业版功能的完整用户指南
Wand-Enhancer:3步解锁WeMod专业版功能的完整用户指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否厌倦了WeMod免费版的种种限制&a…...
基于仿真数据增强与PINN的TCAD模型参数自动校准方法
1. 项目概述与核心挑战在功率半导体器件的研发流程里,TCAD仿真扮演着“数字实验室”的角色。工程师们通过它,可以在昂贵的流片之前,预测器件的电学特性,优化结构设计。然而,这个“数字实验室”的预测精度,高…...
Windows Cleaner深度解析:从C盘爆红到系统性能全面优化的完整方案
Windows Cleaner深度解析:从C盘爆红到系统性能全面优化的完整方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费开源…...
VMware Workstation Pro 17 免费许可证密钥终极指南:快速获取与完整安装教程
VMware Workstation Pro 17 免费许可证密钥终极指南:快速获取与完整安装教程 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major…...
手机号码定位技术:从查询到地图可视化的完整解决方案
手机号码定位技术:从查询到地图可视化的完整解决方案 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirro…...
用Godot 4.2的ShapePoints库,5分钟搞定游戏UI里的进度条、血条和技能图标
用Godot 4.2的ShapePoints库快速打造游戏UI组件在独立游戏开发中,UI设计往往是容易被忽视却至关重要的环节。传统做法需要美术资源支持,但当项目处于原型阶段或团队资源有限时,程序化生成UI元素就成为高效解决方案。Godot 4.2内置的ShapePoin…...
破局奈奎斯特:从同步采样时序抖动到全链路EMC,高精度采集卡的超频设计边界
http://www.z-linear.com 在数据采集卡(DAQ)的选型手册中,工程师们习惯于紧盯“分辨率”和“采样率”这两个显性参数。然而,当面对极其苛刻的工业应用——例如多轴伺服电机的闭环控制、电网电能质量的高次谐波分析、或微弱生物电…...
嵌入式开发中LLM应用的挑战与优化实践
1. 嵌入式系统开发中的LLM应用现状嵌入式系统开发作为连接软件与硬件的关键领域,其特殊性给大语言模型(LLM)的应用带来了独特挑战。与通用软件开发不同,嵌入式开发需要处理硬件寄存器配置、实时性要求、资源约束等底层问题。当前主…...
神经模拟器超越训练数据:从误差纠正到高效科学计算
1. 项目概述:当神经模拟器“青出于蓝”在科学计算这个行当里,求解偏微分方程(PDE)是模拟从流体流动到热量传递、从电磁场到量子力学等几乎所有物理现象的基础。我们这些搞计算的人,常年跟有限差分、有限体积、有限元这…...
2026财务分析师新人如何快速提升能力:从“账房先生”到“战略参谋”的跃迁之路
2026年的财务领域,规则已经彻底改写。传统的“记账、算账、报账”正在被RPA和AI快速替代,企业真正渴求的,不再是只会做账的“会计”,而是能够深入业务、洞察数据、驱动决策的财务分析师。这不仅是职业进阶的必然要求,更…...
