Назад
  • Тренды
  • Kotlin
  • KMP
  • Flutter
  • Мобильные фреймворки
  • Кроссплатформенная разработка
  • Нативная разработка

KMP vs Flutter: что выбрать?

10 минут

Создавать кроссплатформенное приложение сразу для iOS и Android — почти всегда хорошая идея. Как правило, в этом случае встает выбор между KMP и Flutter — «Кока-колой» и «Пепси» мира мультиплатформенной разработки. Оба решения по-разному подходят к созданию единого бэкенда и интерфейса, и определиться с выбором может быть непросто. В этом тексте разбираемся, на чем лучше остановить выбор в конкретном случае.

Всегда найдутся разработчики, считающие ресурсы Flutter достаточными для любого проекта, и адепты KMP и подхода с нативной разработкой UI. Также есть те, кто считает нативную разработку — независимое создание приложений для iOS, Android и других устройств — единственно верным решением. 

На сравнении с нативной разработкой на две платформы мы здесь останавливаться не будем. Напомним лишь, что одна команда разработки меньше, чем две команды разработки, и что чем меньше кода, тем меньше места для ошибки. 

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

Особенности KMP

KMP (Kotlin Multiplatform) — это часть экосистемы Kotlin от JetBrains. Решение представили совсем недавно: в 2017 году его анонсировали как Kotlin Multiplatform Mobile‎ (KMM), после чего продукт несколько лет находился в стадии тестирования. Сменили название только в 2023 году. От слова «Mobile» решили избавиться, чтобы подчеркнуть, что технология предназначена не только для мобильных ОС.

Статья 1 изображение 1

Преимущества KMP

Если коротко, KMP позволяет писать общий код, который может быть выполнен на нескольких платформах. Код при этом воспринимается устройствами как нативный, что ускоряет производительность приложения. Такой подход открывает возможности для легкой интеграции нативных систем через API. Также KMP позволяет легче масштабировать и модифицировать приложения. 

Интерфейс создается независимо для каждой платформы, на которой должно быть доступно приложение. Например, если нужно реализовать одинаковую функциональность для Android и iOS, разработчики должны создать два отдельных интерфейса, используя нативные компоненты для каждой платформы. 

Кто нужен в команде разработки?

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

Для написания логики подойдет любой разработчик со знанием Kotlin. iOS-разработчик также может без подготовки писать интерфейс на KMP. Найти людей с нужными знаниями благодаря этому несложно. К тому же при решении перейти на мультиплатформенную разработку с нативной, не придется искать новых людей и менять команду.

Плюсы KMP

Приложение, созданное с помощью KMP, является нативным и в среднем работает быстрее, чем приложение, разработанное на Flutter. Оно занимает меньше места, потому что не нуждаются в дополнительном runtime-окружении или интерпретаторе, которые увеличивают размер приложения и могут замедлять его работу. Преимущества использования KMP включают:

  • Использование нативных UI-компонентов и более гибкую архитектуру. 
  • Возможность использования платформо-специфичных AP, что дает легкий доступ к уникальным возможностям каждой платформы.
  • Как правило, меньший размер приложения.
  • Kotlin — более распространенный язык программирования, с которым знакомы все Android-разработчики.
  • Элементы, созданные с помощью KMP, можно постепенно интегрировать в уже существующие нативные приложения.
  • Более высокая производительность в некоторых сценариях, особенно в сложных вычислениях.

В чем KMP уступает Flutter?

Первое неудобство также следует из особенностей требуемой команды: для разработки нужны специалисты как для iOS (язык Swift), так и для Android (язык Kotlin). Также дополнительной сложностью является сама необходимость создавать несколько интерфейсов.

Разработка UI под каждую платформу может привести к их «визуальной рассогласованности». Для создания единого UI в компании JetBrains, создавшей KMP, разрабатывают Compose Multiplatform. В скором будущем, возможно, этот недостаток будет устранен.

Также KMP является более молодой платформой с менее развитым сообществом и более узкой специализацией. Несмотря на смену названия, решение в первую очередь предназначено для мобильных платформ. Для запуска десктоп- и веб-версий понадобится дополнительная разработка.

