kotlin_mpp_post

Kotlin Multiplatform — библиотека moko

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

Немного отвлечемся и попытаемся понять, почему Kotlin Multiplatform. Казалось бы, что такой трюк можно успешно провернуть, например, если использовать какие-нибудь кроссплатформенные SDK и фреймворки, например, React Native или, набирающий на данный момент обороты, Flutter. Но это путь кроссплатформы с широко известным лозунгом "написано единожды, работает везде" от Java. Такой подход имеет много недостатков, например, отсутствует привычный для пользователя системы нативный графический интерфейс с привычной анимацией и особенностями. Кроссплатформенные решения не позволяют повторно использовать уже ранее написанные различные нативные библиотеки, поэтому встает вопрос о необходимости заново переписывать наработки на новые непонятные языки.

Хорошо, тогда можно поступить более хитро, отказаться от кроссплатформы и, например, написать весь наш разделяемый код на C++, компилировать под конкретную платформу, подключать и использовать. Звучит, с одной стороны, заманчиво, но тут снова можно наткнуться на различные сложности и подводные камни, например, с использованием родных для Android библиотек на Java в связке с C++. Ну и если упомянуть тот самый язык C++, например, перед морально неподготовленным Android разработчиком, можно столкнуться с undefined behavior с его стороны. Но если без шуток, то C++ не является широко распространенным среди разработчиков мобильных приложений, а он на несколько порядков сложнее в освоении, чем тот же Dart и требует более вдумчивого подхода, чем Java. И вообще хочется использовать удобное в применении решение, желательно чтобы оно работало с Gradle и запускалось в несколько нажатий кнопок.

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

И одним из таких плодов является moko (Mobile Kotlin) - набор открытых мультиплатформенных библиотек, которые облегчают и ускоряют создание проектов для мобильных платформ Android и iOS в рамках технологии Kotlin Multiplatform.

moko-logo

На данный момент набор уже включает в себя целый ряд следующих решений, например:

  • moko-core - модуль, включающий в себя базовые решения и абстракции для удобного использования их в разделяемом коде, например, классы Color, Timer и т.д.
  • moko-mvvm - включает в себя реализацию подхода Model-View-ViewModel для разделяемого кода, содержит реализацию мультиплатформенной LiveData
  • moko-resources - реализация мультиплатформенных ресурсов для использования в разделяемом коде
  • moko-permissions - библиотека для реализации в общем коде логики предоставления рантайм разрешений для устройства
  • moko-media - классы для работы в общем коде с медиа, с изображениями, видео плеером
  • moko-fields - реализация пользовательских форм и полей для ввода
  • mobile-multiplatform-gradle-plugin - плагин для Gradle, который упрощает настройку мультиплатформенного проекта
  • и многое другое

В данный момент работа над библиотеками находится в крайне активной фазе и очень быстро появляются новые библиотеки, поэтому все актуальную информацию стоит искать на официальном сайте moko.icerock.dev (где перечислены все предлагаемые решения) или в открытых репозиториях на Github: github.com/icerockdev.

В среднем требования для использования данных библиотек следующие (но стоит уточнять в readme для конкретной библиотеки):

  • Gradle 5.4.1
  • Android API 21
  • iOS 9.0

Если коротко, то в чем суть? А суть в следующем, что вы создаете мультиплатформенный проект, подключаете Gradle плагин (или просто клонируете из репозитория уже полностью готовый, но пустой шаблон), подключаете необходимые мультиплатформенные библиотеки, пишете единую разделяемую логику сразу для Android и iOS, а в платформенных модулях лишь верстаете и наводите нативную красоту привычным движением рук - и в итоге получаете два готовых приложения. Это если коротко.

А если более подробно, то в следующих статьях я планирую уже детальнее рассказать, как создать мультиплатформенный проект, как подключить moko библиотеки к проекту и как с их помощью упростить себе жизнь при работе с Kotlin Multiplatform.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">