Как добавляются дополнительные свойства градиента в DSL Kotlin?

Я пытаюсь организовать свои файлы сборки так же, как и в хорошем состоянии, имея значения в отдельном файле для повторного использования. Но я не могу понять синтаксис, чтобы сделать то же самое в DSL kotlin.

Вот что я использую в root build.gradle.kts:

applyFrom("config.gradle.kts") buildscript { repositories { google() jcenter() } dependencies { val test = project.extra["minSdkVer"] classpath("com.android.tools.build:gradle:3.0.0-alpha4") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-5") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() mavenCentral() } } 

и вот что в файле config.gradle.kts, на который ссылаются:

 mapOf( Pair("minSdkVer", 22), Pair("targetSdkVer", 25), Pair("compiledSdkVer", 25), Pair("buildToolsVer", "26-rc4") ).entries.forEach { project.extra.set(it.key, it.value) } 

Но есть ошибка:

Невозможно получить свойство «minSdkVer» на добавление дополнительных свойств, поскольку оно не существует

Правильное исправление: Gradle собирает и применяет buildscript { ... } из вашего скрипта строго перед выполнением чего-либо еще от него. Итак, чтобы ваши свойства из config.gradle.kts доступны внутри buildscript , вы должны переместить applyFrom("config.gradle.kts") в свой buildscript { ... } :

 buildscript { applyFrom("config.gradle.kts") /* ... */ } 

Другой возможной ошибкой является использование дополнительного свойства в качестве extra["minSdkVer"] в рамках другого ExtensionAware , как задача в этом примере:

 val myTask = task("printMinSdkVer") { doLast { println("Extra property value: ${extra["minSdkVer"]}") } } 

В этом случае extra.get(...) использует не project.extra а extra задачу.

Чтобы исправить это, укажите, что вы работаете с проектом. Прямое использование:

 println(project.extra["minSdkVer"]) 

И для делегации.

 val minSdkVer by project.extra