迁移到 Gradle 8.1.1 后构建失败:

问题描述 投票:0回答:2

我正在开发一个 Android 项目,最近决定从 Gradle 版本 8.0.2 迁移到 8.1.1。为了帮助实现这一点,我使用了 Android Studio 内置的 AGP(Android Gradle Plugin)升级助手。

迁移后,我开始面临以前从未遇到过的构建失败。构建日志中的错误消息是:

e: 文件:///Users/dakshsemwal/StudioProjects/eazy-android/build-logic/convention/src/main/kotlin/com/eazyupdates/AndroidCompose.kt:9:37 接口 CommonExtension 需要 5 个类型参数

我认为问题在于我在 Kotlin DSL 文件中使用 CommonExtension 的方式。具体来说,问题出现在这些函数定义中:

internal fun Project.configureAndroidCompose(
    commonExtension: CommonExtension<*, *, *, *>
) {
    val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")

    commonExtension.apply {
        buildFeatures {
            compose = true
            viewBinding = true
        }

        composeOptions {
            kotlinCompilerExtensionVersion = libs.findVersion("androidx-compose").get().toString()
        }

        kotlinOptions {
            freeCompilerArgs = freeCompilerArgs
        }
    }
} 


fun Project.configureFlavors(
    commonExtension: CommonExtension<*, *, *, *>
) {
    commonExtension.apply {
        flavorDimensions += FlavorDimension.environment.name
        productFlavors {
            Flavor.values().forEach {
                create(it.name) {
                    dimension = it.dimension.name
                    buildConfigField("String", "host", it.host)
                }
            }
        }
        testOptions {
            unitTests.isReturnDefaultValues = true
            unitTests.isIncludeAndroidResources = true
            unitTests.all {
                it.useJUnitPlatform()
            }
        }
    }
}

在这两个函数中,我将 CommonExtension 作为参数传递,并为其泛型类型使用四个通配符。在 Gradle 升级之前我没有遇到任何问题。

我的主要问题是:

为什么我会收到此错误消息,它是什么意思? Gradle 8.0.2 和 8.1.1 之间可能发生哪些变化可能导致此问题? 我很感激任何有关如何解决此构建失败的见解或建议。

android android-gradle-plugin gradle-kotlin-dsl
2个回答
1
投票

要解决这个问题,只需在

*
上再添加一个
CommonExtension
即可。

全部替换:

commonExtension: CommonExtension<*, *, *, *>

与:

commonExtension: CommonExtension<*, *, *, *, *>

似乎 API 已更改以帮助实现自动每应用程序语言支持

变化差异


0
投票

我出现错误 e: file:///C:/Users/MSI/AndroidStudioProjects/SocialMedia/app/build.gradle.kts:37:5:未解析的参考。由于接收器类型不匹配,以下候选者均不适用: public val NamedDomainObjectContainer.implementation:在 org.gradle.kotlin.dsl 中定义的 NamedDomainObjectProvider

© www.soinside.com 2019 - 2024. All rights reserved.