From e70c172deb10e272d82d4ddca9e272ec235a9aa5 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 14 Dec 2016 19:31:17 +0300 Subject: [PATCH] Android Gradle plugin: Fix compatibility with Android Gradle Plugin 2.3 (KT-15246) --- .../android/AndroidGradleWrapper.groovy | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy index 339a02005cc..f42ca53710f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy @@ -24,7 +24,6 @@ import com.android.build.gradle.api.BaseVariant import com.android.build.gradle.api.TestVariant import com.android.build.gradle.internal.VariantManager 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 org.gradle.api.file.ConfigurableFileTree @@ -198,7 +197,13 @@ class AndroidGradleWrapper { if (libraries == null) return jarToLibraryArtifactMap for (lib in libraries) { - jarToLibraryArtifactMap[lib.jarFile] = lib.bundle + if (lib.class.name == "com.android.builder.dependency.level2.AndroidDependency") { + // android tools >= 2.3 + jarToLibraryArtifactMap[lib.jarFile] = lib.artifactFile + } else { + // android tools <= 2.2 + 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 @@ -219,18 +224,22 @@ class AndroidGradleWrapper { } @Nullable - private static Iterable getVariantLibraryDependencies(BaseVariantData variantData) { + private static Iterable getVariantLibraryDependencies(BaseVariantData variantData) { def variantDependency = variantData.variantDependency - if (variantDependency instanceof DependencyContainer) { + + if (variantDependency.metaClass.getMetaMethod("getAndroidDependencies") != null) { // android tools < 2.2 - return variantDependency.getAndroidDependencies() + return variantDependency.getAndroidDependencies() as Iterable } - 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() + def getCompileDependencies = variantDependency.metaClass.getMetaMethod("getCompileDependencies") + if (getCompileDependencies != null) { + def compileDependencies = variantDependency.getCompileDependencies() + if (compileDependencies.metaClass.getMetaMethod("getDirectAndroidDependencies") != null) { + return compileDependencies.getDirectAndroidDependencies() // android >= 2.3 + } else if (compileDependencies.metaClass.getMetaMethod("getAndroidDependencies")) { + return compileDependencies.getAndroidDependencies() // android 2.2 + } } return null