GeneralUpdate版本更新公告20230422

opendotnet 發佈 2024-01-01T14:41:28.279451+00:00

大家好我是juster,GeneralUpdate的開源項目作者。這次將發布GeneralUpdate的OSS功能的版本。這次修復了部分bug和事件管理重構。目前已做主要流程的運行測試想嘗鮮試試的小夥伴可以先通過源碼的方式編譯dll版本,待基本測試完成之後將會更新到nuget上。

大家好我是juster,GeneralUpdate的開源項目作者。這次將發布GeneralUpdate的OSS功能的版本。這次修復了部分bug和事件管理重構。目前已做主要流程的運行測試想嘗鮮試試的小夥伴可以先通過源碼的方式編譯dll版本,待基本測試完成之後將會更新到nuget上。

1.更新簡介

(1)在線文檔更新

【GeneralUpdate幫助文檔20230422.pdf】在線幫助文檔也做了修改,https://gitee.com/GeneralLibrary/GeneralUpdate/tree/master/doc

(2)使用技術更新

黑名單功能,OSS新功能發布,針對windows和.NET MAUI Android 版本。修復了部分bug和重構了組件整體的事件管理通知機制。

2.發布內容

組件名稱 版本號(old) 版本號(new) 狀態
GeneralUpdate.AspNetCore 1.4.1 - -
GeneralUpdate.ClientCore 2.8.9 2.12.9 新版本
GeneralUpdate.Core 4.11.18 4.14.18 新版本
GeneralUpdate.Differential 1.3.0 1.4.1 新版本
GeneralUpdate.Zip 1.3.0 - -
GeneralUpdate.Tool 2.2.5 2.3.5 新版本
GeneralUpdate.Single 1.0.0 - -
GeneralUpdate.Maui.OSS 1.0.0 1.0.0 新版本

【1】組件GeneralUpdate.ClientCore

1.新增OSS更新功能

2.新增黑名單功能

3.重構事件,添加事件管理機制

4.修復,增量包只能識別新增,不能識別刪除

【2】組件GeneralUpdate.Core

1.新增OSS更新功能

2.重構事件,添加事件管理機制

3.修復,增量包只能識別新增,不能識別刪除

【3】組件GeneralUpdate.Differential

1.修復,增量包只能識別新增,不能識別刪除

2.1 組件GeneralUpdate.ClientCore、組件GeneralUpdate.Core改動

1.事件訂閱機制重構之後不再使用event+=訂閱方式,通過事件EventManger添加事件監聽。對於開發者來說只需要輕微的代碼修改即可適應新版本。對於組件本身而言減少大量的代碼,組合優於繼承。

2.添加黑名單管理SetBlacklist方法,可以設置不想更新的某個具體文件或者某個類型的文件,組件內置默認黑名單文件:{ "Newtonsoft.Json.dll" } 默認黑名單文件擴展名:{ ".patch", ".7z", ".zip", ".rar", ".tar" , ".json" }。

Task.Run(async  =>
{
//ClientStrategy該更新策略將完成1.自動升級組件自更新 2.啟動更新組件 3.配置好ClientParameter無需再像之前的版本寫args數組進程通訊了。
//generalClientBootstrap.Config(baseUrl, "B8A7FADD-386C-46B0-B283-C9F963420C7C").
var configinfo = GetWindowsConfiginfo;
var generalClientBootstrap = await new GeneralClientBootstrap
//單個或多個更新包下載通知事件
.AddListenerMultiDownloadProgress(OnMultiDownloadProgressChanged)
//單個或多個更新包下載速度、剩餘下載事件、當前下載版本信息通知事件
.AddListenerMultiDownloadStatistics(OnMultiDownloadStatistics)
//單個或多個更新包下載完成
.AddListenerMultiDownloadCompleted(OnMultiDownloadCompleted)
//完成所有的下載任務通知
.AddListenerMultiAllDownloadCompleted(OnMultiAllDownloadCompleted)
//下載過程出現的異常通知
.AddListenerMultiDownloadError(OnMultiDownloadError)
//整個更新過程出現的任何問題都會通過這個事件通知
.AddListenerexception(OnException)
.Config(configinfo)
.Option(UpdateOption.DownloadTimeOut, 60)
.Option(UpdateOption.Encoding, Encoding.Default)
.Option(UpdateOption.Format, Format.ZIP)
.Strategy<WindowsStrategy>
//注入一個func讓用戶決定是否跳過本次更新,如果是強制更新則不生效
.SetCustomOption(ShowCustomOption)
//默認黑名單文件:{ "Newtonsoft.Json.dll" } 默認黑名單文件擴展名:{ ".patch", ".7z", ".zip", ".rar", ".tar" , ".json" }
//如果不需要擴展,需要重新傳入黑名單集合來覆蓋。
.SetBlacklist(GetBlackFiles, GetBlackFormats)
.LaunchTaskAsync;
});

2.2 OSS

1.什麼是OSS?

OSS的全稱是對象存儲服務(Object Storage Service),做服務端技術棧開發的小夥伴肯定對這個不陌生在各大雲伺服器廠商都會提供類似的服務,說簡單點就是一個文件伺服器。例如:阿里雲OSS、騰訊雲COS、華為雲OBS,其實它們只是名字不一樣功能服務都差不多。然後本更新組件新功能的實現思路非常相似那麼就選擇了OSS來為該功能命名,而且方便開發者一眼能get到這個功能的作用(需要使用組件GeneralUpdate.ClientCore、GeneralUpdate.Core)。

