gpt4 book ai didi

gradle - 如何在 Kotlin DSL 中为多模块项目创建 "base"gradle 文件?

转载 作者:行者123 更新时间:2023-12-02 11:21:13 33 4
gpt4 key购买 nike

为了重用 gradle 文件中的代码,我通常为某些模块创建一个“基础”gradle 文件,然后应用它们并添加它可能需要的任何新依赖项。我正在将我的所有 gradle 文件转换为新的 Kotlin DSL,但是使用以下“基本”文件的关键字出现“ Unresolved reference ”错误。

plugins {
id("com.android.library")
kotlin("kotlin.android")
kotlin("kapt")
}

android {
compileSdkVersion(App.compileSdk)
defaultConfig {
minSdkVersion(App.minSdk)
targetSdkVersion(App.targetSdk)
versionCode = App.versionCode
versionName = App.versionName
testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
}

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

dependencies {
val implementation by configurations
val testImplementation by configurations
val androidTestImplementation by configurations

implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation(Libs.kotlin_stdlib_jdk8)
implementation(Libs.appcompat_v7)
testImplementation(Libs.junit)
androidTestImplementation(Libs.com_android_support_test_runner)
androidTestImplementation(Libs.espresso_core)
}

上面的文件在我的根项目中,我只是在功能模块中使用以下内容
apply(rootProject.file("base-android.gradle.kts"))

这在 Groovy 中运行良好,但在迁移到 Kotlin 时完全中断,关于我做错了什么或如何在 Kotlin DSL 中正确拥有“基础”gradle 文件的任何想法?

编辑:添加完整的错误消息
Script compilation errors:

Line 10: android {
^ Unresolved reference: android

Line 11: compileSdkVersion(28)
^ Unresolved reference: compileSdkVersion

Line 12: defaultConfig {
^ Unresolved reference: defaultConfig

Line 13: minSdkVersion(21)
^ Unresolved reference: minSdkVersion

Line 14: targetSdkVersion(28)
^ Unresolved reference: targetSdkVersion

Line 15: versionCode = 1
^ Unresolved reference: versionCode

Line 16: versionName = "1.0"
^ Unresolved reference: versionName

Line 17: testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
^ Unresolved reference: testInstrumentationRunner

Line 20: buildTypes {
^ Unresolved reference: buildTypes

Line 21: getByName("release") {
^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public inline fun <reified T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String): TypeVariable(T) defined in org.gradle.kotlin.dsl
public inline fun <reified T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String, configure: TypeVariable(T).() -> Unit): TypeVariable(T) defined in org.gradle.kotlin.dsl
public fun <T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String, type: KClass<TypeVariable(T)>): TypeVariable(T) defined in org.gradle.kotlin.dsl
public fun <T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String, type: KClass<TypeVariable(T)>, configure: TypeVariable(T).() -> Unit): TypeVariable(T) defined in org.gradle.kotlin.dsl
public inline fun <reified T : Any> ExtensionContainer.getByName(name: String): TypeVariable(T) defined in org.gradle.kotlin.dsl

Line 22: isMinifyEnabled = false
^ Unresolved reference: isMinifyEnabled

Line 23: proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
^ Unresolved reference: proguardFiles

Line 23: proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
^ Unresolved reference: getDefaultProguardFile

Line 27: compileOptions {
^ Unresolved reference: compileOptions

Line 28: sourceCompatibility = JavaVersion.VERSION_1_8
^ Unresolved reference: sourceCompatibility

Line 29: targetCompatibility = JavaVersion.VERSION_1_8
^ Unresolved reference: targetCompatibility

16 errors

最佳答案

这是我的做法:build.gradle.kts

apply(from = "${rootProject.projectDir}/common-setup.gradle.kts")
common-setup.gradle.kts
apply {
fun android(configure: com.android.build.gradle.internal.dsl.BaseAppModuleExtension.() -> Unit): Unit =
(project as org.gradle.api.plugins.ExtensionAware).extensions.configure("android", configure)

android {
//common setup here
}
}

关于gradle - 如何在 Kotlin DSL 中为多模块项目创建 "base"gradle 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53604782/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com