Перейти к основному содержимому

Что такое Avalonia?

Avalonia — это открытый кроссплатформенный UI-фреймворк, который позволяет разработчикам создавать приложения с использованием .NET для Windows, macOS, Linux, iOS, Android и WebAssembly.

Фреймворк использует собственный движок рендеринга для отображения UI-элементов, что обеспечивает одинаковый внешний вид и поведение на всех поддерживаемых платформах. Это означает, что разработчики могут делиться кодом пользовательского интерфейса и сохранять единый стиль и функциональность, независимо от целевой платформы.

Для кого предназначен Avalonia?​

Avalonia подходит разработчикам, которые хотят:

  • Создавать кроссплатформенные приложения на XAML и C# из одного общего кода.
  • Использовать общий UI, макеты и дизайн на разных платформах.
  • Делить код, тесты и бизнес-логику между платформами.

Как работает Avalonia?​

Avalonia объединяет десктопные, мобильные и веб-платформы с помощью уникального подхода, который отличается от традиционных кроссплатформенных фреймворков. Вместо использования нативных UI-элементов, Avalonia реализует собственный кроссплатформенный движок рендеринга, который обеспечивает пиксельную точность на всех поддерживаемых платформах.

Обзор архитектуры​

Avalonia построена на базе .NET Standard 2.0, что позволяет запускать ее на любой платформе, поддерживающей .NET. Фреймворк состоит из нескольких ключевых слоев:

Ядро, независимое от платформы​

Большая часть функциональности Avalonia сосредоточена в платформо-независимом ядре, которое отвечает за:

  • UI-элементы и макеты
  • Управление визуальным деревом
  • Систему стилей
  • Привязку данных
  • Обработку ввода
  • Анимационный фреймворк

Этот слой полностью независим от платформы, что гарантирует одинаковое поведение на всех операционных системах и устройствах.

Движок рендеринга​

В отличие от фреймворков, которые используют нативные UI-элементы, Avalonia применяет собственный движок рендеринга, работающий на основе Skia или Direct2D. Это обеспечивает:

  • Одинаковый внешний вид и поведение приложений на всех платформах.
  • Возможность создания пользовательских элементов и визуальных эффектов, которые работают везде.
  • Отсутствие ограничений, связанных с возможностями платформы.

Слой интеграции с платформами​

Для интеграции с каждой поддерживаемой платформой Avalonia использует минимальный объем платформо-специфичного кода. Этот слой отвечает за:

  • Управление окнами
  • События ввода
  • Операции с буфером обмена
  • Нативные диалоги
  • Аппаратное ускорение
  • Специфичные для платформы функции

Среда выполнения​

Приложения Avalonia запускаются в среде выполнения .NET, будь то .NET Core или Mono.

Сравнение с нативными подходами​

В то время как фреймворки вроде .NET MAUI абстрагируют нативные UI-элементы, Avalonia использует другой подход:

Эта архитектурная разница дает несколько преимуществ:

  • Единое поведение на всех платформах
  • Пиксельная точность рендеринга
  • Полный контроль над UI-стеком
  • Упрощенная поддержка платформ
  • Снижение затрат на обслуживание
  • Высокая производительность на устройствах с ограниченными ресурсами

Интеграция с нативными платформами​

Несмотря на использование собственного движка рендеринга, Avalonia бесшовно интегрируется с возможностями нативных платформ:

  • Windows: Поддержка Win32 API и современных функций Windows.
  • Linux: Работа с X11, Wayland и рендерингом на основе фреймбуфера.
  • MacOS: Интеграция с Cocoa и сервисами платформы.
  • Мобильные платформы: Нативное управление жизненным циклом и интеграция с платформой.
  • Веб: Работа через WebAssembly с полной интеграцией в браузер.

Требования к поддержке платформ​

В основе Avalonia лежат всего два базовых требования для поддержки новой платформы:

  1. Возможность рисовать пиксели на экране.
  2. Возможность получать события ввода.

Эти минимальные требования позволяют Avalonia поддерживать широкий спектр платформ — от десктопных операционных систем до встроенных устройств и даже таких необычных платформ, как VNC-серверы.

Такая архитектура позволяет Avalonia выполнять обещание «Одна кодовая база, бесконечные возможности», обеспечивая при этом высокую производительность и интеграцию с нативными платформами там, где это действительно важно.