如果仅需要调用 android 底层的一些功能,可以只使用 MauiEssentials
引用包 dotnet add package Microsoft.Maui.Essentials
启用 <UseMauiEssentials>true</UseMauiEssentials>
文档 https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/?view=net-maui-10.0
可以参见 oidc 登录流程文档,其中使用了 MauiEssentials 中的 WebAuthenticatorCallbackActivity 与 WebAuthenticator : https://blog.xsoft.ltd/2026/01/18/android-avalonia-oidc-%e7%99%bb%e5%bd%95/
如果需要全套 maui (含 UI 及 MauiEssentials) 功能, 可以使用 AvaloniaMauiHybrid
https://github.com/AvaloniaUI/AvaloniaMauiHybrid
准备工作
-
调整 dotnetsdk 为 8.0, 最新的 10.0 会有引用包兼容性问题
-
注意
注意引用的相关包要兼容 .net 8 , 不要使用太新的版本, 比如
Microsoft.Maui.Essentials用8.*, 不要使用10.* -
引用包
nuget add package Avalonia.Maui -
启用
<UseMaui>true</UseMaui> -
需要一个 maui application
创建一个 Microsoft.Maui.Controls.Application 子类, 比如
public class MauiApplication : Application {} -
启用 maui application
appBuilder.UseMaui<MauiApplication>(this); -
设置主题
需要为 maui 准备一个主题,不然会报错, avalonia 在
/Resources/values/styles.xml中设置了默认主题MyTheme, 将其设置父类为Theme.MaterialComponents.*, 比如
<style name="MyTheme" parent="Theme.MaterialComponents.DayNight">
</style>
<style name="MyTheme.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/splash_screen</item>
<item name="colorPrimary">#2196F3</item>
<item name="colorSecondary">#FF4081</item>
</style>
- 调用代码
要需要使用 muai 控件的地方添加
MauiControlHost, 其中放置maui控件, 比如
xmlns:mauiHost="clr-namespace:Avalonia.Maui.Controls;assembly=Avalonia.Maui"
xmlns:mauiCtrls="clr-namespace:Microsoft.Maui.Controls;assembly=Microsoft.Maui.Controls"
<mauiHost:MauiControlHost Width="100" Height="100">
<mauiCtrls:Grid>
<mauiCtrls:Button Text="MAUI Button" Command="{Binding LoginCommand}" />
</mauiCtrls:Grid>
</mauiHost:MauiControlHost>
除非有现在的 maui 代码需要直接复用,不然主题兼容与控件混用就直接会导致很多问题,