Kotlin Multiplatform Mobile работает с Jetpack Compose?
Есть 2 проблемы, которые не позволяют создать совместимость между этими технологиями.
Jetpack Compose
Первая проблема в том, что он работает только с Android Studio Canary x.
- Android Studio 4.2, бета 6
Jetpack Compose - это предварительная версия, а поддержка Compose включена только в Canary-версии Android Studio. Чтобы использовать Compose в своем проекте приложения, загрузите и установите последнюю версию среды IDE для Canary.
Jetpack Compose работает с:
- Android Studio Canary
- Котлин 1.4.30
- distributionUrl: 6.8.2
- AGP: 7.0.0-alpha11
- JavaVersion.VERSION_11
Kotlin Multiplatform Mobile
И вторая проблема заключается в том, что сборки Android Studio Canary содержат ошибку в Kotlin Multiplatform Mobile. Я использую следующее:
- Android-студия Arctic Fox | 2020.3.1 Канарейка 11
Android Studio Arctic Fox | 2020.3.1 Canary 11
Build #AI-203.7148.57.2031.7209405, built on March 15, 2021
Runtime version: 11.0.8+0-b944-P17168821 amd64
VM: OpenJDK 64-Bit Server VM by N/A
Current Desktop: ubuntu:GNOME
- В
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip
- В
build.gradle (Project)
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.0.0-alpha11'
}
}
-
JavaVersion.VERSION_11
Ошибка ( выпуск / КТ-43944):
A problem occurred configuring project ':kmm_shared'.
> Configuration with name 'testApi' not found.
* Exception is:
Caused by: org.gradle.api.artifacts.UnknownConfigurationException: Configuration with name 'testApi' not found.
На данный момент единственный обходной путь для работы KMM - использование Android Studio Beta (но это несовместимо с Jetpack Compose).
Учитывая это, было бы 2 решения, с которыми я не мог столкнуться. Попросите Compose поработать над сборкой Android Studio Beta или исправить ошибку KMM в Android Studio Canary.
Следует отметить, что KMM и Jetpack Compose используют разные версии AGP и Gradle-дистрибутивов. Тогда мне приходит в голову, я не знаю, возможно ли, что отложенные версии сосуществуют в одном проекте.
Любые предложения приветствуются.
Спасибо
3 ответа
Совместимость между технологиями существует. Мне удалось отладить ошибку в моем проекте благодаря тестам, которые я провел в MortyComposeKMM.
Обходной путь для проблемы / KT-43944 не работал у меня, потому что у меня в buildSrc была зависимость от gradle в
4.1.2
что сгенерировало ошибку типа
Failed to notify build listener. > Please initialize at least one Kotlin target in 'x (:x)'.
Решение:
Реализуйте обходной путь 1
Если вы используете buildSrc для создания собственных плагинов , обязательно используйте AGP 7.0.
build.gradle.kts (:buildSrc)
dependencies {
implementation("com.android.tools.build:gradle:7.0.0-alpha11")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31")
}
- Использовать
JavaVersion.VERSION_11
Как предлагается в https://youtrack.jetbrains.com/issue/KT-43944, вы должны добавить следующий блок в build.gradle.kts (:shared) в качестве временного решения:
android {
configurations {
create("androidTestApi")
create("androidTestDebugApi")
create("androidTestReleaseApi")
create("testApi")
create("testDebugApi")
create("testReleaseApi")
}
}
Вы даже можете использовать Android Studio 4.0.1 для работы с Compose in Multiplatform. Единственная проблема в том, что вы теряете некоторые вещи, например, предварительный просмотр.
Посмотрите примеры из репозитория JetBrains Compose Desktop: