Wenn du mit Avalonia 11 schon mal versucht hast, eine App aufs Handy zu bringen, kennst du das vielleicht: Auf dem Desktop läuft alles flüssig. Auf dem Android-Testgerät ruckelt dagegen die Liste beim Scrollen, und ein Kaltstart dauert ewig.
Für Avalonia 12 hatte sich das Team 2 Ziele gesetzt und erfüllt: Performance und Stabilität. Am meisten merkst du das auf Android und iOS. In diesem Beitrag geht es darum, was sich auf beiden Plattformen geändert hat, wie die neue Seitennavigation funktioniert und worauf du beim Umstieg achten musst.
Avalonia 12: Ein einziges Projekt & XAML für Desktop und Smartphone
Avalonia zeichnet jedes Control selbst, auf iOS und Android genauso wie unter Windows, macOS oder Linux. Deshalb laufen deine Views, ViewModels, Styles und eigenen Controls aus dem Desktop-Build ohne Änderungen auch auf dem Smartphone. Mobile ist für Avalonia einfach ein weiteres Target im selben Projekt.
Du brauchst dafür die Werkzeuge, die Microsoft für .NET-Mobile sowieso vorschreibt: die Workloads für Android und iOS, ein JDK für Android und Xcode, sobald du auf ein echtes iPhone deployen willst. Wenn dein Team schon .NET-Mobile-Apps ausliefert, ist das alles vermutlich schon installiert.
|
1 2 |
dotnet workload install android ios |
Eine harte Grenze gibt es allerdings: Für Android und iOS unterstützt Avalonia 12 nur noch .NET 10. Desktop-Projekte laufen weiterhin ab .NET 8, .NET Framework und .NET Standard werden aber nicht mehr unterstützt. In den Plattformprojekten deiner Solution sieht das dann ungefähr so aus:
|
1 2 3 4 5 6 7 8 9 10 |
<!-- MyApp.Android.csproj --> <PropertyGroup> <TargetFramework>net10.0-android</TargetFramework> </PropertyGroup> <!-- MyApp.iOS.csproj --> <PropertyGroup> <TargetFramework>net10.0-ios</TargetFramework> </PropertyGroup> |
Außerdem musst du alle Avalonia-Pakete auf dieselbe 12er-Version heben. Mischversionen aus 11 und 12 führen schnell zu seltsamen Build-Fehlern.
Avalonia auf Android: Das Backend wurde neu gebaut
Auf Android hat sich am meisten getan. Ein neuer Dispatcher, der auf Androids Looper und MessageQueue aufsetzt, plant die Arbeit jetzt zuverlässiger. Bei hohen Bildwiederholraten hat Avalonia 11 GPU und CPU nicht voll ausgelastet, das ist behoben. Außerdem kannst du jetzt mehrere Activities mit Avalonia-Inhalt starten, und einige Probleme mit Surface-Verwaltung und Safe-Area-Padding sind gelöst.
Avalonia veröffentlicht auf der eigenen Website diese Vergleichswerte zwischen Version 11 und 12:
| Messwert (Android) | Avalonia 11 | Avalonia 12 |
|---|---|---|
| Startzeit mit NativeAOT | 1960 ms | 460 ms |
| Bildrate beim Scrollen | 42 fps | 120 fps |
| Bildrate bei Animationen (Ziel: 60 fps) | 49 fps | 60 fps |
Diese Zahlen stammen vom Hersteller selbst. Miss also ruhig auf deinen eigenen Zielgeräten nach. Die Richtung ist trotzdem eindeutig: Ein Start in unter einer halben Sekunde statt in fast zwei Sekunden fällt deinen Nutzern sofort auf.

Avalonia auf iOS: Szenen statt Einzelfenster
Auf iOS nutzt Avalonia 12 jetzt den szenenbasierten Lebenszyklus. Auf diesem Modell bauen Multitasking auf dem iPad und die Wiederherstellung des App-Zustands auf, und Apple wird es in naher Zukunft verpflichtend machen. Die meisten Apps laufen ohne Codeänderung weiter. Eine Ausnahme solltest du kennen: AvaloniaAppDelegate.Window bleibt nach dem Start null, weil der Scene Delegate das Fenster jetzt intern verwaltet. Falls dein Code dort bisher etwas eingehängt hat, musst du ihn anpassen.
Außerdem unterstützt Avalonia.iOS jetzt Mac Catalyst. Und für die Barrierefreiheit gibt es Unterstützung für VoiceOver.

