Android Gradle plugin: Fix compatibility with Android Gradle Plugin 2.3 (KT-15246)

This commit is contained in:
Yan Zhulanow
2016-12-14 19:31:17 +03:00
committed by Yan Zhulanow
parent bc944961f1
commit e70c172deb
@@ -24,7 +24,6 @@ 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.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
@@ -198,7 +197,13 @@ class AndroidGradleWrapper {
if (libraries == null) return jarToLibraryArtifactMap if (libraries == null) return jarToLibraryArtifactMap
for (lib in libraries) { 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 // local dependencies are detected as changed by gradle, because they are seem to be
// rewritten every time when bundle changes // rewritten every time when bundle changes
@@ -219,18 +224,22 @@ class AndroidGradleWrapper {
} }
@Nullable @Nullable
private static Iterable<LibraryDependency> getVariantLibraryDependencies(BaseVariantData variantData) { private static Iterable<Object> getVariantLibraryDependencies(BaseVariantData variantData) {
def variantDependency = variantData.variantDependency def variantDependency = variantData.variantDependency
if (variantDependency instanceof DependencyContainer) {
if (variantDependency.metaClass.getMetaMethod("getAndroidDependencies") != null) {
// android tools < 2.2 // android tools < 2.2
return variantDependency.getAndroidDependencies() return variantDependency.getAndroidDependencies() as Iterable<Object>
} }
def variantDependencyMeta = variantData.variantDependency.getMetaClass() def getCompileDependencies = variantDependency.metaClass.getMetaMethod("getCompileDependencies")
def getCompileDependencies = variantDependencyMeta.getMetaMethod("getCompileDependencies") if (getCompileDependencies != null) {
if (getCompileDependencies != null && getCompileDependencies.returnType.metaClass == DependencyContainer.metaClass) { def compileDependencies = variantDependency.getCompileDependencies()
// android tools 2.2 if (compileDependencies.metaClass.getMetaMethod("getDirectAndroidDependencies") != null) {
return variantDependency.getCompileDependencies().getAndroidDependencies() return compileDependencies.getDirectAndroidDependencies() // android >= 2.3
} else if (compileDependencies.metaClass.getMetaMethod("getAndroidDependencies")) {
return compileDependencies.getAndroidDependencies() // android 2.2
}
} }
return null return null