新联街华少 發表於 2025-8-9 14:54:00

C# .net9 Avalonia Android 开发环境搭建 demo运行

<p>&nbsp;</p>
<p>0 新建项目</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144350513-1965799225.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144426230-1629671502.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144451160-1107572158.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>1 搭建环境</p>
<p>安装环境</p>
<p><span style="text-decoration: underline"><span style="font-family: 宋体">如何搭建</span>Android开发环境 | Avalonia Docs</span></p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline">Setting up the Android SDK for Xamarin.Android - Xamarin | Microsoft Learn</span></p>
<p>&nbsp;安装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>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809143942634-856936687.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809143950163-1854013711.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809143958317-663825211.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144003652-1163393764.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144009253-99768230.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144018368-2008273531.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144028642-415555752.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144034757-718362200.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144040468-163216896.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144045764-2113815805.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144051945-1673053630.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144059286-1338222091.png" alt="image" loading="lazy"></p>
<p>&nbsp;修改.net9</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144143330-2068003552.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144201139-1700674912.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144219031-959216534.png" alt="image" loading="lazy"></p>
<p>&nbsp;修改目录下的文件指定 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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;3 使用avalonia&nbsp;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>&nbsp;</p>
<p>&nbsp;</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&lt;HomeView&gt;();
      }
      return Container.Resolve&lt;MainWindow&gt;();
    }
   
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
      // Add Services and ViewModel registrations here

      Console.WriteLine("RegisterTypes()");

      // Services
      //// containerRegistry.RegisterSingleton&lt;ISampleService, ISampleService&gt;();

      // Views - Region Navigation
      //// containerRegistry.RegisterForNavigation&lt;DashboardView, DashboardViewModel&gt;();

      // Dialogs
      //// containerRegistry.RegisterDialog&lt;MessageBoxView, MessageBoxViewModel&gt;();
      //// containerRegistry.RegisterDialogWindow&lt;CustomDialogWindow&gt;(nameof(CustomDialogWindow));
      ///
      containerRegistry.RegisterForNavigation&lt;FooterView,FooterViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;HeaderView,HeaderViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;BodyView,BodyViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;HomeView,HomeViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;Page1View,Page1ViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;Page2View,Page2ViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;Page3View,Page3ViewViewModel&gt;();
      containerRegistry.RegisterForNavigation&lt;Page4View,Page4ViewViewModel&gt;();
    }

    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
      // Register modules
      //// moduleCatalog.AddModule&lt;DummyModule.DummyModule1&gt;();
    }
}
</pre>
</div>
<p>  </p>
<p>&nbsp;</p>
<p>4 运行效果</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809144856202-581075893.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145336891-1323376619.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145351762-1348356327.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145401466-1076744286.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;5 禁用启动动画</p>
<p><img src="https://img2024.cnblogs.com/blog/1571436/202508/1571436-20250809145306706-286575907.png" alt="image" loading="lazy"></p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">    &lt;!-- 添加这行来禁用启动画面 --&gt;
    &lt;item name="android:windowDisablePreview"&gt;true&lt;/item&gt;
</pre>
</div>
<p>  </p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/JohnnyLei/p/19029802
頁: [1]
查看完整版本: C# .net9 Avalonia Android 开发环境搭建 demo运行