Основы Kotlin Multiplatform Mobile
Для начала, чтобы разобраться, что из себя представляет технология Kotlin Multiplatform Mobile, советуем изучить официальный сайт. Также, для лучшего понимания, как Kotlin Multiplatform помогает сократить время разработки, советуем прочитать две статьи: от JetBrains и от IceRock
Далее, можете переходить к изучению технологии в документации
- Знакомство с KMM начните с официальных видео для начинающих
- Создайте свое первое мультиплатформенное приложение по инструкции
- Разберитесь со структурой KMM приложения по ссылке
- Кодлаба про изменение готового Android-приложения для работы с iOS
- Инструкция по добавлению зависимостей к KMM модулю
Мультиплатформенные библиотеки
Мультиплатформенная библиотека - это библиотека, адаптированная для использования на разных платформах. Функционал такой библиотеки можно использовать в общем коде, он будет работать для всех таргетов, которые поддерживает библиотека.
Таргеты мультиплатформенной библиотеки - целевая платформа, на которой будет выполняться скомпилированная библиотека. Со списком всех таргетов, поддерживаемых Kotlin Multiplatform можете ознакомиться по ссылке
В работе нас будут интересовать библиотеки поддерживающие следующие таргеты:
jvm
- для работы приложений на Java Virtual Machine (jvm библиотеки поддерживаются на android)androidJvm
- для работы приложения на Android устройствахios_arm64
- для работы приложения на симуляторах iOS устройствios_x64
- для работы приложения на реальных iOS устройствахios_simulator_arm64
- для симуляторов iOS на M1
Чтобы понять, какие таргеты поддерживает библиотека, следует проанализировать её репозиторий на наличие следующих признаков
- Наличие информации в README о поддержке различных платформ, например, описание moko-mvvm
- Наличие shared-модуля, включенный плагин мультиплатформы и установка таргетов
plugins {
kotlin("multiplatform") version "*.*.*"
// ..
}
kotlin {
android()
ios()
}
Также, определить таргеты мулитиплатформенной библиотеки можно изучив ее артефакты на Maven Central
Например, рассмотрим библиотеку moko-fields
Выводы, которые можно сделать увидев артефакты библиотеки:
- fields - это common-модуль
- библиотека поддерживает Android устройства
- библиотека поддерживает симуляторы и устройства iOS, но не на M1
При выборе библиотеки обязательно обращайте внимание на наличие таргетов jvm
, androidJvm
ios_arm64
ios_x64
, ios_simulator_arm64
. Не забывайте проверить дату последнего релиза, чтобы удостовериться, поддерживает ли разработчик свою библиотеку.
Для поиска мультиплатформенной библиотеки, подходящей для решения вашей задачи, советуем сначала поискать на следующих ресурсах:
В заключение, можете посмотреть видео про создание мультиплатформенных библиотек на примере mutliplatform-settings
Настройка gradle
Официальная документация по настройке gradle для работы с KMM.
Из видео вы узнаете, как создать и настроить gradle-проект до состояния, с которого стартует разработка нового проекта в IceRock
Документация про иерархическую структуру мультиплатофрменных проектов
Совместимость со Swift/Objective-C
Прочитайте статью про совместимость Kotlin со Swift и Objective-C
Рекомендуем ознакомиться со следующими разделами
- Маппер типов Kotlin со Swift и Objective-C
- Преобразование методов throwable-методов
Работа с памятью
Прочитайте статью из базы знаний, посвященную работе с памятью в Android, Kotlin/Native и iOS.
Вопросы для самопроверки
- Объясните в двух словах, что такое KMM, какие проблемы решает?
- Что такое Shared-модуль?
- Что такое таргеты и сурсеты? какие они бывают? чем отличаются?
- Можно ли подключить библиотеку только для одного сурсета? Будет ли она доступна для других сурсетов?
- Расскажите, что такое мультиплатформенная библиотека, чем она отличается от других?
- Можно ли в KMM использовать не мультиплатформенную библиотеку? Если да, то как?
- Как определить, что библиотека мультиплатформенная?
- Что будет, если не пометить suspend функцию из общего кода аннотацией @Throws?