我正在开发一个 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 之间可能发生哪些变化可能导致此问题? 我很感激任何有关如何解决此构建失败的见解或建议。
要解决这个问题,只需在
*
上再添加一个 CommonExtension
即可。
全部替换:
commonExtension: CommonExtension<*, *, *, *>
与:
commonExtension: CommonExtension<*, *, *, *, *>
似乎 API 已更改以帮助实现自动每应用程序语言支持。
变化差异。
我出现错误 e: file:///C:/Users/MSI/AndroidStudioProjects/SocialMedia/app/build.gradle.kts:37:5:未解析的参考。由于接收器类型不匹配,以下候选者均不适用: public val NamedDomainObjectContainer.implementation:在 org.gradle.kotlin.dsl 中定义的 NamedDomainObjectProvider