[Gradle] [Android] Only bundle kotlin tooling metadata for non debuggable variants

^KT-48019
This commit is contained in:
sebastian.sellmair
2021-07-16 14:37:51 +02:00
committed by Space
parent 79565da904
commit e897c60ef1
2 changed files with 21 additions and 10 deletions
@@ -12,6 +12,7 @@ import java.io.File
import java.util.zip.ZipFile import java.util.zip.ZipFile
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() { open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() {
@@ -433,17 +434,25 @@ open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() {
@Test @Test
fun `test KotlinToolingMetadataArtifact is bundled into apk`(): Unit = with(Project("kotlinToolingMetadataAndroid")) { fun `test KotlinToolingMetadataArtifact is bundled into apk`(): Unit = with(Project("kotlinToolingMetadataAndroid")) {
build("assemble") { build("assembleDebug") {
assertSuccessful()
assertTasksNotExecuted(":${BuildKotlinToolingMetadataTask.defaultTaskName}")
val debugApk = project.projectDir.resolve("build/outputs/apk/debug/project-debug.apk")
assertTrue(debugApk.exists(), "Missing debug apk ${debugApk.path}")
ZipFile(debugApk).use { zip ->
assertNull(zip.getEntry("kotlin-tooling-metadata.json"), "Expected metadata *not* being packaged into debug apk")
}
}
build("assembleRelease") {
assertSuccessful() assertSuccessful()
assertTasksExecuted(":${BuildKotlinToolingMetadataTask.defaultTaskName}") assertTasksExecuted(":${BuildKotlinToolingMetadataTask.defaultTaskName}")
val debugApk = project.projectDir.resolve("build/outputs/apk/debug/project-debug.apk")
val releaseApk = project.projectDir.resolve("build/outputs/apk/release/project-release-unsigned.apk") val releaseApk = project.projectDir.resolve("build/outputs/apk/release/project-release-unsigned.apk")
listOf(debugApk, releaseApk).forEach { apk -> assertTrue(releaseApk.exists(), "Missing release apk ${releaseApk.path}")
assertTrue(apk.exists(), "Missing apk ${apk.path}") ZipFile(releaseApk).use { zip ->
ZipFile(apk).use { zip -> assertNotNull(zip.getEntry("kotlin-tooling-metadata.json"), "Expected metadata being packaged into release apk")
assertNotNull(zip.getEntry("kotlin-tooling-metadata.json"), "Expected metadata being packaged into apk")
}
} }
} }
} }
@@ -13,9 +13,11 @@ internal fun Project.includeKotlinToolingMetadataInApk() {
val buildKotlinToolingMetadataTask = buildKotlinToolingMetadataTask ?: return@withId val buildKotlinToolingMetadataTask = buildKotlinToolingMetadataTask ?: return@withId
val android = project.extensions.getByName("android") as AppExtension val android = project.extensions.getByName("android") as AppExtension
android.applicationVariants.configureEach { variant -> android.applicationVariants.configureEach { variant ->
variant.registerPostJavacGeneratedBytecode( if (!variant.buildType.isDebuggable) {
files(buildKotlinToolingMetadataTask.map { it.outputDirectory }) variant.registerPostJavacGeneratedBytecode(
) files(buildKotlinToolingMetadataTask.map { it.outputDirectory })
)
}
} }
} }
} }