I’m currently setting up the convention plugin for my Android project. I want to register two different plugins using the same implementation class as shown below. Everything was fine until I couldn’t determine which registered plugin was being called inside my convention plugin class.
//build.gradle.kts(build-logic:convention)
gradlePlugin {
plugins {
register("androidLibraryCore") {
id = libs.plugins.umut.android.library.core.get().pluginId
implementationClass = "AndroidLibraryConventionPlugin"
}
register("androidLibraryTemp") {
id = libs.plugins.umut.android.library.temp.get().pluginId
implementationClass = "AndroidLibraryConventionPlugin"
}
}
}
In my Android modules, I call to them as follows:
//build.gradle(module:feature1)
plugins {
alias(libs.plugins.umut.android.library.core)
...
}
------------------------------------------------
//build.gradle(module:feature2)
plugins {
alias(libs.plugins.umut.android.library.temp)
...
}
In my AndroidLibraryConventionPlugin
class, I’m trying to create an if condition to differentiate between different alias calls. I want to apply extra logic for a custom-created temp plugin. I noticed that the alias method is calling PluginDependenciesSpecScope
class and adding plugin dependency in it, but I’m having trouble accessing this scope inside my AndroidLibraryConventionPlugin
class and determining if the temp plugin is called via alias or not. I can create an extra plugin class but the logic is %90 the same and I didn’t want to use a duplicated class.
import com.android.build.gradle.LibraryExtension
import com.umut.app.configureKotlinAndroid
import com.umut.app.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(project: Project) {
with(project) {
with(pluginManager) {
apply(project.libs.findPlugin("android-library").get().get().pluginId)
apply(project.libs.findPlugin("kotlin-android").get().get().pluginId)
}
if (isTempPlugin) {
// apply extra logic for libs.plugins.umut.android.library.temp
}
extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
}
}
}
}