【问题标题】:Migrate to Jetpack Compose in a multi-module app在多模块应用程序中迁移到 Jetpack Compose
【发布时间】:2021-07-06 13:20:34
【问题描述】:

我正在使用 Jetpack Compose。我已经使用它并且一切正常。我已经在 app 模块和功能模块中配置了 Compose,并且在两个模块中我都导入了同一个库(见下文)。 当我尝试在另一个模块中使用它时,使用相同的配置我收到错误,here 中的所有解决方案都不适用:

androidx.compose.compiler.plugins.kotlin.IncompatibleComposeRuntimeVersionException: 您正在使用 Compose Runtime 的过时版本,该版本不是 与您拥有的 Compose Compiler 插件版本兼容 安装。您正在使用的 compose 编译器插件(版本 1.0.0-rc01) 要求最低运行时版本为 1.0.0-rc01。在 androidx.compose.compiler.plugins.kotlin.VersionChecker.outdatedRuntimeWithUnknownVersionNumber(VersionChecker.kt:113) 在 androidx.compose.compiler.plugins.kotlin.VersionChecker.check(VersionChecker.kt:78) 在 androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:57) 在 org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory$convertToIr$1.invoke(JvmIrCodegenFactory.kt:120) 在 org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory$convertToIr$1.invoke(JvmIrCodegenFactory.kt:116) 在 org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:91) 在 org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:140) 在 org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$default(JvmIrCodegenFactory.kt:66) 在 org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:61) 在 org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)

...

我在新模块的build.gradle文件中添加了以下部分(对于app模块和第一个模块):

android {
    kotlinOptions {
        jvmTarget = "1.8"
        useIR = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion Version.compose
        kotlinCompilerVersion Version.kotlin
    }

    buildFeatures {
        compose = true
    }
}

dependencies {
    implementation Compose.runtime
    implementation Compose.composeActivity
    implementation Compose.ui
    implementation Compose.material
    implementation Compose.uiTooling
    implementation Compose.livedata
    androidTestImplementation Compose.uiTest
}

在哪里

object Version {
    const val kotlin = "1.5.10"
    const val compose = "1.0.0-rc01"
    const val composeActivity = "1.3.0-rc01"
}

object Compose {
    const val runtime = "androidx.compose.runtime:runtime:${Version.compose}"
    const val composeActivity = "androidx.activity:activity-compose:${Version.composeActivity}"
    const val ui = "androidx.compose.ui:ui:${Version.compose}"
    const val material = "androidx.compose.material:material:${Version.compose}"
    const val uiTooling = "androidx.compose.ui:ui-tooling:${Version.compose}"
    const val uiTest = "androidx.compose.ui:ui-test-junit4:${Version.compose}"
    const val livedata = "androidx.compose.runtime:runtime-livedata:${Version.compose}"
}

我尝试在其中添加 Jetpack Compose 的第二个模块具有更多依赖项。 问题是否可能与依赖项之一有关?

【问题讨论】:

  • 看起来它与依赖关系有关。如果我使用第三个功能模块一切正常。只有具有许多依赖项的 core 模块存在问题
  • 您的 kotlin 版本与您的 compose 版本不兼容。对于 kotlin 版本 1.5.10 使用 1.0.0-beta09 撰写版本
  • @VygintasB 我按照这里建议的设置:developer.android.com/jetpack/compose/setup

标签: android android-jetpack-compose


【解决方案1】:

听起来在与您的 compose 依赖项相同的类路径中存在一些依赖项,这会传递另一个过时的 compose 版本,这可能会导致失败。在这里可以为您提供帮助的有用工具是:https://github.com/JakeWharton/dependency-tree-diff

还请注意,compose 在后台使用固定的 kotlin 版本来使其编译器/运行时工作,因此还要检查一下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2023-02-11
    • 2023-03-20
    • 2021-10-22
    相关资源
    最近更新 更多