build(android): downgrade Avalonia 12 -> 11.3.20 + Avalonia.Maui 11.3.0
WIP: addressing the layer-3 WindowingPlatformStub.NotSupportedException
crash on PostIt.Android by downgrading to the Avalonia 11 / Avalonia.Maui
11 stack, where the Android runtime platform layer (IWindowingPlatform)
gets properly bound via the MAUI embedding extension instead of being
left as a stub.
Touched files:
- src/PostIt/Directory.Packages.props:
- Avalonia 12.1.1 -> 11.3.20 (Avalonia, Avalonia.Android,
Avalonia.AvaloniaEdit, Avalonia.Browser, Avalonia.Desktop,
Avalonia.Fonts.Inter, Avalonia.Themes.Fluent).
- New: Avalonia.Maui 11.3.0.
- Microsoft.Maui.Essentials 10.0.100 -> 8.0.100 (aligns with the
Microsoft.Maui.Controls 8.0.x family that Avalonia.Maui 11.3.0
pulls transitively).
- New: Microsoft.Maui.Controls 8.0.100.
- src/PostIt/PostIt.Android/PostIt.Android.csproj:
- TargetFramework net10.0-android -> net9.0-android36.0 (Avalonia
Android 11.3.20 targets net8.0-android34.0, but the
compat-ascending fallback lets us consume from net9.0-android36.0
against the API-36 platform that's already installed locally).
- Add Avalonia.Maui PackageReference.
- Restore Microsoft.Maui.Essentials PackageReference (left in
earlier removal during the MAUI-cause-of-crash hypothesis check).
- src/PostIt/PostIt/PostIt.csproj: TargetFramework net10.0 -> net9.0
(must match what PostIt.Android consumes transitively, otherwise
the build chain breaks).
- src/Yavsc.Abstract/Yavsc.Abstract.csproj: net10.0 -> net9.0 (same
reason; six other consumers stay on net10.0 and pick up the new
assembly via standard TFM compat).
- src/Yavsc.Api.Client/Yavsc.Api.Client.csproj: net10.0 -> net9.0
(same reason).
- src/PostIt/PostIt.Android/Application.cs: rewritten as a bare
Android.App.Application. Avalonia 11 no longer ships
AvaloniaAndroidApplication<TApp> (that was an Avalonia 12
introduction); the Avalonia init now lives in MainActivity via
AvaloniaMainActivity<TApp>. The class is kept only so the
[Application] manifest entry remains.
- src/PostIt/PostIt.Android/MainActivity.cs: now inherits
AvaloniaMainActivity<App> and overrides CustomizeAppBuilder to
chain .UseMaui<PostIt.Maui.MauiEmbeddingApp>(this) before
.WithInterFont(). AvaloniaMainActivity<TApp> handles the
AvaloniaView initialisation in OnCreate.
- src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs (new): empty
Microsoft.Maui.Controls.Application used as the embedding host for
Avalonia.Maui. The MAUI window it produces is consumed by the
Avalonia.Maui embedding pipeline and never surfaces to the user;
Avalonia owns the actual visual tree.
Build status: 11 errors remaining, all CS0234 / CS0246 against
'Avalonia.Controls.ContentPage'. Avalonia 11 did not ship
ContentPage (it's an Avalonia 12 type, presumably for MAUI parity).
All seven PostIt pages inherit ContentPage today and need to be
reworked to UserControl before the build can complete. Follow-up
commit will do that.
Reference: AGENTS.md, 'PostIt.Android boot crash sur AVD x86_64 :
investigation par couches', couche 3.
This commit is contained in:
parent
6b2867c84a
commit
a4bc7b5e6a
8 changed files with 74 additions and 30 deletions
|
|
@ -3,18 +3,20 @@
|
||||||
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Packages.props', '$(MSBuildThisFileDirectory)../'))" />
|
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Packages.props', '$(MSBuildThisFileDirectory)../'))" />
|
||||||
<!-- PostIt-product-specific versions -->
|
<!-- PostIt-product-specific versions -->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageVersion Include="Avalonia" Version="12.1.1" />
|
<PackageVersion Include="Avalonia" Version="11.3.20" />
|
||||||
<PackageVersion Include="Avalonia.Android" Version="12.1.1" />
|
<PackageVersion Include="Avalonia.Android" Version="11.3.20" />
|
||||||
<PackageVersion Include="Avalonia.AvaloniaEdit" Version="12.0.0" />
|
<PackageVersion Include="Avalonia.AvaloniaEdit" Version="11.3.20" />
|
||||||
<PackageVersion Include="Avalonia.Browser" Version="12.1.1" />
|
<PackageVersion Include="Avalonia.Browser" Version="11.3.20" />
|
||||||
<PackageVersion Include="Avalonia.Desktop" Version="12.1.1" />
|
<PackageVersion Include="Avalonia.Desktop" Version="11.3.20" />
|
||||||
<PackageVersion Include="Avalonia.Fonts.Inter" Version="12.1.1" />
|
<PackageVersion Include="Avalonia.Fonts.Inter" Version="11.3.20" />
|
||||||
<PackageVersion Include="Avalonia.Themes.Fluent" Version="12.1.1" />
|
<PackageVersion Include="Avalonia.Maui" Version="11.3.0" />
|
||||||
|
<PackageVersion Include="Avalonia.Themes.Fluent" Version="11.3.20" />
|
||||||
<PackageVersion Include="AvaloniaUI.DiagnosticsSupport" Version="2.2.3" />
|
<PackageVersion Include="AvaloniaUI.DiagnosticsSupport" Version="2.2.3" />
|
||||||
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
||||||
<PackageVersion Include="Material.Avalonia" Version="3.19.0" />
|
<PackageVersion Include="Material.Avalonia" Version="3.19.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Maui.Essentials" Version="10.0.100" />
|
<PackageVersion Include="Microsoft.Maui.Essentials" Version="8.0.100" />
|
||||||
|
<PackageVersion Include="Microsoft.Maui.Controls" Version="8.0.100" />
|
||||||
<PackageVersion Include="Xamarin.AndroidX.Browser" Version="1.10.0.1" />
|
<PackageVersion Include="Xamarin.AndroidX.Browser" Version="1.10.0.1" />
|
||||||
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0.3" />
|
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,19 @@
|
||||||
using Android.App;
|
using Android.App;
|
||||||
using Android.Runtime;
|
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Android;
|
|
||||||
|
|
||||||
namespace PostIt.Android
|
namespace PostIt.Android;
|
||||||
{
|
|
||||||
|
/// <summary>
|
||||||
|
/// Bare <see cref="Android.App.Application"/> shell for Android. Avalonia
|
||||||
|
/// 11 initialises its platform services from <see cref="MainActivity"/>
|
||||||
|
/// (which extends <c>AvaloniaMainActivity<App></c>); 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.
|
||||||
|
/// </summary>
|
||||||
[Application]
|
[Application]
|
||||||
public class Application : AvaloniaAndroidApplication<App>
|
public class Application : Android.App.Application
|
||||||
{
|
{
|
||||||
protected Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
|
public Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
|
|
||||||
{
|
|
||||||
return base.CustomizeAppBuilder(builder)
|
|
||||||
.WithInterFont();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ using Android.App;
|
||||||
using Android.Content.PM;
|
using Android.Content.PM;
|
||||||
using Android.Content;
|
using Android.Content;
|
||||||
using Avalonia.Android;
|
using Avalonia.Android;
|
||||||
|
using Avalonia;
|
||||||
using AndroidX.Emoji2.Text;
|
using AndroidX.Emoji2.Text;
|
||||||
|
|
||||||
namespace PostIt.Android;
|
namespace PostIt.Android;
|
||||||
|
|
@ -14,8 +15,15 @@ namespace PostIt.Android;
|
||||||
MainLauncher = true,
|
MainLauncher = true,
|
||||||
LaunchMode = LaunchMode.SingleTask,
|
LaunchMode = LaunchMode.SingleTask,
|
||||||
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
|
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
|
||||||
public class MainActivity : AvaloniaMainActivity
|
public class MainActivity : AvaloniaMainActivity<App>
|
||||||
{
|
{
|
||||||
|
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
|
||||||
|
{
|
||||||
|
return base.CustomizeAppBuilder(builder)
|
||||||
|
.UseMaui<PostIt.Maui.MauiEmbeddingApp>(this)
|
||||||
|
.WithInterFont();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Strongly-typed handle to the current MainActivity instance, set in
|
/// Strongly-typed handle to the current MainActivity instance, set in
|
||||||
/// <see cref="OnCreate"/> and consumed by platform services such as
|
/// <see cref="OnCreate"/> and consumed by platform services such as
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net10.0-android</TargetFramework>
|
<TargetFramework>net9.0-android36.0</TargetFramework>
|
||||||
<!-- FORCE LES ARCHITECTURES ANDROID VALIDES -->
|
<!-- FORCE LES ARCHITECTURES ANDROID VALIDES -->
|
||||||
<RuntimeIdentifiers>android-arm64;android-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>android-arm64;android-x64</RuntimeIdentifiers>
|
||||||
<SupportedOSPlatformVersion>23.0.0</SupportedOSPlatformVersion>
|
<SupportedOSPlatformVersion>23.0.0</SupportedOSPlatformVersion>
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia.Android" />
|
<PackageReference Include="Avalonia.Android" />
|
||||||
|
<PackageReference Include="Avalonia.Maui" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PostIt\PostIt.csproj" />
|
<ProjectReference Include="..\PostIt\PostIt.csproj" />
|
||||||
|
|
|
||||||
35
src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs
Normal file
35
src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
using Microsoft.Maui.Controls;
|
||||||
|
|
||||||
|
namespace PostIt.Maui;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Empty MAUI application registered as the embedding host for
|
||||||
|
/// <c>Avalonia.Maui</c>. <c>Avalonia.Maui</c> expects a
|
||||||
|
/// <see cref="Microsoft.Maui.Controls.Application"/>-derived type so that
|
||||||
|
/// its <c>.UseMaui<TMauiApp>(activity)</c> extension can build the
|
||||||
|
/// embedding pipeline (services, handlers, <c>IPlatformApplication</c>).
|
||||||
|
///
|
||||||
|
/// 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 <c>Context</c> and runs the surface view
|
||||||
|
/// lifecycle correctly. This class exists to satisfy the generic constraint
|
||||||
|
/// of <c>UseMaui<TMauiApp></c> and gives MAUI something to attach its
|
||||||
|
/// handler tree to.
|
||||||
|
///
|
||||||
|
/// Override <c>CreateWindow</c> with a no-op or leave the default; the
|
||||||
|
/// virtual MAUI window is consumed by <c>Avalonia.Maui</c>'s embedding and
|
||||||
|
/// never surfaces to the user (Avalonia owns the visual tree).
|
||||||
|
/// </summary>
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net10.0</TargetFrameworks>
|
<TargetFrameworks>net9.0</TargetFrameworks>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Description> A shared model for a little client/server app, dealing about establishing some contract, between some human client and provider.
|
<Description> A shared model for a little client/server app, dealing about establishing some contract, between some human client and provider.
|
||||||
</Description>
|
</Description>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<RootNamespace>Yavsc.Api.Client</RootNamespace>
|
<RootNamespace>Yavsc.Api.Client</RootNamespace>
|
||||||
<AssemblyName>Yavsc.Api.Client</AssemblyName>
|
<AssemblyName>Yavsc.Api.Client</AssemblyName>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue