Flutter使用auto_updater实现windows/mac桌面应用版本升级功能

news/2024/7/27 3:25:17/文章来源:https://blog.csdn.net/weixin_44786530/article/details/136557888

因为windows应用一般大家都是从网上下载的,后期版本肯定会更新,那用flutter开发windows应用,怎么实现应用内版本更新功能了?可以使用auto_updater库,
这个插件允许 Flutter 桌面 应用自动更新自己 (基于 sparkle 和 winsparkle)
地址如下:

pub仓库地址:auto_updater | Flutter Package
github仓库地址:https://github.com/leanflutter/auto_updater
中文文档地址:https://github.com/leanflutter/auto_updater/blob/main/README-ZH.md

开始使用

先添加依赖,将此添加到你的软件包的 pubspec.yaml 文件:

dependencies:auto_updater: ^0.1.7

windows使用需要安装openssl:

安装教程:windows安装Chocolatey方法注意事项,以及安装openssl方法-CSDN博客 

然后在main.dart中添加下面代码:

import 'package:auto_updater/auto_updater.dart';void main() async {// 必须加上这一行。WidgetsFlutterBinding.ensureInitialized();String feedURL = 'http://localhost:5002/appcast.xml';await autoUpdater.setFeedURL(feedURL);await autoUpdater.checkForUpdates();await autoUpdater.setScheduledCheckInterval(3600);runApp(MyApp());
}

生成私钥

运行以下命令:需要分别在 macOS 和 Windows 系统中运行该命令。

dart run auto_updater:generate_keys

命令将为你生成私钥(dsa_priv.pem)及公钥(dsa_pub.pem),请备份你的私钥并确保其安全,并将公钥作为 Windows 资源添加到项目中。 

macOS运行命令后输出:

A key has been generated and saved in your keychain. Add the `SUPublicEDKey` key to
the Info.plist of each app for which you intend to use Sparkle for distributing
updates. It should appear like this:<key>SUPublicEDKey</key><string>pfIShU4dEXqPd5ObYNfDBiQWcXozk7estwzTnF9BamQ=</string>

更改文件 macos/Runner/Info.plist 如下: 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>...+	<key>SUPublicEDKey</key>
+	<string>bHaXClrRGMmKoKP/3HJnr/jn2ODTRPAM3VZhhkI9ZvY=</string>
</dict>
</plist>

Windows运行命令后输出:

Generated two files:
dsa_priv.pem: your private key. Keep it secret and don't share it!
dsa_pub.pem: public counterpart to include in youe app.
BACK UP YOUR PRIVATE KEY AND KEEP IT SAFE!
If you lose it, your users will be unable to upgrade!

更改文件 windows/runner/Runner.rc 如下:


...+/
+//
+// WinSparkle
+//+// And verify signature using DSA public key:
+DSAPub      DSAPEM      "../../dsa_pub.pem"

打包应用

为了简化打包的过程,这里使用了 Flutter Distributor ,一个专门用于打包和发布 Flutter 应用的完整工具。官方网站:Getting Started | Flutter Distributor

安装flutter_distributor:

#安装命令
dart pub global activate flutter_distributor

安装Inno setup

必须安装Inno Setup 6 并且添加中文语言包,且安装目录要使用默认的C盘里面,否则打包失败。因为Flutter Distributor打包exe是基于inno setup 6实现的,默认官网是英文版本的,打包exe之后点击安装都是英文,所以我找到了中文版的inno setup 6和中文语言包,下载地址如下

Inno Setup 6和中文安装包下载地址:inno setup 带中文包.zip - 蓝奏云

添加distribute_options.yaml添加到你的项目根目录 

output: dist/
releases:- name: devjobs:- name: release-windowspackage:platform: windowstarget: exebuild_args:dart-define:APP_ENV: dev

添加 make_config.yaml 到你的项目 windows/packaging/exe (需要手动创建)目录:

make_config.yaml内容: (安装目录和快捷方式的名字,发布者名称配置等)

# AppId 的值唯一标识此应用。
# 不要在其他应用的安装程序中使用相同的 AppId 值。
# 以下为示例代码,实际根据你的项目进行替换
app_id: 5B566538-42B1-4826-A479-AF079F24A65D
publisher: Jory Cai
display_name: Hello Hado
create_desktop_icon: true
install_dir_name: hado_world
locales:- en- zh

开始生成exe文件:

flutter_distributor package --platform windows --targets exe

编译成功后:

对生成的exe文件进行升级签名:后面的路径要是你自己生成的文件路径

dart run auto_updater:sign_update dist/1.1.1/flutter_windows-1.1.1+1.1.1-windows-setup.exe

签名后的输入要添加到appcast.xml后面的dsaSignature属性里面:

