Skip to content

Commit 66fbb8a

Browse files
committed
refactor: gradle version catalog
1 parent 9e48e9c commit 66fbb8a

21 files changed

+465
-286
lines changed

app/build.gradle.kts

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,27 @@
11
plugins {
2-
id("com.android.application")
3-
kotlin("android")
4-
kotlin("kapt")
5-
id("dagger.hilt.android.plugin")
2+
id("brba.android.application")
3+
id("brba.android.application.compose")
4+
id("brba.android.hilt")
65
}
76

87
android {
98
namespace = "io.github.shinhyo.brba"
109

1110
defaultConfig {
1211
applicationId = "io.github.shinhyo.brba"
13-
versionCode = Versions.versionCode
14-
versionName = Versions.versionName
12+
versionCode = 1
13+
versionName = "1.0"
1514
}
1615

1716
buildTypes {
1817
getByName("release") {
1918
isMinifyEnabled = false
2019
proguardFiles(
21-
getDefaultProguardFile(
22-
"proguard-android-optimize.txt"
23-
),
20+
getDefaultProguardFile("proguard-android-optimize.txt"),
2421
"proguard-rules.pro"
2522
)
2623
}
2724
}
28-
29-
buildFeatures {
30-
compose = true
31-
}
32-
composeOptions {
33-
kotlinCompilerExtensionVersion = Dep.AndroidX.Compose.compilerVersion
34-
}
3525
}
3626

