diff --git a/buildSrc/src/main/kotlin/tasks.kt b/buildSrc/src/main/kotlin/tasks.kt index 9baa918901d..34a84bcf25a 100644 --- a/buildSrc/src/main/kotlin/tasks.kt +++ b/buildSrc/src/main/kotlin/tasks.kt @@ -331,6 +331,48 @@ fun Task.useAndroidJar() { TaskUtils.useAndroidJar(this) } +fun Task.acceptAndroidSdkLicenses() { + val separator = System.lineSeparator() + with(project) { + val androidSdk = configurations["androidSdk"].singleFile + val sdkLicensesDir = androidSdk.resolve("licenses").also { + if (!it.exists()) it.mkdirs() + } + + val sdkLicenses = listOf( + "8933bad161af4178b1185d1a37fbf41ea5269c55", + "d56f5187479451eabf01fb78af6dfcb131a6481e", + "24333f8a63b6825ea9c5514f83c2829b004d1fee", + ) + val sdkPreviewLicense = "84831b9409646a918e30573bab4c9c91346d8abd" + + val sdkLicenseFile = sdkLicensesDir.resolve("android-sdk-license") + if (!sdkLicenseFile.exists()) { + sdkLicenseFile.createNewFile() + sdkLicenseFile.writeText( + sdkLicenses.joinToString(separator = separator) + ) + } else { + sdkLicenses + .subtract( + sdkLicenseFile.readText().lines() + ) + .forEach { + sdkLicenseFile.appendText("$it$separator") + } + } + + val sdkPreviewLicenseFile = sdkLicensesDir.resolve("android-sdk-preview-license") + if (!sdkPreviewLicenseFile.exists()) { + sdkPreviewLicenseFile.writeText(sdkPreviewLicense) + } else { + if (sdkPreviewLicense != sdkPreviewLicenseFile.readText().trim()) { + sdkPreviewLicenseFile.writeText(sdkPreviewLicense) + } + } + } +} + fun Project.confugureFirPluginAnnotationsDependency(testTask: TaskProvider) { val firPluginAnnotations: Configuration by configurations.creating diff --git a/libraries/tools/gradle/regression-benchmarks/build.gradle.kts b/libraries/tools/gradle/regression-benchmarks/build.gradle.kts index 9cfdb069ed3..d78ba208a06 100644 --- a/libraries/tools/gradle/regression-benchmarks/build.gradle.kts +++ b/libraries/tools/gradle/regression-benchmarks/build.gradle.kts @@ -76,44 +76,7 @@ fun addBenchmarkTask( val acceptAndroidSdkLicenses = tasks.register("acceptAndroidSdkLicenses") { useAndroidSdk() - doLast { - val androidSdk = configurations["androidSdk"].singleFile - val sdkLicensesDir = androidSdk.resolve("licenses").also { - if (!it.exists()) it.mkdirs() - } - - val sdkLicenses = listOf( - "8933bad161af4178b1185d1a37fbf41ea5269c55", - "d56f5187479451eabf01fb78af6dfcb131a6481e", - "24333f8a63b6825ea9c5514f83c2829b004d1fee", - ) - val sdkPreviewLicense = "84831b9409646a918e30573bab4c9c91346d8abd" - - val sdkLicenseFile = sdkLicensesDir.resolve("android-sdk-license") - if (!sdkLicenseFile.exists()) { - sdkLicenseFile.createNewFile() - sdkLicenseFile.writeText( - sdkLicenses.joinToString(separator = "\n") - ) - } else { - sdkLicenses - .subtract( - sdkLicenseFile.readText().lines() - ) - .forEach { - sdkLicenseFile.appendText("$it\n") - } - } - - val sdkPreviewLicenseFile = sdkLicensesDir.resolve("android-sdk-preview-license") - if (!sdkPreviewLicenseFile.exists()) { - sdkPreviewLicenseFile.writeText(sdkPreviewLicense) - } else { - if (sdkPreviewLicense != sdkPreviewLicenseFile.readText().trim()) { - sdkPreviewLicenseFile.writeText(sdkPreviewLicense) - } - } - } + doLast { acceptAndroidSdkLicenses() } } fun JavaExec.usesAndroidSdk() { diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index c3c7834acfe..4abec330faa 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -277,6 +277,8 @@ if (!kotlinBuildProperties.isInJpsBuildIdeaSync) { languageVersion.set(JavaLanguageVersion.of(11)) }) dependsOnKotlinGradlePluginInstall() + useAndroidSdk() + doFirst { acceptAndroidSdkLicenses() } testLogging { events("passed", "skipped", "failed") diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/ExternalAndroidTargetPrototypeSmokeTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/ExternalAndroidTargetPrototypeSmokeTest.kt index f09b87662c0..862d40d1711 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/ExternalAndroidTargetPrototypeSmokeTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/ExternalAndroidTargetPrototypeSmokeTest.kt @@ -10,7 +10,6 @@ package org.jetbrains.kotlin.gradle.dependencyResolutionTests.tcs import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.plugins.MavenPublishPlugin -import org.jetbrains.kotlin.gradle.* import org.jetbrains.kotlin.gradle.android.androidTargetPrototype import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension @@ -48,6 +47,7 @@ class ExternalAndroidTargetPrototypeSmokeTest { @Test fun `apply prototype - evaluate - configurations can be resolved`() { val project = buildProjectWithMPP() + setAndroidSdkDirProperty(project) project.androidLibrary { compileSdk = 31 } val androidTargetPrototype = project.multiplatformExtension.androidTargetPrototype() @@ -84,7 +84,7 @@ class ExternalAndroidTargetPrototypeSmokeTest { applyMultiplatformPlugin() repositories.mavenCentralCacheRedirector() } - + setAndroidSdkDirProperty(project) project.androidLibrary { compileSdk = 31 } project.multiplatformExtension.androidTargetPrototype() project.evaluate() diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/androidUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/androidUtils.kt index c76c08b21e9..c4eae4018a6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/androidUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/androidUtils.kt @@ -5,11 +5,21 @@ package org.jetbrains.kotlin.gradle.util +import org.gradle.api.Project import org.junit.Assume import java.io.File -val isAndroidSdkAvailable: Boolean = System.getenv("ANDROID_SDK_ROOT")?.let { root -> File(root).exists() } ?: false +val androidSdk: String? = System.getProperty("android.sdk") +val isAndroidSdkAvailable: Boolean = androidSdk?.let { root -> File(root).exists() } ?: false fun assumeAndroidSdkAvailable() { Assume.assumeTrue("Missing android sdk", isAndroidSdkAvailable) } + +fun setAndroidSdkDirProperty(project: Project) { + val localPropertiesFile = File(project.rootDir.canonicalPath).resolve("local.properties") + if (!localPropertiesFile.exists()) { + localPropertiesFile.createNewFile() + } + localPropertiesFile.writeText("sdk.dir = $androidSdk") +} \ No newline at end of file