appcast.xml内容:(配置更新版本和更新说明,还有更新文件下载链接等内容)

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle"><channel><title>auto_updater_example</title><description>Most recent updates to auto_updater_example</description><language>en</language><item><title>Version 1.1.0</title>#发行说明-读取html方式(2选1)<sparkle:releaseNotesLink>https://your_domain/your_path/release_notes.html</sparkle:releaseNotesLink>#发行说明-写死方式(2选1)<description><![CDATA[<ul><li>1、新增XX功能</li><li>2、新增XX功能</li></ul>]]></description><pubDate>Sun, 16 Feb 2022 12:00:00 +0800</pubDate>#你更新程序的地址<enclosure url="http://wwww.xxx.com/1.1.0+2/auto_updater_example-1.1.0+2-macos.zip"sparkle:edSignature="pbdyPt92pnPkzLfQ7BhS9hbjcV9/ndkzSIlWjFQIUMcaCNbAFO2fzl0tISMNJApG2POTkZY0/kJQ2yZYOSVgAA=="sparkle:version="1.1.0"sparkle:os="macos"length="13400992"type="application/octet-stream" /></item><item><title>Version 1.1.0</title>#发行说明-读取html方式(2选1)<sparkle:releaseNotesLink>https://your_domain/your_path/release_notes.html</sparkle:releaseNotesLink>#发行说明-写死方式(2选1)<description><![CDATA[<ul><li>1、新增XX功能</li><li>2、新增XX功能</li></ul>]]></description><pubDate>Sun, 16 Feb 2022 12:00:00 +0800</pubDate>#你更新程序的地址<enclosure url="http://www.xx.com/1.1.0+2/auto_updater_example-1.1.0+2-windows.exe"sparkle:dsaSignature="MEUCIQCVbVzVID7H3aUzAY5znpi+ySZKznkukV8whlMFzKh66AIgREUGOmvavlcg6hwAwkb2o4IqVE/D56ipIBshIqCH8rk="sparkle:version="1.1.0+2"sparkle:os="windows"length="0"type="application/octet-stream" /></item></channel>
</rss>

新版本更新操作

如果你的程序后续更新了,版本升级了,就修改项目根目录里面的 pubspec.yaml文件版本:

修改完之后,再执行命令重新打包: 

flutter_distributor package --platform windows --targets exe

打包后就会在项目根目录dist下面出现响应版本的exe:

然后运行命令对这个exe进行签名: 

dart run auto_updater:sign_update dist/1.1.0/flutter_windows-1.1.0+1.1.0-windows-setup.exe

将签名后的结果添加到appcast.xml里面:

并且修改appcast.xml里面响应的版本和更新说明:

然后启动历史版本的程序,检查更新:

点击安装更新后:

等待下载完成:点击安装更新

就会杀死现在的进程,然后重新执行安装操作:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_999095.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【三维重建】VastGaussian:用于大场景重建的大3D Gaussian(CVPR 2024)

题目&#xff1a;VastGaussian: Vast 3D Gaussians for Large Scene Reconstruction 来源&#xff1a;清华大学&#xff1b;华为诺亚&#xff1b;中国科学院 链接&#xff1a;https://vastgaussian.github.io/ 总结&#xff1a;VastGaussian&#xff1a;基于3D GS的分块优化重…

mysql数据库(下)

目录 约束 约束的概念和分类 1、约束的概念&#xff1a; 2、约束的分类 1、主键约束 2、默认约束 3、非空约束 4、唯一约束 5、外键约束 约束 约束的概念和分类 1、约束的概念&#xff1a; 约束时作用于表中列上的规则&#xff0c;用于限制加入表的数据约束的存在保证…

【网站项目】105校园车辆管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

SHARE 100M PRO:航测领域的多面手

在无人机航测领域&#xff0c;SHARE 100M PRO单镜头航测相机以其1.02亿像素的中画幅传感器和创新技术&#xff0c;正在重塑倾斜摄影的精度和效率。这款相机不仅在城市规划和土地管理中发挥着重要作用&#xff0c;还在环境监测、基础设施建设、农业管理等多个航测领域展现出其卓…

自编C++题目——几点了.easy ver

题目难度 入门 题目描述 一个老外用一口不流利的中文问你&#xff1a;“Xian zai ji dian le?”你看了一眼表&#xff0c;知道了现在是&#xff0c;你准备用这样的形式写在纸上&#xff1a; Now is m past/to h. 如果你看不懂&#xff0c;举个例子&#xff1a; 当h10&#…

treeview控件的应用

