C# .net9 Avalonia Android 开发环境搭建 demo运行
<p> </p><p>0 新建项目</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144350513-1965799225.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144426230-1629671502.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144451160-1107572158.png" alt="image" loading="lazy"></p>
<p> </p>
<p>1 搭建环境</p>
<p>安装环境</p>
<p><span style="text-decoration: underline"><span style="font-family: 宋体">如何搭建</span>Android开发环境 | Avalonia Docs</span></p>
<p> </p>
<p><span style="text-decoration: underline">Setting up the Android SDK for Xamarin.Android - Xamarin | Microsoft Learn</span></p>
<p> 安装xamarin环境</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809150104808-1303840244.png" alt="image" width="868" height="494" loading="lazy"></p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809143942634-856936687.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809143950163-1854013711.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809143958317-663825211.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144003652-1163393764.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144009253-99768230.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144018368-2008273531.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144028642-415555752.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144034757-718362200.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144040468-163216896.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144045764-2113815805.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144051945-1673053630.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144059286-1338222091.png" alt="image" loading="lazy"></p>
<p> 修改.net9</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144143330-2068003552.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144201139-1700674912.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144219031-959216534.png" alt="image" loading="lazy"></p>
<p> 修改目录下的文件指定 avalonia版本11.3.3</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145834779-1285230275.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p> 3 使用avalonia Prism.DryIoc.Avalonia 框架</p>
<p>nuget 安装Prism.DryIoc.Avalonia</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145538503-2111761404.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using MyGoldTest.ViewModels;
using MyGoldTest.Views;
using System;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Modularity;
namespace MyGoldTest;
public partial class App : PrismApplication
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
base.Initialize();// Required to initialize Prism.Avalonia - DO NOT REMOVE
}
public override void OnFrameworkInitializationCompleted()
{
// Line below is needed to remove Avalonia data validation.
// Without this line you will get duplicate validations from both Avalonia and CT
BindingPlugins.DataValidators.RemoveAt(0);
// if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
// {
// desktop.MainWindow = new MainWindow
// {
// DataContext = new MainWindowViewModel()
// };
// }
// else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
// {
// singleViewPlatform.MainView = new HomeView()
// {
// DataContext = new HomeViewViewModel()
// };
// }
base.OnFrameworkInitializationCompleted();
}
protected override AvaloniaObject CreateShell()
{
GlobalCls.Container = Container;
if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
{
//安卓不能使用Window,使用usercontrol
return Container.Resolve<HomeView>();
}
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// Add Services and ViewModel registrations here
Console.WriteLine("RegisterTypes()");
// Services
//// containerRegistry.RegisterSingleton<ISampleService, ISampleService>();
// Views - Region Navigation
//// containerRegistry.RegisterForNavigation<DashboardView, DashboardViewModel>();
// Dialogs
//// containerRegistry.RegisterDialog<MessageBoxView, MessageBoxViewModel>();
//// containerRegistry.RegisterDialogWindow<CustomDialogWindow>(nameof(CustomDialogWindow));
///
containerRegistry.RegisterForNavigation<FooterView,FooterViewViewModel>();
containerRegistry.RegisterForNavigation<HeaderView,HeaderViewViewModel>();
containerRegistry.RegisterForNavigation<BodyView,BodyViewViewModel>();
containerRegistry.RegisterForNavigation<HomeView,HomeViewViewModel>();
containerRegistry.RegisterForNavigation<Page1View,Page1ViewViewModel>();
containerRegistry.RegisterForNavigation<Page2View,Page2ViewViewModel>();
containerRegistry.RegisterForNavigation<Page3View,Page3ViewViewModel>();
containerRegistry.RegisterForNavigation<Page4View,Page4ViewViewModel>();
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
// Register modules
//// moduleCatalog.AddModule<DummyModule.DummyModule1>();
}
}
</pre>
</div>
<p> </p>
<p> </p>
<p>4 运行效果</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144856202-581075893.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145336891-1323376619.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145351762-1348356327.png" alt="image" loading="lazy"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145401466-1076744286.png" alt="image" loading="lazy"></p>
<p> </p>
<p> </p>
<p> 5 禁用启动动画</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145306706-286575907.png" alt="image" loading="lazy"></p>
<p> </p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;"> <!-- 添加这行来禁用启动画面 -->
<item name="android:windowDisablePreview">true</item>
</pre>
</div>
<p> </p>
<p> </p><br><br>
来源:https://www.cnblogs.com/JohnnyLei/p/19029802
頁:
[1]