一、前言
在Avalonia開發(一)環境搭建 文章中介紹了Avalonia
的介紹、開發環境的搭建、專案建立,以及專案FirstAvaloniaApp
專案結構的介紹。本篇文章將介紹各平臺的專案介紹。
二、Desktop
專案結構
FirstAvaloniaApp.Desktop
專案中預設生成的只有兩個檔案:Program.cs
和app.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.xml
、Resources
、Icon.png
、MainActivity.cs
幾個檔案/資料夾。在這裡我們主要講的是MainActivity.cs
。
MainActivity
繼承自AvaloniaMainActivity<TApp>
類,並實現虛方法CustomizeAppBuilder
。此虛方法主要是執行載入字型,在父類中存在執行了用於載入Android
系統相關資源的一些東西,如果想繼續研究的話,可以參考Avalonia
的原始碼,這裡不再詳細贅述。
MainActivity
類上面新增了Activity
屬性,指定主題、圖示、啟動頁等相關內容。
專案完成編譯後,如果不使用模擬器或者真機執行的話不會生成apk
檔案,只是簡單的生成了對應dll
檔案。
連線真機,並開啟除錯功能,可以將apk程式安裝到手機上執行。
三、iOS
專案結構
FirstAvaloniaApp.iOS
專案內包含的基礎檔案(夾)比較多,如:Asset Catalogs
、Resources
、AppDelegata.cs
、Entitlements.plist
、Info.plist
、Main.cs
。因沒有開發過iOS的應用,某些檔案(夾)具體作用不得而知。
Main.cs
:入口函式,傳入了AppDelegata.cs
的型別
AppDelegata.cs
繼承自AvaloniaAppDelegate<TApp>
類,並實現虛方法CustomizeAppBuilder
,執行一些平臺的相關內容。
Entitlements.plist
是許可權相關的內容
Info.plist
是對程式的一些內容的設定。
是否能執行,未驗證。
四、Browser
專案結構
目前還處於早期階段,尚未準備好用於生產
FirstAvaloniaApp.Browser
專案內包含的Properties
、AppBundle
、Program.cs
、runtimeconfig.template.json
Program.cs
:定義一個主函式。
看一下BuildAvaloniaApp()
函式,使用的是lambda表示式,裡面用到了類為AppBuilder
,後面的為幾個靜態方法
Configure<T>
:AppBuilder
中的靜態方法,用於生成一個AppBuilder
的例項。
可以在瀏覽器中執行。
五、釋出
5.1 Desktop
釋出
釋出選擇資料夾,執行到最後,會生成一個Properties\PublishProfiles\FolderProfile.pubxml
檔案,
經過本人的測試,對於Windows
、Linux
、oxs
三個平臺的桌面程式均可以正常釋出(使用的單檔案釋出),Windows
平臺程式可以正常執行,對於其他兩個系統的程式,因沒有機器,未進行驗證。
Windows
釋出後的檔案列表
Linux
釋出後的檔案列表
oxs
釋出後的檔案列表
5.2 Android
釋出
選擇了資料夾選項,不能正常釋出生成apk程式。
5.3 iOS
釋出
選擇了資料夾選項,在Windows平臺上不能正常釋出程式。
5.4 Browser
釋出
選擇了資料夾選項,在Windows平臺上可以釋出,但是在publish資料夾中沒有檔案。
結果分析
五、總結
各個平臺的程式都使用了AppBuilder
這個類,主要用於構建初始化特定平臺的初始化服務工作。
目前,Avalonia
的某些內容還不成熟,對於特定平臺的需求,選擇還是要謹慎一些。