1.分类 treeview控件的基本应用&#xff0c;可以用于商品分类、文件分类等等。 2.辅助决策 treeview可以组成决策树&#xff0c;用来帮助人们做选择。比如说今天中午吃什么菜&#xff1f; 如果我来选择的话&#xff0c;那就是&#xff1a;不吃辣-鲁菜-糖醋鲤鱼。 3.求解算…

C# OpenCvSharp DNN Yolov8-OBB 旋转目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN Yolov8-OBB 旋转目标检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOT…

【MySQL系列 05】Schema 与数据类型优化

良好的数据库 schema 设计和合理的数据类型选择是 SQL 获得高性能的基石。 一、选择优化的数据类型 MySQL 支持的数据类型非常多&#xff0c;选择正确的数据类型对于获得高性能至关重要。不管存储哪种类型的数据&#xff0c;下面几个简单的原则都有助于做出更好的选择。 1. …

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种&#xff0c;由低到高分别为Read uncommitted &#xff08;读未提交&#xff09;、Read committed&#xff08;读提交&#xff09; 、Repeatable read&#xff08;可重复读&#xff09; 、Serializable &#xff08;串行化&a…

项目解决方案:多地5G蓄能电站的视频监控联网系统设计方案

目 录 一、前言 二、系统架构设计 1、系统架构设计说明 2、系统拓扑图 三、关键技术 1. 5G支持技术 2. 视频图像处理技术 3. 数据融合与分析技术 四、功能特点 1. 高效可靠 2. 实时监测 3. 远程控制 4. 故障预测 五、应用前景 一、前言 随着能源…

关于手机是否支持h264的问题的解决方案

目录 现象 原理 修改内容 现象 开始以为是手机不支持h264的编码 。机器人chatgpt一通乱扯。 后来检查了下手机&#xff0c;明显是有h264嘛。 终于搞定&#xff0c;不枉凌晨三点起来思考 原理 WebRTC 默认使用的视频编码器是VP8和VP9&#xff0c;WebRTC内置了这两种编码器…

继深圳后,重庆与鸿蒙展开原生应用开发合作

截至2023年底&#xff0c;开源鸿蒙开源社区已有250多家生态伙伴加入&#xff0c;开源鸿蒙项目捐赠人达35家&#xff0c;通过开源鸿蒙兼容性测评的伙伴达173个&#xff0c;累计落地230余款商用设备&#xff0c;涵盖金融、教育、智能家居、交通、数字政府、工业、医疗等各领域。 …

每日一题 — 和为t的两个数

LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代码&#xff1a; public int[] twoSum(int[] price, int target) {int left 0;int right price.length - 1;while(left < right){//每一次都重新计算和int sum price[…

Python和Google Colab进行卫星图像二维小波变化和机器学习

2D 小波分解是图像处理中的一种流行技术,使用不同的滤波器将图像分解为不同的频率分量(“近似”和“细节”系数)。该技术对于各种图像处理任务特别有用,例如压缩、去噪、特征提取和边缘检测。 在本文中,我们将演示如何在 Google Colab 中使用 Python 下载高分辨率样本卫星…

[Electron]中的Notification通知

Electron中的Notification Notification 用来创建OS(操作系统)桌面通知 静态方法 Notification.isSupported() 返回 boolean - 当前系统是否支持桌面通知 const notification new Notification([options]) 实例方法 notification.show() 显示通知 notification.close…

基于Pytorch搭建分布式训练环境

Pytorch系列 文章目录 Pytorch系列前言一、DDP是什么二、DPP原理terms、nodes 和 ranks等相关术语解读DDP 的局限性为什么要选择 DDP 而不是 DP代码演示1. 在一个单 GPU 的 Node 上进行训练&#xff08;baseline&#xff09;2. 在一个多 GPU 的 Node 上进行训练临门一脚&#x…

微信开发者工具 vim 键位绑定

问题&#xff1a;如标题 解决&#xff1a; 最上边点击设置&#xff0c;找到编辑器设置 点击更多编辑器设置&#xff0c;然后会弹出设置这个页面 搜索 vim &#xff0c;并点击 一直往下边滑动&#xff0c;找到 setting.json 然后加入这段代码&#xff1a; "vim.insertM…

Java安全 CC链3分析

Java安全 CC链3分析 cc链3介绍前置知识类加载类加载的方法例1.forName例2.getSystemClassLoader总结 javassist模块 cc链3分析TemplatesImpl类demo2TrAXFilter类InstantiateTransformer类 最终exp基于LazyMap链基于TransformedMap链 cc链3介绍 cc链3的后半部分与cc链1相同&…

PDF控件Spire.PDF for .NET【安全】演示:使用时间戳服务器对 PDF 进行数字签名

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

向量的正交变换

目录 几种线性变换 正交变换 方阵的合同 几种线性变换 正交变换 方阵的合同