3727
dependencies {
@@ -40,18 +30,14 @@ dependencies {
4030
implementation(project(":domain"))
4131
implementation(project(":data"))
4232

43-
implementation(Dep.Google.material)
44-
45-
implementation(Dep.AndroidX.startupRuntime)
33+
implementation(libs.material)
4634

47-
implementation(Dep.AndroidX.core)
48-
implementation(Dep.AndroidX.appcompat)
49-
implementation(Dep.AndroidX.Activity.compose)
35+
implementation(libs.androidx.startup)
5036

51-
implementation(Dep.Dagger.hiltAndroid)
52-
kapt(Dep.Dagger.hiltCompiler)
37+
implementation(libs.androidx.core.ktx)
38+
implementation(libs.androidx.appcompat)
39+
implementation(libs.androidx.activity.compose)
5340

54-
implementation(Dep.timber)
55-
implementation(Dep.AndroidX.Compose.compiler)
41+
implementation(libs.timber)
5642

5743
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
plugins {
2+
`kotlin-dsl`
3+
}
4+
5+
group = "io.github.shinhyo.brba.buildlogic"
6+
7+
java {
8+
sourceCompatibility = JavaVersion.VERSION_1_8
9+
targetCompatibility = JavaVersion.VERSION_1_8
10+
}
11+
12+
dependencies {
13+
compileOnly(libs.android.gradlePlugin)
14+
compileOnly(libs.kotlin.gradlePlugin)
15+
}
16+
17+
gradlePlugin {
18+
plugins {
19+
register("androidApplication") {
20+
id = "brba.android.application"
21+
implementationClass = "AndroidApplicationConventionPlugin"
22+
}
23+
register("androidApplicationCompose") {
24+
id = "brba.android.application.compose"
25+
implementationClass = "AndroidApplicationComposeConventionPlugin"
26+
}
27+
28+
register("androidHilt") {
29+
id = "brba.android.hilt"
30+
implementationClass = "AndroidHiltConventionPlugin"
31+
}
32+
33+
register("androidLibrary") {
34+
id = "brba.android.library"
35+
implementationClass = "AndroidLibraryConventionPlugin"
36+
}
37+
register("androidLibraryCompose") {
38+
id = "brba.android.library.compose"
39+
implementationClass = "AndroidLibraryComposeConventionPlugin"
40+
}
41+
42+
}
43+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import io.github.shinhyo.brba.buildlogic.configureAndroidCompose
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.getByType
6+
7+
class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
pluginManager.apply("com.android.application")
11+
val extension = extensions.getByType<ApplicationExtension>()
12+
configureAndroidCompose(extension)
13+
}
14+
}
15+
16+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import io.github.shinhyo.brba.buildlogic.configureKotlinAndroid
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
7+
class AndroidApplicationConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("com.android.application")
12+
apply("org.jetbrains.kotlin.android")
13+
}
14+
15+
extensions.configure<ApplicationExtension> {
16+
configureKotlinAndroid(this)
17+
defaultConfig.targetSdk = 33
18+
// configureFlavors(this)
19+
}
20+
21+
// extensions.configure<ApplicationAndroidComponentsExtension> {
22+
// configurePrintApksTask(this)
23+
// }
24+
}
25+
}
26+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
import org.gradle.api.artifacts.VersionCatalogsExtension
4+
import org.gradle.kotlin.dsl.dependencies
5+
import org.gradle.kotlin.dsl.getByType
6+
7+
class AndroidHiltConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("org.jetbrains.kotlin.kapt")
12+
apply("dagger.hilt.android.plugin")
13+
}
14+
15+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
16+
dependencies {
17+
"implementation"(libs.findLibrary("hilt.android").get())
18+
"kapt"(libs.findLibrary("hilt.compiler").get())
19+
"kaptAndroidTest"(libs.findLibrary("hilt.compiler").get())
20+
}
21+
22+
}
23+
}
24+
25+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import com.android.build.api.dsl.LibraryExtension
2+
import io.github.shinhyo.brba.buildlogic.configureAndroidCompose
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.getByType
6+
7+
class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
pluginManager.apply("com.android.library")
11+
val extension = extensions.getByType<LibraryExtension>()
12+
configureAndroidCompose(extension)
13+
}
14+
}
15+
16+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import io.github.shinhyo.brba.buildlogic.configureKotlinAndroid
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
7+
class AndroidLibraryConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("com.android.library")
12+
apply("org.jetbrains.kotlin.android")
13+
}
14+
15+
extensions.configure<LibraryExtension> {
16+
configureKotlinAndroid(this)
17+
defaultConfig.targetSdk = 33
18+
// configureFlavors(this)
19+
}
20+
// extensions.configure<LibraryAndroidComponentsExtension> {
21+
// configurePrintApksTask(this)
22+
// }
23+
// configurations.configureEach {
24+
// resolutionStrategy {
25+
// force(libs.findLibrary("junit4").get())
26+
// // Temporary workaround for https://issuetracker.google.com/174733673
27+
// force("org.objenesis:objenesis:2.6")
28+
// }
29+
// }
30+
}
31+
}
32+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.github.shinhyo.brba.buildlogic
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import org.gradle.api.Project
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.kotlin.dsl.getByType
7+
8+
internal fun Project.configureAndroidCompose(
9+
commonExtension: CommonExtension<*, *, *, *>,
10+
) {
11+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
12+
13+
commonExtension.apply {
14+
buildFeatures {
15+
compose = true
16+
}
17+
18+
composeOptions {
19+
kotlinCompilerExtensionVersion =
20+
libs.findVersion("androidxComposeCompiler").get().toString()
21+
}
22+
23+
}
24+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package io.github.shinhyo.brba.buildlogic
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import org.gradle.api.JavaVersion
5+
import org.gradle.api.Project
6+
import org.gradle.api.artifacts.VersionCatalogsExtension
7+
import org.gradle.api.plugins.ExtensionAware
8+
import org.gradle.kotlin.dsl.dependencies
9+
import org.gradle.kotlin.dsl.getByType
10+
import org.gradle.kotlin.dsl.provideDelegate
11+
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
12+
13+
internal fun Project.configureKotlinAndroid(
14+
commonExtension: CommonExtension<*, *, *, *>,
15+
) {
16+
commonExtension.apply {
17+
compileSdk = 33
18+
19+
defaultConfig {
20+
minSdk = 28
21+
}
22+
23+
compileOptions {
24+
sourceCompatibility = JavaVersion.VERSION_1_8
25+
targetCompatibility = JavaVersion.VERSION_1_8
26+
isCoreLibraryDesugaringEnabled = true
27+
}
28+
29+
kotlinOptions {
30+
// Treat all Kotlin warnings as errors (disabled by default)
31+
// Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
32+
val warningsAsErrors: String? by project
33+
allWarningsAsErrors = warningsAsErrors.toBoolean()
34+
35+
freeCompilerArgs = freeCompilerArgs + listOf(
36+
"-opt-in=kotlin.RequiresOptIn",
37+
// Enable experimental coroutines APIs, including Flow
38+
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
39+
"-opt-in=kotlinx.coroutines.FlowPreview",
40+
"-opt-in=kotlin.Experimental",
41+
)
42+
43+
// Set JVM target to 1.8
44+
jvmTarget = JavaVersion.VERSION_1_8.toString()
45+
}
46+
}
47+
48+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
49+
50+
dependencies {
51+
add("coreLibraryDesugaring", libs.findLibrary("android.desugarJdkLibs").get())
52+
}
53+
}
54+
55+
fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
56+
(this as ExtensionAware).extensions.configure("kotlinOptions", block)
57+
}

build-logic/settings.gradle.kts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
2+
3+
dependencyResolutionManagement {
4+
repositories {
5+
google()
6+
mavenCentral()
7+
}
8+
versionCatalogs {
9+
create("libs") {
10+
from(files("../gradle/libs.versions.toml"))
11+
}
12+
}
13+
}
14+
15+
rootProject.name = "build-logic"
16+
include(":convention")

0 commit comments

Comments
 (0)