diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index cc7e89ccdba..f20b29931d1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -44,7 +44,7 @@ abstract class BaseGradleIT { open fun setUp() { // Aapt2 from Android Gradle Plugin 3.2 and below does not handle long paths on Windows. workingDir = createTempDir(if (isWindows) "" else "BaseGradleIT") - defaultBuildOptions().acceptAndroidSdkLicenses() + defaultBuildOptions().androidHome?.let { acceptAndroidSdkLicenses(it) } } @After @@ -52,47 +52,45 @@ abstract class BaseGradleIT { workingDir.deleteRecursively() } - // https://developer.android.com/studio/intro/update.html#download-with-gradle - fun BuildOptions.acceptAndroidSdkLicenses() { - if (this.androidHome == null) return - - val sdkLicensesDir = this.androidHome.resolve("licenses") - if (!sdkLicensesDir.exists()) sdkLicensesDir.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) - } - } - } companion object { + // https://developer.android.com/studio/intro/update.html#download-with-gradle + fun acceptAndroidSdkLicenses(androidHome: File) { + val sdkLicensesDir = androidHome.resolve("licenses") + if (!sdkLicensesDir.exists()) sdkLicensesDir.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) + } + } + } private object DaemonRegistry { // wrapper version to the number of daemon runs performed diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PureAndroidAndJavaConsumeMppLibIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PureAndroidAndJavaConsumeMppLibIT.kt index 1be38eb0219..b5291454825 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PureAndroidAndJavaConsumeMppLibIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PureAndroidAndJavaConsumeMppLibIT.kt @@ -52,7 +52,7 @@ class PureAndroidAndJavaConsumeMppLibIT : BaseGradleIT() { androidHome = KtTestUtil.findAndroidSdk(), androidGradlePluginVersion = AGPVersion.v7_0_0 ) - buildOptions.acceptAndroidSdkLicenses() + buildOptions.androidHome?.let { acceptAndroidSdkLicenses(it) } super.setUp() } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index ce5ce645e00..a8a408d9337 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.testbase import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.BaseGradleIT.Companion.acceptAndroidSdkLicenses +import org.jetbrains.kotlin.test.util.KtTestUtil import java.io.File import java.nio.file.* import java.nio.file.Files.copy @@ -40,6 +42,7 @@ fun KGPBaseTest.project( ) projectPath.addDefaultBuildFiles() projectPath.enableCacheRedirector() + projectPath.enableAndroidSdk() if (addHeapDumpOptions) projectPath.addHeapDumpOptions() val gradleRunner = GradleRunner @@ -205,6 +208,19 @@ private fun Path.addDefaultBuildFiles() { } } +@OptIn(ExperimentalPathApi::class) +internal fun Path.enableAndroidSdk() { + val androidSdk = KtTestUtil.findAndroidSdk() + resolve("local.properties") + .also { if (!it.exists()) it.createFile() } + .appendText( + """ + sdk.dir=${androidSdk.absolutePath.replace('\\', '/')} + """.trimIndent() + ) + acceptAndroidSdkLicenses(androidSdk) +} + @OptIn(ExperimentalPathApi::class) internal fun Path.enableCacheRedirector() { // Path relative to the current gradle module project dir