【问题标题】:Could Kotlin Multiplatform Mobile work with Jetpack Compose?Kotlin Multiplatform Mobile 可以与 Jetpack Compose 一起使用吗?
【发布时间】:2021-06-22 22:31:45
【问题描述】:

有 2 个问题不允许在这些技术之间产生兼容性

Jetpack 组合

第一个问题是它只适用于 Android Studio Canary x。

  • Android Studio 4.2 Beta 6

Jetpack Compose 是一项预览功能,仅在 Canary 版本的 Android Studio 中包含对 Compose 的支持。要在您的应用项目中使用 Compose,请下载并安装最新的 Canary 版本的 IDE。

Jetpack Compose 适用于:

  • Android Studio 金丝雀
  • Kotlin 1.4.30
  • distributionUrl: 6.8.2
  • AGP:7.0.0-alpha11
  • JavaVersion.VERSION_11

Kotlin 多平台移动

第二个问题是 Android Studio Canary 构建在 Kotlin Multiplatform Mobile 中存在错误。我正在使用以下内容:

  • Android Studio 北极狐 | 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

错误(issue/KT-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 工作的唯一解决方法是 use Android Studio Beta(但这与 Jetpack Compose 不兼容)。

Install Android Studio – version 4.2 or higher.

鉴于此,我无法面对 2 个解决方案。让 Compose 在 Android Studio Beta 版本上工作或修复 Android Studio Canary 中的 KMM 错误。

需要注意的是,KMM 和 Jetpack Compose 使用不同版本的 AGP 和 gradle 发行版。然后我突然想到,不知道有没有可能,同一个项目中存在延迟版本。

欢迎提出任何建议。

谢谢

【问题讨论】:

    标签: android android-studio kotlin android-jetpack-compose kmm


    【解决方案1】:

    技术之间存在兼容性。由于我在MortyComposeKMM 中进行的测试,我能够在我的项目中调试错误。


    问题/KT-43944 的解决方法对我不起作用,因为我在 buildSrc 中有一个 4.1.2 中的 gradle 依赖项,它生成了 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

    Tweet

    【讨论】:

      【解决方案2】:

      按照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")
          }
      }
      

      【讨论】:

      • 这不起作用,请阅读我提到的问题的描述 目前 KMM 工作的唯一解决方法是使用 Android Studio Beta(但这与 Jetpack 不兼容撰写): stackoverflow.com/a/66433024/5279996
      • 你必须使用Android Studio Canary
      • Canary 应该用于 Compose 兼容性,但由于 KMM 中存在错误,这还不够。
      • 没错,这个块应该修复 AS Canary 中的 KMM 错误。我自己也遇到了这个问题,这就是我如何使用 compose 运行我的 KMM 应用程序。此外,您必须确保您的 Android Gradle 插件为最新版本 (7.0-alphaxx)。
      • 是的,当项目只有 kmm 和 compose 时,此块修复了以下错误 Configuration with name 'testApi' not found。但是在集成这些技术的实际项目中,这个答案可能还不够,例如,如果我们使用带有 AGP 4.0 的自定义插件(这会产生另一个错误)
      【解决方案3】:

      您甚至可以使用 Android Studio 4.0.1 在 Multiplatform 中使用 Compose。唯一的问题是你会丢失一些东西,比如预览。

      查看 JetBrains Compose Desktop 存储库中的示例:

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

      【讨论】:

        猜你喜欢
        • 2023-01-18
        • 2023-02-03
        • 2018-02-16
        • 2022-10-25
        • 1970-01-01
        • 2023-01-30
        • 2020-08-30
        • 1970-01-01
        • 2017-07-08
        相关资源
        最近更新 更多