我有单独的groovy脚本,可以添加到我的android项目中。我可以在build.gradle文件中应用它,没有问题。但是从Kotlinbuild.gradle.kts文件调用它时,我会得到错误。
我有flavors.gradle
文件
ext.configFlavors = {
flavorDimensions "brand"
productFlavors {
myBrand {
dimension "brand"
}
}
我可以很容易地从build.gradle文件调用它。
android{
...
with configFlavors
}
但是在build.gradle.kts文件中,我得到:
Could not find method flavorDimensions() for arguments [brand] on project ': myModule' of type org.gradle.api.Project.
我的build.gradle.kts看起来像这样:
import com.android.build.gradle.LibraryExtension
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}
apply(from ="${rootProject.projectDir}/buildSrc/flavors.gradle" )
val configFlavors: groovy.lang.Closure<LibraryExtension> by extra
android {
compileSdk = Versions.compile_sdk_version
defaultConfig {
minSdk = Versions.min_sdk_version
targetSdk = Versions.target_sdk_version
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
//Dev
create("dev") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
//Staging
create("staging") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
//Production
create("production") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
}
// I am able to call the closure but i got the error
configFlavors()
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
viewBinding = true
}
}
dependencies {
implementation(fileTree("include" to listOf("*.jar"), "dir" to "libs"))
implementation(project(":domain"))
// list of dependencies
}
2条答案
按热度按时间oyt4ldly1#
可以使用以下语法访问额外属性:
然而,
configFlavours
不是一个简单的基元值,它是一个Closure。在Kotlin中可以访问闭包,但是如果不知道闭包应该应用于什么类型,就不可能使用它。
Gradle文档中有更多示例
P.S.您的代码同时具有
flavour
和flavor
-请选择一个拼写:)ecfsfe2w2#
我最终添加了另一个闭包,它以libraryExtension作为参数。并从gradle.build.kts文件中使用它。它不是最优的,但似乎可以工作。
我这样称呼它