Gradle Management: Android Application Convention Plugin - devrath/RunTracer GitHub Wiki
- Here we can include Android application-level configuration.
- Application plugin -->
com.android.application
- Kotlin Android -->
org.jetbrains.kotlin.android
ApplicationId
TargetSdk
VersionCode
VersionName
Source & target compatibility
Kotlin.kt
import com.android.build.api.dsl.AndroidResources
import com.android.build.api.dsl.BuildFeatures
import com.android.build.api.dsl.BuildType
import com.android.build.api.dsl.CommonExtension
import com.android.build.api.dsl.DefaultConfig
import com.android.build.api.dsl.Installation
import com.android.build.api.dsl.ProductFlavor
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
internal fun <BuildFeaturesT : BuildFeatures, BuildTypeT : BuildType, DefaultConfigT : DefaultConfig, ProductFlavorT : ProductFlavor, AndroidResourcesT : AndroidResources, InstallationT : Installation>
Project.configureKotlinAndroid(
commonExtension: CommonExtension<BuildFeaturesT, BuildTypeT, DefaultConfigT, ProductFlavorT, AndroidResourcesT, InstallationT>
) {
commonExtension.apply {
compileSdk = libs.findVersion("projectCompileSdkVersion").get().toString().toInt()
defaultConfig.minSdk = libs.findVersion("projectMinSdkVersion").get().toString().toInt()
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
configureKotlin()
dependencies {
"coreLibraryDesugaring"(libs.findLibrary("desugar.jdk.libs").get())
}
}
private fun Project.configureKotlin() {
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
}
}
ProjectExt.kt
This is to get access the the versionCatalog in android
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
val Project.libs: VersionCatalog
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")
AndroidApplicationConventionPlugin.kt
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.run {
pluginManager.run {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
}
extensions.configure<ApplicationExtension> {
defaultConfig {
applicationId = libs.findVersion("projectApplicationId").get().toString()
targetSdk = libs.findVersion("projectTargetSdkVersion").get().toString().toInt()
versionCode = libs.findVersion("projectVersionCode").get().toString().toInt()
versionName = libs.findVersion("projectVersionName").get().toString()
}
configureKotlinAndroid(this)
}
}
}
}
build.gradle.kts
Register the plugin in the build-logic
gradle level
gradlePlugin {
plugins {
register("androidApplication") {
id = "runtracer.android.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
}
}