Резюме: если у ваших разработчиков уже есть опыт работы с Kotlin, а в ходе разработки потребуется тесная интеграция с нативными платформами и высокая производительность, то KMP может оказаться предпочтительнее. 

Особенности Flutter

Flutter идет по другому пути, создавая единую логику и единый интерфейс. Благодаря особенностям компиляции кода на языке Dart, созданном компанией Google, интерфейс может быть запущен на любом устройстве. Приложение создается один раз, после чего может быть запущено на iOS, Android, портировано на десктоп или в формат веб-версии. Все это с единым интерфейсом и бэкендом. 

Статья 1 изображение 2

Во многих случаях эта особенность оказывается решающей. Конечно, для работы с Flutter понадобится разработчик, знающий язык Dart от Google. Но в большинстве случаев одного этого языка будет достаточно для создания всего кода для приложения. 

Другой отличительной чертой Flutter является то, что интерфейс создается на базе виджетов — строительных блоков интерфейса. С помощью инструментов кастомизации они могут быть изменены до неузнаваемости. 

Преимущества Flutter

Особенности Flutter — это виджеты и отсутствие необходимости создания нескольких независимых интерфейсов. Благодаря этим особенностям решение является рекордсменом по скорости разработки. 

В чем Flutter лучше KMP

  • Более зрелая и стабильная платформа: Flutter существует дольше, и у него более проработанная документация.
  • Богатый выбор виджетов: Flutter предоставляет обширную библиотеку настраиваемых UI-компонентов.
  • Единый UI-код для всех платформ: в Flutter используется один и тот же код для отрисовки интерфейса на разных платформах.
  • Hot Reload: возможность мгновенно видеть изменения в коде без полной перекомпиляции.
  • Dart —  язык, оптимизированный для UI. Он специально разработан для создания пользовательских интерфейсов.
  • Производительность близка к нативной благодаря компиляции в машинный код.

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

Кроме того, Flutter — это активно развивающаяся платформа и признанный лидер рынка кросс-платформенной разработки. У решения хорошо проработана документация, в которой содержатся простые и понятные алгоритмы работы. 

Погружение для разработчика в эту среду может оказаться гораздо проще, а знание одного языка открывает двери к мультиплатформенной разработке. Сам Dart также имеет репутацию несложного в изучении языка.

Недостатки Flutter

Как и любая технология, Flutter имеет ограничения. Производительность приложений, созданных на нем, может уступать нативным, ведь код пишется на «неродном»  для устройств языке и должен быть скомпилирован. Также приложения могут занимать больше места на устройстве из-за необходимости хранить библиотеки в Dart.

Также из-за того, что приложения не являются нативными, может потребоваться создание специальных плагинов для доступа к некоторым функциям платформ.

Найти разработчика на Dart может быть не так просто, как на Kotlin. Особенно такого разработчика, опыт которого не ограничивается парой прочитанных книг. Например, на hh.ru сейчас зарегистрировано 23000 соискателей с навыком написания кода на Kotlin, и только 6200, умеющих писать код на Dart. По нашему опыту, это отношение отражает реальную ситуацию на рынке. 

Резюме: Flutter подходит для быстрого тестирования идей, компактных команд разработки и поддержки множества платформ с единым UI. В связи с массовым удалением приложений из магазинов Google и Apple, в России приобрели популярность веб-версии приложений. Если это ваша ситуация или вы по другим причинам думаете в сторону веб-версии с сохранением интерфейса, то Flutter сбережет вам много нервов.

Сравниваем Flutter vs KMP 

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

Статья 1 изображение 3

Выводы

Flutter, без сомнений, отличает зрелость и законченность. Фреймворк существует уже достаточно долго, и успел обрасти сообществом. По нему существует богатая и удобная документация и доступно множество готовых расширений.

Flutter изначально разработан для создания идентичного пользовательского интерфейса на разных платформах. Если абсолютно идентичный пользовательский интерфейс на всех платформах — критическое требование, то Flutter может быть предпочтительнее.

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

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

Рекомендуемые статьи

Все статьи