{"id":14291,"url":"\/distributions\/14291\/click?bit=1&hash=257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","title":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u043d\u0430 Ozon \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442","buttonText":"","imageUuid":""}

KMP vs Flutter: 4 сценария, когда нужно сделать ставку на Kotlin Multiplatform, а не Flutter

Привет, это Максим Павлов— управляющий партнёр KTS. Мы создаём IT-продукты для бизнеса.

Кроссплатформенные инструменты помогают бизнесу не писать код два раза под iOS и Android, а переиспользовать его на обеих платформах. В статье — о том, чем Kotlin Multiplatform отличается от Flutter и в каких случаях он переигрывает и уничтожает Flutter.

При переходе от нативной разработки к кроссплатформенной многие выбирают Flutter, мы выбрали KMP. Я поспрашивал у нашего руководителя мобильной разработки Максима Мялкина, почему мы выбрали его, а не попсовый Flutter — делюсь результатами.

Максим Мялкин 
Руководитель мобильной разработки KTS

Kotlin Multiplatform (KMP) — раньше был известен еще как Kotlin Multiplatform Mobile‎ (KMM).

Кратко про KMP

KMP — это технология, которая помогает разработчикам переиспользовать общий код на языке Kotlin в обеих версиях мобильного приложения: для iOS и Android. KMP разработали в компании Jetbrains, которая сделала язык Kotlin — основной язык разработки приложений под Android.

Приложение на Kotlin Multiplatform состоит из трех частей:

  • общего кода, который описывает логику сразу для двух платформ,
  • кода интерфейс под iOS,
  • кода интерфейс под Android.

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

У вас будет интерфейс (отдельно под Android, отдельно под iOS), причем довольно простой: два поля ввода, кнопка «далее» и место для ввода кода из SMS.

При этом, за таким простым интерфейсом будет скрываться и своя логика: таймер, который отсчитывает время отправки кода, правила, по которым его нужно отправлять — это будет общий код, одинаковый и для iOS, и для Android.

Кратко про Flutter

Flutter — это более популярный кроссплатформенный фреймворк.

Главная особенность Flutter заключается в использовании одной кодовой базы на языке Dart вместо нескольких для Android и iOS платформ.

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

4 сценария, когда вам подойдет KMP

Выбор Flutter может быть предпочтительным, если вам нужно разработать приложение в короткие сроки и вы готовы мириться с ограничениями по дизайну. Согласно данным Surf, разработка на Flutter экономит до 40% времени по сравнению с нативной, тогда как у KMP этот показатель у нас в KTS варьируется между 20-25%.

Однако есть ситуации, когда стоит сделать выбор в пользу KMP.

#1. Вы не хотите долго искать разработчиков

Для работы на Flutter требуется знание языка программирования Dart. Разработчиков на Flutter тяжело найти на рынке — по данным того же hh.ru, сейчас их всего 1877 человек в России. Вы, конечно, можете нанять обычных Android- и iOS-разработчиков, но тогда надо будет потратить время на их переучивание. Без этого они и строчки не напишут.

Для работы на KMP не нужны «специальные» разработчики. KMP требует знание языка Kotlin, а значит вам подойдёт любой Android-разработчик: их, в настоящее время, по данным hh.ru, на рынке более 29 тысяч человек.

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

#2. Вам в приложении нужно использование блютуса, приём звонков и другие нативные фичи

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

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

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

#3. Вам важна нативность интерфейса

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

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

Вывод: если вам важен максимально нативный интерфейс для пользователей платформы или вы стремитесь сделать премиальный продукт, то выбирайте KMP.

#4. Вам важен плавный переход с нативного приложения

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

Также KMP — подходящий вариант, так как вам не нужно будет переписывать всё приложение с нуля, как того потребует Flutter.

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

Пример: у вас уже есть два нативных приложения. Вы можете встроить новые экраны, которые написаны на KMP, в старые приложения без необходимости переписывать весь апп. Следовательно, вам не нужно инвестировать много времени в переезд на KMP.

Кто и почему использует КМР

Сейчас KMP используют Avito, Google, Netflix и Тинькофф. Число компаний, которые его используют, растет с каждым годом.

Мы в KTS выбрали КМР по 3 критериям:

  • нет ограничений на реализацию интерфейсов — они нативны
  • простота подбора команды: используем тех же Android-разработчиков, что уже работают в штате над другими проектами, а iOS-специалистов быстро доучиваем
  • экономия денег клиентов: большая часть наших проектов связана с бизнес-приложениями, в которых логика занимает основную часть разработки

Если совсем коротко

Flutter — это решение для быстрого запуска небольшого продукта в том случае, если вы готовы мириться с ограничениями готовых компонентов.

Однако если у вас:

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

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

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

0
89 комментариев
Написать комментарий...
Роман

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

Ответить
Развернуть ветку
Максим Павлов
Автор

Я бы написал по-другому:)

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

А насчет рынка - ничего еще не порешано, также говорили и про кордову и про реакт нейтив, ionic вон до сих пор пишет, что он ни много ни мало "The Cross-Platform App Development Leader"

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

Так что посмотрим через пару лет, уверен что KMP просто займет долю нативок в сложных приложениях, а Flutter — нишу стартапов

Ответить
Развернуть ветку
Роман

Немного другая ситуация, google монополист на рынке и проталкивает достаточно быстро свои решения, и обладает почти бесконечным финансированием. От Котлин они давно хотят отказаться. Помимо этого угрозу от гугл и в apple с jetbrains понимают, из-за этого и появился swift ui с compose и попытки в hot reload

Ответить
Развернуть ветку
Максим Павлов
Автор

В такой постановке Apple даже более выгодна кроссплатформа, подчиненная не их прямому конкуренту Гуглу, а сторонней компании JetBrains

Ответить
Развернуть ветку
Максим Мялкин

Откуда информация, что гугл хочет отказаться от Kotlin?

Вот например они свои андроидовские библиотеки отвязывают от платформы: 1(https://developer.android.com/kotlin/multiplatform), 2(https://twitter.com/ianhlake/status/1704596833245573287).
Кроме этого гугл пробует KMP у себя в проектах (https://www.youtube.com/watch?v=C9gCm51RhsU)
Также Kotlin нужен для Compose.

Ответить
Развернуть ветку

Комментарий удален автором поста

Развернуть ветку
Тимур Чикишев

Лол, Google наоборот на Kotlin везде переходят, они даже бэкенд уже на нем пишут, а для Android он уже давно основной. И как уже подметили библиотеки на KMP переписывают довольно шустро. Так что они наоборот за koltin топят и насколько я знаю, даже если что-то с jetbrains случится, то они перехватят развитие языка. Kotlin Foundation не просто так появился.

Ответить
Развернуть ветку

Комментарий удален автором поста

Развернуть ветку

Комментарий удален автором поста

Развернуть ветку

Комментарий удален автором поста

Развернуть ветку

Комментарий удален автором поста

Развернуть ветку

Комментарий удален автором поста

Развернуть ветку
Вадим Резниченко

Флаттер уже занимает свою нишу и это далеко не только стартапы. Банковские, инвестиционные, фудтеч, медтеч, приложения для сотрудников - они уже есть на флаттере

Ответить
Развернуть ветку
Максим Павлов
Автор

Airbnb тоже раньше выбрали React Native, но потом поняли что надо съезжать...
https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a

Ответить
Развернуть ветку
Вадим Резниченко

так реакт это не флаттер

Ответить
Развернуть ветку
Тимур Чикишев

Тут про то, что Flutter может оказаться очередным React Native с которого все будут бежать, если вдруг google решит забить на Flutter, например когда KMP + Compose multiplatform доделают и он окажется удобней и привлекательней)

Ответить
Развернуть ветку
Вадим Резниченко

этот аргумент применим и к кмп

Ответить
Развернуть ветку
Тимур Чикишев

Не исключено)

Ответить
Развернуть ветку
86 комментариев
Раскрывать всегда