一、前言
在Avalonia开发(一)环境搭建 文章中介绍了Avalonia
的介绍、开发环境的搭建、项目创建,以及项目FirstAvaloniaApp
项目结构的介绍。本篇文章将介绍各平台的项目介绍。
二、Desktop
项目结构
FirstAvaloniaApp.Desktop
项目中默认生成的只有两个文件:Program.cs
和app.manifest
(程序文件清单)
![8e2380110cb26c075fc8f59d2a8dfe19.png](https://img-blog.csdnimg.cn/img_convert/8e2380110cb26c075fc8f59d2a8dfe19.png)
Program.cs
主要是Main
函数,指定程序运行的一些条件
![0e967c25fefba7e58d702e727ed9d9f2.png](https://img-blog.csdnimg.cn/img_convert/0e967c25fefba7e58d702e727ed9d9f2.png)
看一下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的应用,某些文件(夹)具体作用不得而知。
![6aaa26d9ba2f1c9d03a7e9018c88fe16.png](https://img-blog.csdnimg.cn/img_convert/6aaa26d9ba2f1c9d03a7e9018c88fe16.png)
Main.cs
:入口函数,传入了AppDelegata.cs
的类型
AppDelegata.cs
继承自AvaloniaAppDelegate<TApp>
类,并实现虚方法CustomizeAppBuilder
,执行一些平台的相关内容。
Entitlements.plist
是权限相关的内容
Info.plist
是对程序的一些内容的设置。
是否能运行,未验证。
四、Browser
项目结构
「目前还处于早期阶段,尚未准备好用于生产」FirstAvaloniaApp.Browser
项目内包含的Properties
、AppBundle
、Program.cs
、runtimeconfig.template.json
![7c6ef7f87d1284d57f2de397c085be09.png](https://img-blog.csdnimg.cn/img_convert/7c6ef7f87d1284d57f2de397c085be09.png)
Program.cs
:定义一个主函数。
看一下BuildAvaloniaApp()
函数,使用的是lambda表达式,里面用到了类为AppBuilder
,后面的为几个静态方法
Configure<T>
:AppBuilder
中的静态方法,用于生成一个AppBuilder
的实例。
可以在浏览器中运行。
五、发布
![e318419c8bd4b5c7ecd1e5f38f9d4a60.png](https://img-blog.csdnimg.cn/img_convert/e318419c8bd4b5c7ecd1e5f38f9d4a60.png)
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文件夹中没有文件。
结果分析
![96227473e58cb2a2644c3c6262e385cc.png](https://img-blog.csdnimg.cn/img_convert/96227473e58cb2a2644c3c6262e385cc.png)
五、总结
各个平台的程序都使用了AppBuilder
这个类,主要用于构建初始化特定平台的初始化服务工作。
目前,Avalonia
的某些内容还不成熟,对于特定平台的需求,选择还是要谨慎一些。