Чтобы создать модуль Kotlin Multiplatform (KMP) в проекте для Android, используйте шаблон Kotlin Multiplatform Shared Module, доступный в Android Studio Meerkat и плагин Android Gradle 8.8.0 и более поздних версиях.
Шаблон модуля автоматизирует создание нового модуля с минимальной конфигурацией, предназначенной для платформ Android и iOS. KMP также поддерживает другие целевые платформы, например ПК и веб, которые можно добавить в модуль позже. Полный список приведен в разделе Стабильность поддерживаемых платформ. Чтобы объявить цель, ознакомьтесь с разделом Цели в справочнике по Multiplatform Gradle DSL.
Настройте общий модуль KMP
Чтобы создать общий модуль KMP, выполните следующие действия:
- Выберите File (Файл) > New (Создать) > New Module (Новый модуль).
- На панели Templates (Шаблоны) выберите шаблон Kotlin Multiplatform Shared Module (Общий модуль Kotlin Multiplatform).
В шаблоне есть следующие поля:
- Module name (Название модуля) – определяет название модуля Gradle, а также название фреймворка iOS (можно изменить позже).
- Package name – определяет название пакета для файлов в этом модуле.
- Нажмите Finish (Готово) и разрешите Gradle синхронизироваться с проектом. Вам также может быть предложено добавить вновь созданные файлы модуля в систему контроля версий.
После этого в Project View (Просмотр проекта) в Android Studio появится новый общий модуль и набор исходных кодов для каждой платформы.
Свяжите общий модуль с приложением для Android
Мастер модулей не добавляет вновь созданный модуль в качестве зависимости ни к одному из существующих модулей. Затем вам нужно связать общий модуль с одним из существующих модулей Gradle, как и другие зависимости Android:
dependencies {
...
implementation(project(":shared"))
}
После этого вы сможете получить доступ к коду, как обычно. Из приложения Android вы можете получить доступ к коду, который доступен либо в androidMain, либо в commonMain.
Подробнее о структуре мультиплатформенных проектов Kotlin…
Настройте общий модуль для приложения iOS
Swift не может использовать модули Kotlin напрямую, поэтому требуется скомпилированный двоичный фреймворк.
Новый шаблон модуля в Android Studio настраивает общий модуль для создания фреймворка для каждой из архитектур iOS. В файле build.gradle.kts общего модуля можно найти следующий код:
val xcfName = "sharedKit"
iosX64 {
binaries.framework {
baseName = xcfName
}
}
iosArm64 {
binaries.framework {
baseName = xcfName
}
}
iosSimulatorArm64 {
binaries.framework {
baseName = xcfName
}
}
Информацию о других типах архитектуры можно найти в разделе Иерархическая структура проекта.
Свяжите общую библиотеку с проектом iOS
Чтобы разрешить доступ к общему коду из проекта iOS, добавьте этап скрипта для создания фреймворка Kotlin перед компиляцией источников Swift:
- Нажмите на файл правой кнопкой мыши в Android Studio и выберите Open In (Открыть в) и Open in Associated Application (Открыть в связанном приложении). Приложение для iOS откроется в Xcode.
- Откройте настройки проекта, нажав дважды на его название в навигаторе проектов.
- Измените название Run Script (Запустить скрипт) по умолчанию на Compile Kotlin Framework (Скомпилировать фреймворк Kotlin), чтобы было понятно, что происходит на этом этапе. Нажмите дважды на заголовок Run Script (Запустить скрипт), чтобы изменить его.
- Разверните этап сборки и в текстовом поле Shell введите следующий код скрипта:
Перетащите этап Run Script (Запуск скрипта) перед этапом Compile Sources (Компиляция источников).
Рисунок 6. Запустите этап сборки скрипта перед компиляцией источников. Создайте проект в Xcode, нажав ⌘B или выбрав Build (Создать) в меню Product (Продукт).
Если сборка прошла успешно, вы увидите следующий значок:
Как получить доступ к общему коду в приложении для iOS
Чтобы убедиться, что приложение iOS может успешно получить доступ к коду из общего модуля, выполните следующие действия:
- В проекте iOS откройте файл
ContentView.swiftпо следующему пути:Sources/View/ContentView.swift - Добавьте
sharedKitв верхней части файла. - Измените текстовое представление, чтобы включить информацию
Platform_iosKt.platform()в отображаемую строку, как показано ниже.
Это обновление проверяет, может ли приложение вызвать функцию platform() из общего модуля, которая должна возвращать "iOS" при запуске на платформе iOS.
Дополнительные ресурсы
- Если вы только начинаете работать с KMP, ознакомьтесь с официальной документацией.
- Если вы только начинаете разрабатывать приложения для iOS, ознакомьтесь с документацией по основам Swift.
- Информацию о распространенных проблемах с настройкой KMP можно найти в разделе Устранение неполадок краткого руководства по KMP.
- Примеры приложений можно найти в репозитории Android Kotlin Multiplatform Samples.