Am meisten Arbeit spart dir im Alltag vermutlich das neue seitenbasierte Navigationssystem. Bisher musstest du Tab-Leisten, Navigations-Stacks und Schubladenmenüs selbst bauen oder eine Bibliothek dafür suchen. Jetzt bringt Avalonia ContentPage, NavigationPage, TabbedPage, DrawerPage und CommandBar selbst mit. Wenn du Xamarin.Forms oder MAUI kennst, kommen dir die Namen bekannt vor.
So sieht eine App mit Tab-Leiste am unteren Rand aus, in der ein Tab einen eigenen Navigations-Stack hat:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<TabbedPage xmlns="https://github.com/avaloniaui" TabPlacement="Bottom"> <NavigationPage Header="Start"> <ContentPage Header="Start"> <StackPanel Margin="16" Spacing="8"> <TextBlock Text="Willkommen zurück!" FontSize="24" FontWeight="Bold" /> <Button Content="Details anzeigen" Click="OnGoToDetails" /> </StackPanel> </ContentPage> </NavigationPage> <ContentPage Header="Einstellungen"> <TextBlock Text="Hier wohnen die Einstellungen" Margin="16" /> </ContentPage> </TabbedPage> |
Im Code-Behind legst du neue Seiten auf den Stack oder nimmst sie wieder herunter:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
private async void OnGoToDetails(object? sender, RoutedEventArgs e) { // Neue Seite auf den Stack legen await Navigation.PushAsync(new DetailsPage()); } private async void OnBack(object? sender, RoutedEventArgs e) { // Eine Seite zurück await Navigation.PopAsync(); // Oder gleich zurück zur Startseite: // await Navigation.PopToRootAsync(); } |
Außerdem gibt es ReplaceAsync zum Austauschen der aktuellen Seite, PopToPageAsync und InsertPage, mit dem du eine Seite gezielt in den Stack einfügst. Modale Dialoge öffnest du über eigene Modal-Methoden. Navigationen lassen sich auch abbrechen, zum Beispiel wenn du vor dem Zurückgehen fragen willst, ob ungespeicherte Änderungen verworfen werden sollen. Drawer, Tab-Leisten, Bottom Sheets und Gesten verhalten sich auf Android und iOS gleich.
Avalonia WebView ist jetzt Open Source
Das WebView-Control war bisher ein kostenpflichtiges Add-on. In Version 12 ist es Open Source und gehört zum Lieferumfang. Es nutzt die Web-Engine der jeweiligen Plattform, du musst also kein Chromium mitschleppen und deine App bleibt klein. JavaScript-Interop in beide Richtungen und Unterstützung für OAuth-Flows sind eingebaut, auf iOS und Android genauso wie auf dem Desktop. Damit lässt sich etwa ein Login über einen externen Identity Provider deutlich bequemer umsetzen.
Was dir beim Avalonia 12 Upgrade begegnet
Das Team hat Breaking Changes bewusst knapp gehalten, ganz ohne geht es aber nicht. Diese Punkte betreffen mobile Projekte am ehesten:
- Compiled Bindings sind jetzt standardmäßig aktiv. Bindings, die bisher nur zur Laufzeit aufgelöst wurden, melden Fehler also schon beim Build. Das ist lästig beim Umstieg und hilft dir danach.
- Bei Touch und Stift wechselt der Fokus erst beim Loslassen. Container wie
ListBoxItemverarbeiten Auswahl-Eingaben jetzt selbst, statt sie an dasItemsControlweiterzureichen. Wenn du Auswahl-Events auf ItemsControl-Ebene abgefangen hast, musst du diese Logik verschieben. - Das Paket
Avalonia.Diagnosticswurde entfernt, und einige Namen haben sich geändert, zum Beispiel heißtSystemDecorationsjetztWindowDecorations. - Tizen wird nicht mehr unterstützt.
Die offizielle Seite “Breaking changes in Avalonia 12” listet alle Änderungen mit Hinweisen zur Migration auf. Die solltest du vor dem Upgrade einmal komplett durchlesen.
Lohnt sich Avalonia 12 für mobile Apps?
Wenn du schon eine Avalonia-Desktop-App hast und eine mobile Version willst, ist Version 12 der erste Release, bei dem das ohne größere Einschränkungen klappt. Navigation, WebView und die Android-Performance waren bisher die größten Lücken, und alle drei sind jetzt geschlossen. Startest du ein reines Mobile-Projekt, lohnt sich ein Vergleich mit MAUI. Der entscheidende Unterschied ist, dass Avalonia selbst zeichnet und MAUI native Controls verwendet. Bei Avalonia sieht deine App deshalb auf jedem Gerät pixelgenau gleich aus. Dafür sieht sie auch auf jedem Gerät gleich aus, und das muss dein Designteam wollen.
Welche .NET-Version brauche ich für mobile Apps mit Avalonia 12?
Für Android und iOS unterstützt Avalonia 12 ausschließlich .NET 10. Für Desktop-Projekte reicht .NET 8 oder neuer, empfohlen wird aber auch dort .NET 10.
Muss ich meine iOS-App für den neuen Szenen-Lebenszyklus umbauen?
In den meisten Fällen nicht. Anpassen musst du nur Code, der sich auf AvaloniaAppDelegate.Window verlässt, denn diese Eigenschaft bleibt jetzt null.
Kann ich meine Desktop-Views auf dem Smartphone wiederverwenden?
Ja. Avalonia zeichnet alle Controls selbst, deshalb laufen Views, ViewModels und Styles auf allen Plattformen. Auf dem kleinen Bildschirm solltest du das Layout aber trotzdem anpassen.
Kostet das WebView-Control in Avalonia 12 noch Geld?
Nein. Das WebView ist seit Version 12 Open Source und Teil des Frameworks.
