diff --git a/src/PostIt/Directory.Packages.props b/src/PostIt/Directory.Packages.props
index 59b6b600..023d0654 100644
--- a/src/PostIt/Directory.Packages.props
+++ b/src/PostIt/Directory.Packages.props
@@ -3,18 +3,20 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
diff --git a/src/PostIt/PostIt.Android/Application.cs b/src/PostIt/PostIt.Android/Application.cs
index fb6b08d3..62ace02b 100644
--- a/src/PostIt/PostIt.Android/Application.cs
+++ b/src/PostIt/PostIt.Android/Application.cs
@@ -1,21 +1,19 @@
-using Android.App;
-using Android.Runtime;
-using Avalonia;
-using Avalonia.Android;
+using Android.App;
-namespace PostIt.Android
+namespace PostIt.Android;
+
+///
+/// Bare shell for Android. Avalonia
+/// 11 initialises its platform services from
+/// (which extends AvaloniaMainActivity<App>); no per-Application
+/// Avalonia setup is needed here. Kept only so that the [Application] entry
+/// stays present in the merged manifest, which the Android runtime expects
+/// when the manifest declares a custom android:name in the application tag.
+///
+[Application]
+public class Application : Android.App.Application
{
- [Application]
- public class Application : AvaloniaAndroidApplication
+ public Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
- protected Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
- {
- }
-
- protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
- {
- return base.CustomizeAppBuilder(builder)
- .WithInterFont();
- }
}
-}
+}
\ No newline at end of file
diff --git a/src/PostIt/PostIt.Android/MainActivity.cs b/src/PostIt/PostIt.Android/MainActivity.cs
index 1b413a9f..057703a4 100644
--- a/src/PostIt/PostIt.Android/MainActivity.cs
+++ b/src/PostIt/PostIt.Android/MainActivity.cs
@@ -2,6 +2,7 @@ using Android.App;
using Android.Content.PM;
using Android.Content;
using Avalonia.Android;
+using Avalonia;
using AndroidX.Emoji2.Text;
namespace PostIt.Android;
@@ -14,8 +15,15 @@ namespace PostIt.Android;
MainLauncher = true,
LaunchMode = LaunchMode.SingleTask,
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
-public class MainActivity : AvaloniaMainActivity
+public class MainActivity : AvaloniaMainActivity
{
+ protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
+ {
+ return base.CustomizeAppBuilder(builder)
+ .UseMaui(this)
+ .WithInterFont();
+ }
+
///
/// Strongly-typed handle to the current MainActivity instance, set in
/// and consumed by platform services such as
diff --git a/src/PostIt/PostIt.Android/PostIt.Android.csproj b/src/PostIt/PostIt.Android/PostIt.Android.csproj
index 7669ef62..1f865b07 100644
--- a/src/PostIt/PostIt.Android/PostIt.Android.csproj
+++ b/src/PostIt/PostIt.Android/PostIt.Android.csproj
@@ -1,7 +1,7 @@
Exe
- net10.0-android
+ net9.0-android36.0
android-arm64;android-x64
23.0.0
@@ -24,6 +24,7 @@
+
diff --git a/src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs b/src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs
new file mode 100644
index 00000000..4f58b4f2
--- /dev/null
+++ b/src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs
@@ -0,0 +1,35 @@
+using Microsoft.Maui.Controls;
+
+namespace PostIt.Maui;
+
+///
+/// Empty MAUI application registered as the embedding host for
+/// Avalonia.Maui. Avalonia.Maui expects a
+/// -derived type so that
+/// its .UseMaui<TMauiApp>(activity) extension can build the
+/// embedding pipeline (services, handlers, IPlatformApplication).
+///
+/// We never actually display any MAUI controls — the embedding sits in front
+/// of Avalonia so that Avalonia's Android platform layer (which is otherwise
+/// bound to a stub on Avalonia 12 / present-but-broken on Avalonia 11 without
+/// MAUI) gets the real Android Context and runs the surface view
+/// lifecycle correctly. This class exists to satisfy the generic constraint
+/// of UseMaui<TMauiApp> and gives MAUI something to attach its
+/// handler tree to.
+///
+/// Override CreateWindow with a no-op or leave the default; the
+/// virtual MAUI window is consumed by Avalonia.Maui's embedding and
+/// never surfaces to the user (Avalonia owns the visual tree).
+///
+public class MauiEmbeddingApp : Application
+{
+ public MauiEmbeddingApp()
+ {
+ }
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ // No-op window: Avalonia.Maui wraps it and never shows it.
+ return new Window();
+ }
+}
\ No newline at end of file
diff --git a/src/PostIt/PostIt/PostIt.csproj b/src/PostIt/PostIt/PostIt.csproj
index 1b48c21f..90fdd837 100644
--- a/src/PostIt/PostIt/PostIt.csproj
+++ b/src/PostIt/PostIt/PostIt.csproj
@@ -1,6 +1,6 @@
- net10.0
+ net9.0
enable
latest
true
diff --git a/src/Yavsc.Abstract/Yavsc.Abstract.csproj b/src/Yavsc.Abstract/Yavsc.Abstract.csproj
index 7a4f83ae..2305fc8c 100644
--- a/src/Yavsc.Abstract/Yavsc.Abstract.csproj
+++ b/src/Yavsc.Abstract/Yavsc.Abstract.csproj
@@ -1,6 +1,6 @@
- net10.0
+ net9.0
enable
A shared model for a little client/server app, dealing about establishing some contract, between some human client and provider.
diff --git a/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj b/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj
index ade7ca17..c078789c 100644
--- a/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj
+++ b/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj
@@ -1,6 +1,6 @@
- net10.0
+ net9.0
enable
Yavsc.Api.Client
Yavsc.Api.Client