2.GeneralUpdate.OSS運行原理

1.準備version.json版本信息配置文件,更新文件(update.zip)更新文件和之前的打包方式一樣。

[
{
"PubTime": 1680443321,
"Name": "generalupdate.ossclient",
"MD5": "9bf414990a67e74f11752d03f49b15d8",
"Version": "1.0.4",
"Url": "http://192.168.50.203/update.zip"
},
{
"PubTime": 1680444916,
"Name": "generalupdate.ossclient",
"MD5": "JXC122DFXCZXZNMRFf11752d03f49b15d8",
"Version": "1.0.5",
"Url": "http://192.168.50.203/update2.zip"
}
]

2.Client啟動時直接請求OSS伺服器或文件伺服器,下載version.json文件。

3.下載到本地之後解析版本信息內容判斷是否需要更新,如果將信息通過進程啟動傳遞Upgrade(Client自我關閉)。

4.Upgrade啟動之後直接去下載update.zip,下載到本地之後直接解壓覆蓋本地文件。

5.Upgrade更新完成之後把Client啟動起來,自我關閉。更新結束。

GeneralUpdateOSS的功能和GeneralUpdateBootstrap功能對比來說,使用的門檻非常低如果公司對自動更新的要求不高的話可以使用這個功能。一句話概括這個功能就是下載version.json根據文件里的內容去逐版本下載更新包,下載下來之後直接解壓更新就結束了。

3.快速啟動

Client(主客戶端)使用代碼示例:

Task.Run(async  =>
{
var url = "http://192.168.50.203";
var appName = "GeneralUpdate.Client";
var version = "1.0.0.0";
var versionFileName = "version.json";
paramsOSS @params = new ParamsOSS(url, appName, version, versionFileName);
await GeneralClientOSS.Start(@Params);
});

Upgrade(升級助手)使用代碼示例:

private static void Main(string[] args)
{
Task.Run(async =>
{
//var url = "http://192.168.50.203";
//var appName = "GeneralUpdate.Client";
//var version = "1.0.0";
//var versionFileName = "version.json";
//SerializeUtil.Deserialize<ParamsOSS>(args[0]);
//ParamsOSS @params = new ParamsOSS(url, appName, version, versionFileName);
ParamsOSS @params = SerializeUtil.Deserialize<ParamsOSS>(args[0]);
await GeneralUpdateOSS.Start<OSSStrategy>(@params,Encoding.Default);
});
}

4.事件通知訂閱

在OSS的更新過程中,保留了更新事件的參數和之前一樣。

//code...
GeneralUpdateOSS.AddListenerMultiDownloadStatistics(OnMultiDownloadStatistics);

private static void OnMultiDownloadStatistics(object sender, MultiDownloadStatisticsEventArgs e)
{
Console.WriteLine($" {e.Speed} , {e.Remaining.ToShortTimestring}");
}

2.3 .NET MAUI OSS

MAUI OSS功能介紹和 11.OSS中介紹的是一樣的。但是它是針對.NET MAUI編寫的更新,使用的組件庫是GeneralUpdate.Maui.OSS。目前只實現了MAUI Andorid平台的自動更新。

1.GeneralUpdate.Maui.OSS運行原理

1.準備version.json版本信息配置文件,更新文件(update.apk)更新文件就直接是新版本的apk了(或.abb)。

{
"PubTime": 1680444916,
"Name": "com.companyname.generalupdate.ossclient",
"MD5": "9bf414990a67e74f11752d03f49b15d8",
"Version": "1.0.5",
"Url": "http://192.168.50.203/com.companyname.generalupdate.ossclient.apk"
}

2.Client啟動時直接請求OSS伺服器或文件伺服器,下載version.json文件。

3.下載到本地之後解析版本信息內容,判斷是否需要更新。

4.需要更新則下載update.apk。

5.下載完成之後執行安裝,這一步就交給了安卓作業系統執行。執行完成之後運行新版本app。

2.快速啟動

//http://192.168.50.203/version.json
string url = "http://192.168.50.203";
string appName = "MainApplication.exe";
string currentVersion = "1.1.1.1";
string versionFileName = "versions.json";
GeneralUpdateOSS.AddListenerDownloadProcess(OnOSSDownload);
GeneralUpdateOSS.AddListenerException(OnException);
await GeneralUpdateOSS.Start<Strategy>(new ParamsAndroid(url, appName, "123456789", currentVersion, versionFileName));

3.事件通知訂閱

GeneralUpdateOSS.AddListenerDownloadProcess(OnOSSDownload);
GeneralUpdateOSS.AddListenerException(OnException);

private void OnOSSDownload(object sender, OSSDownloadArgs e)
{
Console.WriteLine($"{e.ReadLength},{e.TotalLength}");
}

private void OnException(object sender, ExceptionEventArgs exception)
{
Console.WriteLine(exception.Exception.Message);
}

4. .NET MAUI Android 相關疑問處理引導文章

https://www.cnblogs.com/MASA/p/16612541.html

https://learn.microsoft.com/zh-cn/dotnet/maui/android/deployment/?view=net-maui-7.0

https://stackoverflow.com/questions/45940861/android-8-cleartext-http-traffic-not-permitted

https://note.youdao.com/ynoteshare/mobile.html?id=5c5d5cf8fe1d67419b09024255ff239c

5.運行效果

目前已運行測試機型、平台 。

1.在華為榮耀Px30非鴻蒙系統手機可運行。

2.Visual studio 2022 preview Pixe 5 - API33 (Android 13.0 - API 33) 可運行。

關鍵字: