1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Flutter-CCK.md 20 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:06 5767d61

Быстрый обзор KMM, Compose и Flutter

Добро пожаловать в раздел, где мы расскажем вам о последних новостях KMM, Compose и Flutter. Для Compose и Flutter вы, возможно, уже знакомы, но что же такое KMM? KMM — это сокращение от Kotlin Multiplatform Mobile, то есть это кроссплатформенная платформа, основанная на Kotlin. Почему сегодня мы говорим именно о нём?

Причина заключается в следующем: недавно один из коллег в группе упомянул KMM и использовал слово "перелом". Это вызвало интерес, так как KMM долгое время находился в состоянии "не слишком активного развития", и многие разработчики Android, использующие Kotlin, были мало знакомы с ним. Может ли быть, что он достиг новых высот?

Иллюстрация 1 Иллюстрация 2

Оказалось, что причина заключается в объявлении Android-командой в начале октября о том, что Jetpack начнёт поддерживать KMM. В настоящее время библиотеки Collections и DataStore доступны для использования на нескольких платформах через зависимость -dev01, а сам KMM находится на этапе бета-версий.

Поэтому хотя KMM ещё не стал "новым небом", он всё равно находится на этапе бета-тестирования, однако объявление о поддержке KMM со стороны Jetpack является отличной новостью, поскольку это означает официальную поддержку сообщества.> Теперь, когда мы рассказали о причине, давайте перейдем к основному содержанию статьи: что такое KMM, Compose и Flutter.

KMM

Kotlin Multiplatform Mobile (KMM) — это технология кросс-платформенного программирования, используемая на устройствах iOS и Android. Основная особенность KMM состоит в сочетании кросс-платформенной разработки с нативной разработкой, как показано на следующем рисунке. Проще говоря, разработка полностью нативная превратилась в KMM + нативное UI.

С помощью KMM можно сделать бизнес-логику и инфраструктурные компоненты кросс-платформенными, например, сетевые запросы, хранение данных, отправку состояния и т. д. Эти модули могут быть реализованы таким образом, чтобы они работали как на Android, так и на iOS. Например, DataStore теперь может использоваться и на iOS.

В официальной презентации ранними пользователями KMM названы Baidu, Netflix, VMware, Philips и другие, отзывы от пользователей положительные, а выход в бета-версию говорит о том, что KMM уже готов к использованию.

Но вы можете задаться вопросом, поддерживает ли KMM веб-платформы?

Это интересная тема для обсуждения. С моей точки зрения, Kotlin Multiplatform поддерживает веб-платформы через Kotlin JS, но KMM сам по себе поддерживает только Android и iOS.Если вы установили плагин KMM и создали проект KMM, то заметите, что логотип и процесс создания проекта ограничены платформами Android и iOS. Однако Kotlin Multiplatform поддерживает веб-платформы с помощью Kotlin/JS.| | image-20221027153602062 | | ------------------------------------------------------ | ------------------------------------------------------------ |

Если вы знакомы с Kotlin Multiplatform достаточно давно, то возможно слышали такие аббревиатуры как KMP, KN и прочие. Как они связаны с KMM?

  • KMP обычно относят к Kotlin Multiplatform. Я помню, что концепция KMP была представлена вместе с Kotlin 1.2, позволяющая запускать Kotlin-код на специфических платформах, таких как JVM и JS.
  • KN обычно указывает на Kotlin Native, технологию компиляции Kotlin в native двоичные файлы, которая позволяет запускать приложения без использования виртуальных машин, например, на iOS в рамках KMM.
  • KMM использует возможности JVM и KN для реализации Kotlin-фреймворка, ориентированного на Android и iOS: Android (Kotlin/JVM) и iOS (Kotlin/Native).

Кроме того, есть Kotlin JS для поддержки веб-платформ. Поэтому можно сказать, что KMP является большим набором возможностей, где KMM представляет собой его часть, поддерживающую Android и iOS, а также благодаря Kotlin Native и Kotlin JS расширяется до поддержки ПК и веб-платформ.

Итак, теперь вы должны понять: KMM主要用于编写跨平台逻辑,在涉及UI部分时仍需采用原生实现。从另一个角度来看,对于Android开发者而言,使用KMM几乎是免费获得的能力,因为只需使用Kotlin即可。

По крайней мере, вам всё равно придётся привыкнуть к реактивному стилю программирования в случае использования Compose.А кто-то может спросить: в чём же смысл KMM тогда?

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

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

Compose

Compose, конечно же, знаком многим. На самом деле Compose можно рассматривать как две части: Jetpack Compose и Compose Multiplatform:

  • Jetpack Compose, поддерживаемый официальной командой Android;
  • Compose Multiplatform, реализованное JetBrains' compose-jb.

Если говорить о том, что KMM используется для реализации бизнес-логики на нескольких платформах, то Compose Multiplatform сосредоточено на поддержке кросс-платформенного интерфейса пользователя. А какова связь между KMM и Compose Multiplatform?

С точки зрения проекта, compose-jb и KMM фактически не связаны, так как KMM находится ещё в бете, а Compose Multiplatform уже около года как выпущена.> Однако сказать, что они полностью независимы, было бы неверно, ведь возможности Kotlin Native и Kotlin JS играют важную роль в Compose Multiplatform.

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

image

PS: Карта немного старая, но iOS уже находится в экспериментальном режиме, androidx.compose.ui.main.defaultUIKitMain также готовится к официальному выпуску.

Кроме того, проблемой Compose Multiplatform является отсутствие активной экосистемы плагинов, что является необходимым условием для работы в области кросс-платформенной разработки: фронтенд имеет npm, Flutter имеет pub, вы можете найти нужные вам библиотеки через центральный сайт, проверять их популярность, версию, совместимость и количество использования, а также получать официальное одобрение и безопасность, но в эпоху Maven эти возможности слабо развиты. Преимущества Compose тоже очевидны:- Экосистема Kotlin

  • Дружественно к разработке на Android
  • Небольшое увеличение размера пакета, высокий уровень сжатия кода
  • Высокая производительность, как в compose-android, так и в compose-desktop, использующих Skia

И поскольку Jetpack начинает поддерживать KMM, это приведёт к дальнейшему повышению уровня поддержки сообществом Compose Multiplatform, что также позволит ему поддерживать Jetpack.

Что касается вышеупомянутой проблемы "разделённости", то можно заметить, что официальные лица уже активно работают над её решением, включая перемещение части кода для desktop в androidx. Из этого следует, что единая библиотека Compose может быть недалёко.

image8.png

PS: JetBrains уже внедрили Toolbox приложение через Compose Multiplatform и выпустили его.

Flutter

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

image9.png

По поводу сравнения Flutter с другими фреймворками или данных использования здесь нет необходимости подробно останавливаться, так как ранее я уже много раз говорил об этом. Вместо этого я хочу затронуть несколько других интересных тем.> - Flutter VS Остальные: Квантовый Анализ

В проектах открытого источника JetBrains есть проект под названием skiko, Skiko (сокращение от Kotlin Skia) — это графическая библиотека, поддерживающая реализацию для Kotlin/JVM, Kotlin/JS, Kotlin/Native и т.д., среди которых имеются следующие:

  • Kotlin/JVM - Linux, Windows, macOS, Android
  • Kotlin/JS - веб
  • Kotlin/Native - iOS, macOS

Если рассмотреть этот аспект, будущее направление развития Compose Multiplatform будет очень похоже на Flutter, а благодаря тому, что Flutter прошел больше проб и ошибок, Compose Multiplatform сможет использовать эти знания при работе с Skia.

На самом деле, в будущем Linux, Windows и другие платформы вполне могут полностью отказаться от JVM и использовать Kotlin/Native + Skiko для поддержки, хотя это повысит стоимость обслуживания. И Flutter действительно становится всё более агрессивным в использовании своего собственного рендерингового движка, так как использование Skia уже не удовлетворяет возрастающему количеству ошибок и ограничениям производительности. Поэтому официальная команда начала разработку собственного движка рендера Impeller.Потому что сейчас каждая проблема команды Flutter требует обсуждения с командой Skia, после чего следует ожидание решения, такой темп слишком медленный, что можно заметить из официальных логов обновлений Flutter.

image10.png

Поэтому основной целью разработки Impeller является решение проблем, возникающих при работе Skia во время выполнения. Impeller позволяет выполнять компиляцию GLSL и MSL непосредственно в процессе компиляции, не используя SKSL, что повышает производительность и устойчивость во время выполнения, в настоящее время поддержка начинается с платформы iOS, совместно с оптимизациями для Metal, а затем будет поддержана на Android и Vulkan, если всё пойдет хорошо.

Из этого можно сделать вывод, что проблемы, с которыми сталкивается Flutter при использовании Skia, также могут встретиться в Compose Multiplatform. Если проект Impeller будет успешно развиваться, то он может не ограничиваться только Flutter и быть расширен до использования в Compose Multiplatform.Само собой, разработка собственного движка рендера не является чем-то необычным. По мере развития проекта многие проблемы уровня железа становятся препятствием для быстрого продвижения, что приводит к необходимости создания собственной реализации. Например, переход Hermes на RN 0.7 в качестве основного движка тоже был вызван подобными проблемами, разработка собственного уровня является необходимым этапом для ответственного открытого проекта.# В заключение

Основная цель этой статьи — это просвещение, а не технический анализ. Она представляет текущее положение дел с KMM, Compose и Flutter. Часто эти технологии не конфликтуют друг с другом, но иногда разработчики склонны рассматривать их как взаимоисключающие. Такое отношение не всегда оправдано.

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

Например, тот человек, который спросил меня "можно ли использовать Java в KMM", работает в компании, где руководство считает Kotlin недостаточно зрелым для использования в Android, да, его руководитель — это бэкенд-разработчик.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/CarGuo-GSYFlutterBook.git
git@api.gitlife.ru:oschina-mirror/CarGuo-GSYFlutterBook.git
oschina-mirror
CarGuo-GSYFlutterBook
CarGuo-GSYFlutterBook
master