package buildsrc.conventions import org.jetbrains.kotlin.util.suffixIfNot /** * Utilities for preparing Android projects */ plugins { base id("buildsrc.conventions.base") } val androidSdkDirPath: Provider = providers // first try getting the SDK installed on via GitHub step setup-android .environmentVariable("ANDROID_SDK_ROOT").map(::File) // else get the project-local SDK .orElse(layout.projectDirectory.file("projects/ANDROID_SDK").asFile) .map { it.invariantSeparatorsPath } val createAndroidLocalPropertiesFile by tasks.registering { val localPropertiesFile = temporaryDir.resolve("local.properties") outputs.file(localPropertiesFile).withPropertyName("localPropertiesFile") val androidSdkDirPath = androidSdkDirPath inputs.property("androidSdkDirPath", androidSdkDirPath) doLast { localPropertiesFile.apply { parentFile.mkdirs() createNewFile() writeText( """ |# DO NOT EDIT - Generated by $path | |sdk.dir=${androidSdkDirPath.get()} | """.trimMargin() ) } } } val updateAndroidLocalProperties by tasks.registering { // find all local.properties files val localPropertiesFiles = layout.projectDirectory.dir("projects") .asFileTree .matching { include("**/local.properties") } .files outputs.files(localPropertiesFiles).withPropertyName("localPropertiesFiles") val androidSdkDirPath = androidSdkDirPath inputs.property("androidSdkDirPath", androidSdkDirPath) doLast { localPropertiesFiles .filter { it.exists() } .forEach { file -> file.writeText( file.useLines { lines -> lines.joinToString("\n") { line -> when { line.startsWith("sdk.dir=") -> "sdk.dir=${androidSdkDirPath.get()}" else -> line } }.suffixIfNot("\n") } ) } } }