Skip to content

Commit afd0389

Browse files
committed
Consolidate gradle config and publishing
- Add gradle/libs.versions.toml for plugin/dependency versions - Move common Android library/application config (compileSdk, minSdk, JVM 17, compose, testOptions) to subprojects blocks in the root build script - Extract shared Maven Central publishing into gradle/publishing.gradle.kts (parameterized by artifactId, name, description) - Extract Robolectric + standard exclusion list into gradle/robolectric.gradle.kts Net: -529 lines across module build files. Closes #113, #114
1 parent fe55f15 commit afd0389

10 files changed

Lines changed: 436 additions & 752 deletions

File tree

app/build.gradle.kts

Lines changed: 26 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
11
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
22
import com.github.triplet.gradle.androidpublisher.ResolutionStrategy
3-
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
43

54
plugins {
6-
id("com.android.application")
7-
id("org.jetbrains.kotlin.android")
8-
id("org.jetbrains.kotlin.plugin.compose")
9-
id("com.github.triplet.play") version "3.13.0"
5+
alias(libs.plugins.android.application)
6+
alias(libs.plugins.kotlin.android)
7+
alias(libs.plugins.kotlin.compose)
8+
alias(libs.plugins.play.publisher)
109
}
1110

1211
android {
1312
namespace = "com.hello.curiosity"
14-
compileSdk = 35
1513

1614
defaultConfig {
1715
applicationId = "com.hello.curiosity.design"
18-
minSdk = 23
1916
targetSdk = 35
2017

2118
versionCode = System.getenv("GITHUB_RUN_NUMBER")?.toInt() ?: 1
2219
versionName = System.getenv("VERSION") ?: "local"
2320

24-
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2521
vectorDrawables {
2622
useSupportLibrary = true
2723
}
@@ -47,7 +43,7 @@ android {
4743
signingConfig = signingConfigs.getByName("release")
4844
proguardFiles(
4945
getDefaultProguardFile("proguard-android-optimize.txt"),
50-
"proguard-rules.pro"
46+
"proguard-rules.pro",
5147
)
5248
}
5349
}
@@ -63,94 +59,44 @@ android {
6359
artifactDir.set(file("build/outputs/bundle/release"))
6460
}
6561

66-
compileOptions {
67-
sourceCompatibility = JavaVersion.VERSION_17
68-
targetCompatibility = JavaVersion.VERSION_17
69-
}
70-
71-
kotlin {
72-
compilerOptions {
73-
jvmTarget.set(JvmTarget.JVM_17)
74-
}
75-
}
76-
77-
buildFeatures {
78-
compose = true
79-
}
80-
8162
packaging {
8263
resources {
8364
excludes += "/META-INF/{AL2.0,LGPL2.1}"
8465
}
8566
}
86-
87-
testOptions {
88-
unitTests {
89-
isIncludeAndroidResources = true
90-
isReturnDefaultValues = true
91-
}
92-
}
9367
}
9468

9569
dependencies {
96-
// Android
97-
implementation("androidx.core:core-ktx:1.16.0")
98-
99-
// Compose
100-
implementation("androidx.activity:activity-compose:1.10.1")
101-
implementation("androidx.compose.material:material:1.11.0")
102-
implementation("androidx.compose.material:material-icons-extended:1.7.8")
103-
implementation("androidx.navigation:navigation-compose:2.9.8")
104-
debugImplementation("androidx.compose.ui:ui-tooling:1.11.0")
105-
implementation("androidx.compose.ui:ui-tooling-preview:1.11.0")
106-
implementation("androidx.compose.ui:ui:1.11.0")
107-
108-
// Curiosity
70+
implementation(libs.androidx.core.ktx)
71+
72+
implementation(libs.androidx.activity.compose)
73+
implementation(libs.androidx.compose.material)
74+
implementation(libs.androidx.compose.material.icons.extended)
75+
implementation(libs.androidx.navigation.compose)
76+
implementation(libs.androidx.compose.ui)
77+
implementation(libs.androidx.compose.ui.tooling.preview)
78+
debugImplementation(libs.androidx.compose.ui.tooling)
79+
10980
implementation(project(":curiosity"))
11081
implementation(project(":navigation"))
11182
implementation(project(":settings"))
11283

113-
// Leak
114-
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
84+
debugImplementation(libs.leakcanary.android)
11585

116-
// Testing
117-
testImplementation("junit:junit:4.13.2")
118-
119-
// Curiosity testing utils
86+
testImplementation(libs.junit)
12087
testImplementation(project(":test-compose-utils"))
88+
testImplementation(libs.androidx.compose.ui.test.junit4)
89+
testImplementation(libs.androidx.navigation.testing)
90+
debugImplementation(libs.androidx.compose.ui.test.manifest)
12191

122-
// Compose
123-
debugImplementation("androidx.compose.ui:ui-test-manifest:1.11.0")
124-
testImplementation("androidx.compose.ui:ui-test-junit4:1.11.0")
125-
testImplementation("androidx.navigation:navigation-testing:2.9.8")
126-
127-
// Robolectric
128-
testImplementation("org.robolectric:robolectric:4.16.1") {
129-
exclude(module = "classworlds")
130-
exclude(module = "commons-logging")
131-
exclude(module = "httpclient")
132-
exclude(module = "maven-artifact")
133-
exclude(module = "maven-artifact-manager")
134-
exclude(module = "maven-error-diagnostics")
135-
exclude(module = "maven-model")
136-
exclude(module = "maven-project")
137-
exclude(module = "maven-settings")
138-
exclude(module = "plexus-container-default")
139-
exclude(module = "plexus-interpolation")
140-
exclude(module = "plexus-utils")
141-
exclude(module = "wagon-file")
142-
exclude(module = "wagon-http-lightweight")
143-
exclude(module = "wagon-provider-api")
144-
exclude(module = "auto-service")
145-
}
146-
147-
// Android Testing
148-
androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
149-
androidTestImplementation("androidx.test.ext:junit:1.3.0")
150-
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.11.0")
92+
androidTestImplementation(libs.androidx.test.espresso.core)
93+
androidTestImplementation(libs.androidx.test.ext.junit)
94+
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
15195
}
15296

