Avalonia開發(二)專案結構解析

芝麻科技發表於2023-09-20

一、前言

Avalonia開發(一)環境搭建 文章中介紹了Avalonia的介紹、開發環境的搭建、專案建立,以及專案FirstAvaloniaApp專案結構的介紹。本篇文章將介紹各平臺的專案介紹。

二、Desktop專案結構

FirstAvaloniaApp.Desktop專案中預設生成的只有兩個檔案:Program.csapp.manifest(程式檔案清單)

Program.cs 主要是Main函式,指定程式執行的一些條件

看一下BuildAvaloniaApp()函式,使用的是lambda表示式,裡面用到了類為AppBuilder,後面的為幾個靜態方法

  • Configure<T>AppBuilder中的靜態方法,用於生成一個AppBuilder的例項。

  • UsePlatformDetect:靜態擴充套件方法,用於載入平臺需要的一些基礎內容,如渲染等。位於Avalonia.Desktop.dll類庫中

  • WithInterFont:靜態擴充套件方法,用於載入字型的相關處理,位於Avalonia.Fonts.Inter.dll庫中

  • LogToTrace:靜態擴充套件方法,用於一些日誌資訊的輸出,位於Avalonia.Controls.dll庫中。

專案完成編譯後,對於Windows平臺的話,直接生成對應的exe程式。

三、Android專案結構

FirstAvaloniaApp.Android 專案內包括Android需要的 Properties\AndroidManifest.xmlResourcesIcon.pngMainActivity.cs幾個檔案/資料夾。在這裡我們主要講的是MainActivity.cs

MainActivity繼承自AvaloniaMainActivity<TApp>類,並實現虛方法CustomizeAppBuilder。此虛方法主要是執行載入字型,在父類中存在執行了用於載入Android系統相關資源的一些東西,如果想繼續研究的話,可以參考Avalonia的原始碼,這裡不再詳細贅述。

MainActivity類上面新增了Activity屬性,指定主題、圖示、啟動頁等相關內容。

專案完成編譯後,如果不使用模擬器或者真機執行的話不會生成apk檔案,只是簡單的生成了對應dll檔案。

連線真機,並開啟除錯功能,可以將apk程式安裝到手機上執行。

三、iOS專案結構

FirstAvaloniaApp.iOS 專案內包含的基礎檔案(夾)比較多,如:Asset CatalogsResourcesAppDelegata.csEntitlements.plistInfo.plistMain.cs。因沒有開發過iOS的應用,某些檔案(夾)具體作用不得而知。

Main.cs:入口函式,傳入了AppDelegata.cs的型別

AppDelegata.cs繼承自AvaloniaAppDelegate<TApp>類,並實現虛方法CustomizeAppBuilder,執行一些平臺的相關內容。

Entitlements.plist是許可權相關的內容

Info.plist是對程式的一些內容的設定。

是否能執行,未驗證。

四、Browser專案結構

目前還處於早期階段,尚未準備好用於生產
FirstAvaloniaApp.Browser 專案內包含的PropertiesAppBundleProgram.csruntimeconfig.template.json

Program.cs:定義一個主函式。

看一下BuildAvaloniaApp()函式,使用的是lambda表示式,裡面用到了類為AppBuilder,後面的為幾個靜態方法

  • Configure<T>AppBuilder中的靜態方法,用於生成一個AppBuilder的例項。

可以在瀏覽器中執行。

五、釋出

5.1 Desktop釋出

釋出選擇資料夾,執行到最後,會生成一個Properties\PublishProfiles\FolderProfile.pubxml檔案,
經過本人的測試,對於WindowsLinuxoxs三個平臺的桌面程式均可以正常釋出(使用的單檔案釋出),Windows平臺程式可以正常執行,對於其他兩個系統的程式,因沒有機器,未進行驗證。

Windows釋出後的檔案列表

Linux釋出後的檔案列表

oxs釋出後的檔案列表

5.2 Android釋出

選擇了資料夾選項,不能正常釋出生成apk程式。

5.3 iOS釋出

選擇了資料夾選項,在Windows平臺上不能正常釋出程式。

5.4 Browser釋出

選擇了資料夾選項,在Windows平臺上可以釋出,但是在publish資料夾中沒有檔案。

結果分析

五、總結

各個平臺的程式都使用了AppBuilder這個類,主要用於構建初始化特定平臺的初始化服務工作。

目前,Avalonia的某些內容還不成熟,對於特定平臺的需求,選擇還是要謹慎一些。

Avalonia系列文章

1、 Avalonia開發(一)環境搭建

相關文章