Avalonia开发(二)项目结构解析
一、前言
在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
的某些内容还不成熟,对于特定平台的需求,选择还是要谨慎一些。