Configure Android SDK in new test dsl.

This commit is contained in:
Yahor Berdnikau
2021-07-21 14:44:28 +02:00
committed by Space
parent 1e758c6767
commit c5ce52eef5
3 changed files with 55 additions and 41 deletions
@@ -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
@@ -52,7 +52,7 @@ class PureAndroidAndJavaConsumeMppLibIT : BaseGradleIT() {
androidHome = KtTestUtil.findAndroidSdk(),
androidGradlePluginVersion = AGPVersion.v7_0_0
)
buildOptions.acceptAndroidSdkLicenses()
buildOptions.androidHome?.let { acceptAndroidSdkLicenses(it) }
super.setUp()
}
@@ -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