Fix compatibility with AS 2.2 gradle plugin
#KT-13594 fixed
This commit is contained in:
+8
-4
@@ -383,10 +383,14 @@ open class KotlinAndroidPlugin(
|
|||||||
|
|
||||||
configureJavaTask(kotlinTask, javaTask, logger)
|
configureJavaTask(kotlinTask, javaTask, logger)
|
||||||
createSyncOutputTask(project, kotlinTask, javaTask, kotlinAfterJavaTask, variantDataName)
|
createSyncOutputTask(project, kotlinTask, javaTask, kotlinAfterJavaTask, variantDataName)
|
||||||
val artifactFile = project.tryGetSingleArtifact(variantData)
|
|
||||||
val artifactDifferenceRegistryWrapper = ArtifactDifferenceRegistryAndroidWrapper(artifactDifferenceRegistry, variantData)
|
if ((kotlinAfterJavaTask ?: kotlinTask).incremental) {
|
||||||
configureMultiProjectIncrementalCompilation(project, kotlinTask, javaTask, kotlinAfterJavaTask,
|
val jarToAarMapping = AndroidGradleWrapper.getJarToAarMapping(variantData)
|
||||||
artifactDifferenceRegistryWrapper, artifactFile)
|
val artifactFile = project.tryGetSingleArtifact(variantData)
|
||||||
|
val artifactDifferenceRegistryWrapper = ArtifactDifferenceRegistryAndroidWrapper(artifactDifferenceRegistry, jarToAarMapping)
|
||||||
|
configureMultiProjectIncrementalCompilation(project, kotlinTask, javaTask, kotlinAfterJavaTask,
|
||||||
|
artifactDifferenceRegistryWrapper, artifactFile)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+48
@@ -8,6 +8,8 @@ import com.android.build.gradle.api.BaseVariant
|
|||||||
import com.android.build.gradle.api.TestVariant
|
import com.android.build.gradle.api.TestVariant
|
||||||
import com.android.build.gradle.internal.VariantManager
|
import com.android.build.gradle.internal.VariantManager
|
||||||
import com.android.build.gradle.internal.variant.BaseVariantData
|
import com.android.build.gradle.internal.variant.BaseVariantData
|
||||||
|
import com.android.builder.dependency.DependencyContainer
|
||||||
|
import com.android.builder.dependency.LibraryDependency
|
||||||
import com.android.builder.model.SourceProvider
|
import com.android.builder.model.SourceProvider
|
||||||
import org.gradle.api.file.ConfigurableFileTree
|
import org.gradle.api.file.ConfigurableFileTree
|
||||||
import org.gradle.api.internal.DefaultDomainObjectSet
|
import org.gradle.api.internal.DefaultDomainObjectSet
|
||||||
@@ -153,4 +155,50 @@ class AndroidGradleWrapper {
|
|||||||
|
|
||||||
return result.toList()
|
return result.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
static def Map<File, File> getJarToAarMapping(BaseVariantData variantData) {
|
||||||
|
def jarToLibraryArtifactMap = new HashMap<File, File>()
|
||||||
|
|
||||||
|
def libraries = getVariantLibraryDependencies(variantData)
|
||||||
|
if (libraries == null) return jarToLibraryArtifactMap
|
||||||
|
|
||||||
|
for (lib in libraries) {
|
||||||
|
jarToLibraryArtifactMap[lib.jarFile] = lib.bundle
|
||||||
|
|
||||||
|
// local dependencies are detected as changed by gradle, because they are seem to be
|
||||||
|
// rewritten every time when bundle changes
|
||||||
|
// when local dep will actually change, record for bundle will be removed from registry
|
||||||
|
for (localDep in lib.localJars) {
|
||||||
|
if (localDep instanceof File) {
|
||||||
|
// android tools 2.2
|
||||||
|
jarToLibraryArtifactMap[localDep] = lib.bundle
|
||||||
|
}
|
||||||
|
else if (localDep.metaClass.getMetaMethod("jarFile") != null) {
|
||||||
|
// android tools < 2.2
|
||||||
|
jarToLibraryArtifactMap[localDep.jarFile] = lib.bundle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return jarToLibraryArtifactMap
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static def Iterable<LibraryDependency> getVariantLibraryDependencies(BaseVariantData variantData) {
|
||||||
|
def variantDependency = variantData.variantDependency
|
||||||
|
if (variantDependency instanceof DependencyContainer) {
|
||||||
|
// android tools < 2.2
|
||||||
|
return variantDependency.getAndroidDependencies()
|
||||||
|
}
|
||||||
|
|
||||||
|
def variantDependencyMeta = variantData.variantDependency.getMetaClass()
|
||||||
|
def getCompileDependencies = variantDependencyMeta.getMetaMethod("getCompileDependencies")
|
||||||
|
if (getCompileDependencies != null && getCompileDependencies.returnType.metaClass == DependencyContainer.metaClass) {
|
||||||
|
// android tools 2.2
|
||||||
|
return variantDependency.getCompileDependencies().getAndroidDependencies()
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-20
@@ -16,36 +16,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.tasks.incremental.android
|
package org.jetbrains.kotlin.gradle.tasks.incremental.android
|
||||||
|
|
||||||
import com.android.build.gradle.internal.variant.BaseVariantData
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifference
|
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifference
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
// When lib is compiled, changes are associated with .aar files.
|
// When lib is compiled, changes are associated with .aar files.
|
||||||
// However when app is compiled, there is just .jar in classpath.
|
// However when app is compiled, there is just .jar in classpath.
|
||||||
// This class maps jar to aar via BaseVariantData
|
|
||||||
internal class ArtifactDifferenceRegistryAndroidWrapper(
|
internal class ArtifactDifferenceRegistryAndroidWrapper(
|
||||||
private val registry: ArtifactDifferenceRegistry,
|
private val registry: ArtifactDifferenceRegistry,
|
||||||
variantData: BaseVariantData<*>
|
private val jarToAarMapping: Map<File, File>
|
||||||
): ArtifactDifferenceRegistry by registry {
|
): ArtifactDifferenceRegistry by registry {
|
||||||
private val jarToLibraryArtifactMap: MutableMap<File, File> = HashMap()
|
|
||||||
|
|
||||||
init {
|
|
||||||
for (lib in variantData.variantDependency.libraries) {
|
|
||||||
jarToLibraryArtifactMap[lib.jarFile] = lib.bundle
|
|
||||||
|
|
||||||
// local dependencies are detected as changed by gradle, because they are seem to be
|
|
||||||
// rewritten every time when bundle changes
|
|
||||||
// when local dep will actually change, record for bundle will be removed from registry
|
|
||||||
for (localDep in lib.localDependencies) {
|
|
||||||
jarToLibraryArtifactMap[localDep.jarFile] = lib.bundle
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun get(artifact: File): Iterable<ArtifactDifference>? {
|
override fun get(artifact: File): Iterable<ArtifactDifference>? {
|
||||||
val mappedFile = jarToLibraryArtifactMap[artifact] ?: return null
|
val mappedFile = jarToAarMapping[artifact] ?: return null
|
||||||
return registry[mappedFile]
|
return registry[mappedFile]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user