[Gradle] [Android] Include kotlin-tooling-metadata.json in apk artifact

^KT-48019 Verification Pending
This commit is contained in:
sebastian.sellmair
2021-08-02 12:02:55 +02:00
committed by Space
parent a22ef02e47
commit 82a70a205b
4 changed files with 30 additions and 6 deletions
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.gradle.targets.js.jsPluginDeprecationMessage
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tooling.includeKotlinToolingMetadataInApk
import org.jetbrains.kotlin.gradle.utils.*
import java.io.File
import java.net.URL
@@ -839,6 +840,8 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool
addKotlinDependenciesToAndroidSourceSets(project, kotlinAndroidTarget)
}
project.includeKotlinToolingMetadataInApk()
}
/**
@@ -52,7 +52,7 @@ private fun createRootPublication(project: Project, publishing: PublishingExtens
private fun MavenPublication.addKotlinToolingMetadataArtifactIfNeeded(project: Project) {
val buildKotlinToolingMetadataTask = project.buildKotlinToolingMetadataTask ?: return
artifact(buildKotlinToolingMetadataTask.flatMap { it.outputFile }) { artifact ->
artifact(buildKotlinToolingMetadataTask.map { it.outputFile }) { artifact ->
artifact.classifier = "kotlin-tooling-metadata"
artifact.builtBy(buildKotlinToolingMetadataTask)
}
@@ -9,7 +9,6 @@ import com.android.build.gradle.BaseExtension
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.internal.GeneratedSubclass
import org.gradle.api.provider.Property
import org.gradle.api.tasks.*
import org.jetbrains.kotlin.compilerRunner.konanVersion
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
@@ -55,9 +54,11 @@ abstract class BuildKotlinToolingMetadataTask : DefaultTask() {
const val defaultTaskName: String = "buildKotlinToolingMetadata"
}
@get:OutputDirectory
val outputDirectory: File = project.buildDir.resolve("kotlinToolingMetadata")
@get:OutputFile
val outputFile: Property<File> = project.objects.property(File::class.java)
.convention(project.buildDir.resolve("kotlinToolingMetadata").resolve("kotlin-tooling-metadata.json"))
val outputFile: File = outputDirectory.resolve("kotlin-tooling-metadata.json")
@get:Internal
internal val kotlinToolingMetadata by lazy {
@@ -70,8 +71,7 @@ abstract class BuildKotlinToolingMetadataTask : DefaultTask() {
@TaskAction
internal fun createToolingMetadataFile() {
val outputFile = outputFile.orNull ?: return
outputFile.parentFile.mkdirs()
outputDirectory.mkdirs()
outputFile.writeText(kotlinToolingMetadataJson)
}
}
@@ -0,0 +1,21 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.tooling
import com.android.build.gradle.AppExtension
import org.gradle.api.Project
internal fun Project.includeKotlinToolingMetadataInApk() {
plugins.withId("com.android.application") {
val buildKotlinToolingMetadataTask = buildKotlinToolingMetadataTask ?: return@withId
val android = project.extensions.getByName("android") as AppExtension
android.applicationVariants.configureEach { variant ->
variant.registerPostJavacGeneratedBytecode(
files(buildKotlinToolingMetadataTask.map { it.outputDirectory })
)
}
}
}