153-
// Kover
97+
extra["robolectricConfiguration"] = "testImplementation"
98+
apply(from = "$rootDir/gradle/robolectric.gradle.kts")
99+
154100
dependencies {
155101
kover(project(":curiosity"))
156102
kover(project(":navigation"))

build.gradle.kts

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import com.android.build.api.dsl.CommonExtension
3+
import com.android.build.api.dsl.LibraryExtension
14
import io.gitlab.arturbosch.detekt.Detekt
25
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
6+
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
7+
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
38
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
49

5-
buildscript {
6-
7-
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
8-
910
plugins {
10-
id("com.android.application") version "8.13.2" apply false
11-
id("com.android.library") version "8.13.2" apply false
12-
id("org.jetbrains.kotlin.android") version "2.3.21" apply false
13-
id("org.jetbrains.kotlin.plugin.compose") version "2.3.21" apply false
11+
alias(libs.plugins.android.application) apply false
12+
alias(libs.plugins.android.library) apply false
13+
alias(libs.plugins.kotlin.android) apply false
14+
alias(libs.plugins.kotlin.compose) apply false
15+
alias(libs.plugins.kotlin.serialization) apply false
1416

15-
id("io.gitlab.arturbosch.detekt") version "1.23.8"
16-
id("org.jmailen.kotlinter") version "5.4.2"
17-
id("org.jetbrains.kotlinx.kover") version "0.9.8"
17+
alias(libs.plugins.detekt)
18+
alias(libs.plugins.kotlinter)
19+
alias(libs.plugins.kover)
1820
}
1921

2022
allprojects {
@@ -42,6 +44,71 @@ allprojects {
4244
}
4345
}
4446

47+
fun CommonExtension<*, *, *, *, *, *>.configureAndroidCommon() {
48+
compileSdk = 35
49+
defaultConfig {
50+
minSdk = 23
51+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
52+
}
53+
compileOptions {
54+
sourceCompatibility = JavaVersion.VERSION_17
55+
targetCompatibility = JavaVersion.VERSION_17
56+
}
57+
buildFeatures {
58+
compose = true
59+
}
60+
testOptions {
61+
unitTests {
62+
isIncludeAndroidResources = true
63+
isReturnDefaultValues = true
64+
}
65+
}
66+
}
67+
68+
subprojects {
69+
plugins.withId("com.android.application") {
70+
extensions.configure<ApplicationExtension>("android") {
71+
configureAndroidCommon()
72+
}
73+
}
74+
75+
plugins.withId("com.android.library") {
76+
extensions.configure<LibraryExtension>("android") {
77+
configureAndroidCommon()
78+
defaultConfig {
79+
targetSdk = 35
80+
}
81+
buildTypes {
82+
release {
83+
isMinifyEnabled = false
84+
}
85+
}
86+
publishing {
87+
singleVariant("release") {
88+
withSourcesJar()
89+
withJavadocJar()
90+
}
91+
}
92+
}
93+
}
94+
95+
plugins.withId("org.jetbrains.kotlin.android") {
96+
extensions.configure<KotlinAndroidProjectExtension>("kotlin") {
97+
compilerOptions {
98+
jvmTarget.set(JvmTarget.JVM_17)
99+
}
100+
}
101+
}
102+
103+
plugins.withId("org.jetbrains.kotlin.jvm") {
104+
extensions.configure<KotlinJvmProjectExtension>("kotlin") {
105+
compilerOptions {
106+
jvmTarget.set(JvmTarget.JVM_17)
107+
}
108+
}
109+
}
110+
}
111+
45112
tasks.register<Delete>("clean") {
46113
delete(rootProject.layout.buildDirectory)
47114
}
@@ -52,7 +119,6 @@ tasks.withType<KotlinCompile> {
52119
}
53120
}
54121

55-
// Kover
56122
dependencies {
57123
kover(project(":app"))
58124
kover(project(":slack-feedback"))

0 commit comments

Comments
 (0)