Improve Android libraries support: allow project dependency on a lib
* Add a platform type androidJvm that is one-way compatible (can consume but cannot be consumed) with jvm, register the matching strategy * Write our attributes to Android's output configurations (this uses a naming convention that Android inherits from Java, but there's no public API at the moment for that)
This commit is contained in:
+8
@@ -113,6 +113,14 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools
|
||||
usesPlatformOf(compilation.target)
|
||||
project.addExtendsFromRelation(name, compilation.runtimeDependencyConfigurationName)
|
||||
}
|
||||
|
||||
// TODO this code depends on the convention that is present in the Android plugin as there's no public API
|
||||
// We should request such API in the Android plugin
|
||||
val apiElementsConfigurationName = "${variant.name}ApiElements"
|
||||
val runtimeElementsConfigurationName = "${variant.name}RuntimeElements"
|
||||
listOf(apiElementsConfigurationName, runtimeElementsConfigurationName).forEach { outputConfigurationName ->
|
||||
project.configurations.findByName(outputConfigurationName)?.usesPlatformOf(compilation.target)
|
||||
}
|
||||
}
|
||||
|
||||
private inner class KaptVariant(variantData: BaseVariant) : KaptVariantData<BaseVariant>(variantData) {
|
||||
|
||||
+12
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinSourceSetFactory
|
||||
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_COMPILER_EMBEDDABLE
|
||||
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP
|
||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||
import java.io.FileNotFoundException
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
@@ -68,9 +69,20 @@ abstract class KotlinBasePluginWrapper(
|
||||
}
|
||||
|
||||
val plugin = getPlugin(project, kotlinGradleBuildServices)
|
||||
|
||||
setupAttributeMatchingStrategy(project)
|
||||
|
||||
plugin.apply(project)
|
||||
}
|
||||
|
||||
private fun setupAttributeMatchingStrategy(project: Project) = with(project.dependencies.attributesSchema) {
|
||||
attribute(KotlinPlatformType.attribute).run {
|
||||
if (isGradleVersionAtLeast(4, 0)) {
|
||||
compatibilityRules.add(KotlinPlatformType.CompatibilityRule::class.java)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal abstract fun getPlugin(
|
||||
project: Project,
|
||||
kotlinGradleBuildServices: KotlinGradleBuildServices
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ open class KotlinAndroidTarget(
|
||||
internal set
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.jvm
|
||||
get() = KotlinPlatformType.androidJvm
|
||||
|
||||
private val compilationFactory = KotlinJvmAndroidCompilationFactory(project, this)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user