软件第一版发布后,就存在一个自动升级问题,不能每次都是手动发给客户吧;
主要参考,segmentfault.com/a/1190000042373082,前面加上https的头啊,好像链接不给放;
就这个链接的例子,还是比较实用的;
说说自动升级的主要过程吧;
核心是:1,检查版本,也就是在公网上放一个版本记录文件,每次启动时主动从这个文件读一个版本号,看看是否需要更新,因为一般放在网上的都是最新的,所以,只要不同就可以更新,所以就放在字符串,因为Android编译后默认的版本号是1.0.0这样的格式,所以那个文件里面就这么放就可以了;2,放最新的apk文件,但这里有个坑,因为不知道从什么时候开始,apk文件各种云存储不让直接下载安装了,所以你需要给个扩展名,否则一直异常。
例子里面用了masa,其实没必要,用你以前熟悉的界面就可以,
关键代码解释下:
var currentVersion = VersionTracking.CurrentVersion;
var latestVersion = await _client.GetStringAsync(url);
第一句是系统级的版本,这个是在maui项目文件中编写的,注意要跟网上放那个版本定义文件同步修改;
第二句就是从url里面获取一个版本号,;
类似于这样的格式,update.txt文件里面就放一个1.0.2这样的字符串就可以了,跟你放网上版本一致就可以了;
下面这段就是download apk文件的代码了,其中URL类似于
wonengEMT.rom,我把apk改成了rom了
var req = new HttpRequestMessage(new HttpMethod("GET"), url);
var response = _client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead).Result;
var allLength = response.Content.Headers.ContentLength;
var stream = await response.Content.ReadAsStreamAsync();
var file = $"{FileSystem.AppDataDirectory}/{NameOfApk}";
await using var fileStream = new FileStream(file, FileMode.Create);
await using (stream)
{
var buffer = new byte[10240];
var readLength = 0;
int length;
while ((length = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0)
{
readLength += length;
action(readLength, allLength!.Value);
// 写入到文件
fileStream.Write(buffer, 0, length);
}
}
}
最后有个安装新版本的代码,这个就不拷贝了,例子里面有;
其他界面显示根据自己项目用的库来,用标准maui就可以,
我用了阿里云的oss存储,不过杯具的是,新手免费3个月的试用我没点上,后面再点就不符合要求了,我就买了个套餐,测试用先,后续转给公司买单。
根据例程,就这么做完了,速度还可以,其中出了一个问题,debug模式下没问题,release编译时一直操作,一直找不到一个文件,最后我就复制下,看下图:
图中xml文件夹下的两个文件一模一样的内容,但是release时一直提示找不到上面那个文件,我干脆就直接做了个一个文件,编译就通过了,debug也可以,我也没有删除原来那个provider_paths.xml,不知道问题在哪,就这么着了。
自动升级我觉得核心就在于从云上下载个文件,其他就正常操作就可以了
阅读(511) | 评论(0) | 转发(0) |