使用目录版本和 kotlin dsl 时未找到 LibraryExtension

Jul*_*sam 8 android gradle kotlin gradle-kotlin-dsl

我在 gradle 中使用目录版本时遇到问题,我正在尝试将其应用到我的项目中。我从这里举了一个例子https://github.com/android/nowinandroid但是当我收到如下错误时:

Extension of type 'LibraryExtension' does not exist. Currently registered extension types: [ExtraPropertiesExtension, LibrariesForLibs, VersionCatalogsExtension, BasePluginExtension, DefaultArtifactPublicationSet, SourceSetContainer, ReportingExtension, JavaPluginExtension, JavaToolchainService, NamedDomainObjectContainer<BaseVariantOutput>, BaseAppModuleExtension, ApplicationAndroidComponentsExtension, KotlinAndroidProjectExtension, KotlinTestsRegistry]
    at org.gradle.internal.extensibility.ExtensionsStorage.getHolderByType(ExtensionsStorage.java:88)
    at org.gradle.internal.extensibility.ExtensionsStorage.configureExtension(ExtensionsStorage.java:70)
    at org.gradle.internal.extensibility.DefaultConvention.configure(DefaultConvention.java:189)
    at AndroidLibraryConventionPlugin.apply(AndroidLibraryConventionPlugin.kt:30)
    at AndroidLibraryConventionPlugin.apply(AndroidLibraryConventionPlugin.kt:10)
Run Code Online (Sandbox Code Playgroud)

我试图实现的代码是这样的:

internal fun Project.configureKotlinAndroid(
    commonExtension: CommonExtension<*, *, *, *>,
) {
    commonExtension.apply {
        compileSdk = 32

        defaultConfig {
            minSdk = 21
        }

        compileOptions {
            compileOptions {
                sourceCompatibility = JavaVersion.VERSION_1_8
                targetCompatibility = JavaVersion.VERSION_1_8
            }
        }

        kotlinOptions {
            jvmTarget = JavaVersion.VERSION_1_8.toString()
        }
    }

    val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")

    dependencies {

    }
}
Run Code Online (Sandbox Code Playgroud)

之后它被称为这里

class AndroidLibraryConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            with(pluginManager) {
                apply("com.android.application")
                apply("org.jetbrains.kotlin.android")
            }

            extensions.configure<LibraryExtension> {
                configureKotlinAndroid(this)
                defaultConfig.targetSdk = 32
            }

            val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
            dependencies {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

您需要将 gradle 库添加到 buildSrc gradle 文件依赖项中:

compileOnly("com.android.tools.build:gradle:7.4.0")
Run Code Online (Sandbox Code Playgroud)

然后它将导入 LibraryExtension 类

  • 这个答案有些正确。只是为了添加更多细节,在构建逻辑约定模块的 gradle 中,您需要设置 gradle 依赖项: ``` dependency {compileOnly(libs.android.gradlePlugin) }``` (2认同)
  • 兄弟,谢谢你,我已经疯了三天了 (2认同)