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)'.

Решение:

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:

https://github.com/JetBrains/compose-jb

Другие вопросы по тегам