[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 kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue
open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() {
@@ -433,17 +434,25 @@ open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() {
@Test
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()
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")
listOf(debugApk, releaseApk).forEach { apk ->
assertTrue(apk.exists(), "Missing apk ${apk.path}")
ZipFile(apk).use { zip ->
assertNotNull(zip.getEntry("kotlin-tooling-metadata.json"), "Expected metadata being packaged into apk")
}
assertTrue(releaseApk.exists(), "Missing release apk ${releaseApk.path}")
ZipFile(releaseApk).use { zip ->
assertNotNull(zip.getEntry("kotlin-tooling-metadata.json"), "Expected metadata being packaged into release apk")
}
}
}
@@ -13,9 +13,11 @@ internal fun Project.includeKotlinToolingMetadataInApk() {
val buildKotlinToolingMetadataTask = buildKotlinToolingMetadataTask ?: return@withId
val android = project.extensions.getByName("android") as AppExtension
android.applicationVariants.configureEach { variant ->
variant.registerPostJavacGeneratedBytecode(
files(buildKotlinToolingMetadataTask.map { it.outputDirectory })
)
if (!variant.buildType.isDebuggable) {
variant.registerPostJavacGeneratedBytecode(
files(buildKotlinToolingMetadataTask.map { it.outputDirectory })
)
}
}
}
}