Skip to content

Commit d29a01a

Browse files
author
Targholi
committed
migrate gradle build configuration to kotlin DSL.
1 parent 74648f7 commit d29a01a

File tree

8 files changed

+267
-89
lines changed

8 files changed

+267
-89
lines changed

app/build.gradle

Lines changed: 43 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,66 @@
11
plugins {
2-
id 'com.android.application'
3-
id 'kotlin-android'
4-
id 'kotlin-android-extensions'
5-
id 'kotlin-kapt'
6-
id 'dagger.hilt.android.plugin'
7-
id "androidx.navigation.safeargs.kotlin"
2+
id("com.android.application")
3+
id("kotlin-android")
4+
id("kotlin-android-extensions")
5+
id("kotlin-kapt")
6+
id("dagger.hilt.android.plugin")
7+
id("androidx.navigation.safeargs.kotlin")
88
}
99

1010
android {
11-
compileSdk 31
11+
compileSdk(AppConfig.compileSdk)
12+
// buildToolsVersion(AppConfig.buildToolsVersion)
1213

1314
defaultConfig {
14-
applicationId "com.milad.githoob"
15-
minSdk 21
16-
targetSdk 31
17-
versionCode 1
18-
versionName "1.0"
15+
applicationId = AppConfig.applicationId
16+
minSdkVersion(AppConfig.minSdk)
17+
targetSdkVersion(AppConfig.targetSdk)
18+
versionCode = AppConfig.versionCode
19+
versionName = AppConfig.versionName
1920

20-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
21+
testInstrumentationRunner = AppConfig.androidTestInstrumentation
2122
}
2223

2324
buildTypes {
2425
release {
25-
minifyEnabled false
26-
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
26+
minifyEnabled = false
27+
proguardFiles(
28+
getDefaultProguardFile("proguard-android-optimize.txt"),
29+
"proguard-rules.pro"
30+
)
2731
}
2832
}
33+
34+
flavorDimensions(AppConfig.dimension)
35+
productFlavors {
36+
create("staging") {
37+
applicationIdSuffix = ".staging"
38+
setDimension(AppConfig.dimension)
39+
}
40+
41+
create("production") {
42+
setDimension(AppConfig.dimension)
43+
}
44+
}
45+
2946
compileOptions {
30-
sourceCompatibility JavaVersion.VERSION_1_8
31-
targetCompatibility JavaVersion.VERSION_1_8
47+
sourceCompatibility = JavaVersion.VERSION_1_8
48+
targetCompatibility = JavaVersion.VERSION_1_8
3249
}
3350
kotlinOptions {
34-
jvmTarget = '1.8'
51+
jvmTarget = AppConfig.jvmTarget
3552
}
3653
buildFeatures {
37-
viewBinding true
38-
dataBinding true
54+
viewBinding = true
55+
dataBinding = true
3956
}
4057
}
4158

4259
dependencies {
43-
44-
implementation 'androidx.core:core-ktx:1.6.0'
45-
implementation 'androidx.appcompat:appcompat:1.3.1'
46-
implementation 'com.google.android.material:material:1.5.0-alpha04'
47-
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
48-
49-
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
50-
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
51-
52-
// Coroutines
53-
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
54-
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
55-
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
56-
implementation 'androidx.recyclerview:recyclerview:1.2.1'
57-
58-
testImplementation 'junit:junit:'
59-
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
60-
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
61-
62-
// Coroutine Lifecycle Scopes
63-
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
64-
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"
65-
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
66-
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
67-
68-
implementation "androidx.activity:activity-ktx:1.3.1"
69-
70-
implementation 'android.arch.lifecycle:extensions:1.1.1'
71-
72-
implementation 'com.google.code.gson:gson:2.8.7'
73-
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
74-
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
75-
implementation "com.squareup.okhttp3:logging-interceptor:4.5.0"
76-
77-
implementation "com.google.dagger:hilt-android:2.39"
78-
kapt "com.google.dagger:hilt-compiler:2.38.1"
79-
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
80-
kapt "androidx.hilt:hilt-compiler:1.0.0"
81-
82-
// Glide dependency
83-
implementation 'com.github.bumptech.glide:glide:4.12.0'
84-
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
85-
implementation 'jp.wasabeef:glide-transformations:3.0.1'
86-
87-
implementation "androidx.datastore:datastore-preferences:1.0.0"
88-
89-
implementation 'com.jakewharton.timber:timber:5.0.1'
90-
91-
implementation "io.noties.markwon:core:4.6.2"
92-
implementation "io.noties.markwon:html:4.6.2"
93-
implementation "io.noties.markwon:image:4.6.2"
60+
// implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
61+
implementation(AppDependencies.appLibraries)
62+
kapt(AppDependencies.kaptLibraries)
63+
annotationProcessor(AppDependencies.annotationLibraries)
64+
testImplementation(AppDependencies.testLibraries)
65+
androidTestImplementation(AppDependencies.androidTestLibraries)
9466
}

build.gradle

Lines changed: 0 additions & 17 deletions
This file was deleted.

build.gradle.kts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Top-level build file where you can add configuration options common to all sub-projects/modules.
2+
buildscript {
3+
repositories {
4+
google()
5+
mavenCentral()
6+
}
7+
dependencies {
8+
classpath("com.android.tools.build:gradle:${Versions.gradle}")
9+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}")
10+
classpath("com.google.dagger:hilt-android-gradle-plugin:${Versions.hilt}")
11+
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.safeArgs}")
12+
}
13+
}
14+
15+
tasks {
16+
register("clean", Delete::class) {
17+
delete(rootProject.buildDir)
18+
}
19+
}

buildSrc/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import org.gradle.kotlin.dsl.`kotlin-dsl`
2+
3+
plugins {
4+
`kotlin-dsl`
5+
}
6+
7+
repositories {
8+
jcenter()
9+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
object AppConfig {
2+
const val compileSdk = 31
3+
const val minSdk = 21
4+
const val targetSdk = 31
5+
const val versionCode = 1
6+
const val versionName = "1.0.0"
7+
const val buildToolsVersion = "29.0.3"
8+
const val applicationId = "com.milad.githoob"
9+
const val jvmTarget = "1.8"
10+
11+
const val androidTestInstrumentation = "androidx.test.runner.AndroidJUnitRunner"
12+
const val proguardConsumerRules = "consumer-rules.pro"
13+
const val dimension = "environment"
14+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import org.gradle.api.artifacts.dsl.DependencyHandler
2+
3+
object AppDependencies {
4+
//android ui base
5+
private val appcompat = "androidx.appcompat:appcompat:${Versions.appcompat}"
6+
private val coreKtx = "androidx.core:core-ktx:${Versions.coreKtx}"
7+
private val material = "com.google.android.material:material:${Versions.material}"
8+
private val constraintLayout = "androidx.constraintlayout:constraintlayout:${Versions.constraintLayout}"
9+
private val recyclerview = "androidx.recyclerview:recyclerview:${Versions.recyclerview}"
10+
private val legacy = "androidx.legacy:legacy-support-v4:${Versions.legacy}"
11+
private val activity = "androidx.activity:activity-ktx:${Versions.activity}"
12+
13+
// jetpack navigation
14+
private val navigationFragment = "androidx.navigation:navigation-fragment-ktx:${Versions.navigation}"
15+
private val navigationUi = "androidx.navigation:navigation-fragment-ktx:${Versions.navigation}"
16+
17+
// Coroutines
18+
private val coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutinesCore}"
19+
private val coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.coroutinesAndroid}"
20+
21+
// lifecycle
22+
private val lifecycleViewmodel = "androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.lifecycleScope}"
23+
private val lifecycleRuntime = "androidx.lifecycle:lifecycle-runtime-ktx:${Versions.lifecycleScope}"
24+
private val lifecycleLivedata = "androidx.lifecycle:lifecycle-livedata-ktx:${Versions.lifecycleScope}"
25+
private val lifecycleExtensions = "androidx.lifecycle:lifecycle-extensions:${Versions.lifecycleScope_extensions}"
26+
private val lifecycleArch = "android.arch.lifecycle:extensions:${Versions.lifecycleArch}"
27+
28+
// network and gson
29+
private val gson ="com.google.code.gson:gson:${Versions.gson}"
30+
private val retrofit ="com.squareup.retrofit2:retrofit:${Versions.retrofit}"
31+
private val retrofitGson ="com.squareup.retrofit2:converter-gson:${Versions.retrofit}"
32+
private val okhttpLogging="com.squareup.okhttp3:logging-interceptor:${Versions.okhttpLogging}"
33+
34+
//test libs
35+
private val junit = "junit:junit:${Versions.junit}"
36+
private val extJUnit = "androidx.test.ext:junit:${Versions.extJunit}"
37+
private val espressoCore = "androidx.test.espresso:espresso-core:${Versions.espresso}"
38+
39+
// hilt
40+
private val hilt_android = "com.google.dagger:hilt-android:${Versions.hilt_android}"
41+
private val hilt_compiler = "com.google.dagger:hilt-compiler:${Versions.hilt_compiler}"
42+
private val hilt_lifecycle = "androidx.hilt:hilt-lifecycle-viewmodel:${Versions.hilt_lifecycle}"
43+
private val hilt_androidx = "androidx.hilt:hilt-compiler:${Versions.hilt_androidx}"
44+
45+
// Glide
46+
private val glide="com.github.bumptech.glide:glide:${Versions.glide}"
47+
private val glide_compiler="com.github.bumptech.glide:compiler:${Versions.glide_compiler}"
48+
private val glide_transformations="jp.wasabeef:glide-transformations:${Versions.glide_transformations}"
49+
50+
private val datastore= "androidx.datastore:datastore-preferences:${Versions.datastore}"
51+
private val timber = "com.jakewharton.timber:timber:${Versions.timber}"
52+
private val markwon_core= "io.noties.markwon:core:${Versions.markwon}"
53+
private val markwon_html= "io.noties.markwon:html:${Versions.markwon}"
54+
private val markwon_image= "io.noties.markwon:image:${Versions.markwon}"
55+
56+
57+
val appLibraries = arrayListOf<String>().apply {
58+
add(appcompat)
59+
add(coreKtx)
60+
add(material)
61+
add(constraintLayout)
62+
add(recyclerview)
63+
add(legacy)
64+
add(activity)
65+
add(navigationFragment)
66+
add(navigationUi)
67+
add(coroutinesCore)
68+
add(coroutinesAndroid)
69+
add(lifecycleViewmodel)
70+
add(lifecycleRuntime)
71+
add(lifecycleLivedata)
72+
add(lifecycleExtensions)
73+
add(lifecycleArch)
74+
add(gson)
75+
add(retrofit)
76+
add(retrofitGson)
77+
add(okhttpLogging)
78+
add(hilt_android)
79+
add(hilt_lifecycle)
80+
add(glide)
81+
add(glide_transformations)
82+
add(datastore)
83+
add(timber)
84+
add(markwon_core)
85+
add(markwon_html)
86+
add(markwon_image)
87+
}
88+
89+
val annotationLibraries = arrayListOf<String>().apply {
90+
add(glide_compiler)
91+
}
92+
93+
val kaptLibraries = arrayListOf<String>().apply {
94+
add(hilt_androidx)
95+
add(hilt_compiler)
96+
}
97+
98+
val androidTestLibraries = arrayListOf<String>().apply {
99+
add(extJUnit)
100+
add(espressoCore)
101+
}
102+
103+
val testLibraries = arrayListOf<String>().apply {
104+
add(junit)
105+
}
106+
}
107+
108+
//util functions for adding the different type dependencies from build.gradle file
109+
fun DependencyHandler.kapt(list: List<String>) {
110+
list.forEach { dependency ->
111+
add("kapt", dependency)
112+
}
113+
}
114+
115+
fun DependencyHandler.implementation(list: List<String>) {
116+
list.forEach { dependency ->
117+
add("implementation", dependency)
118+
}
119+
}
120+
121+
fun DependencyHandler.androidTestImplementation(list: List<String>) {
122+
list.forEach { dependency ->
123+
add("androidTestImplementation", dependency)
124+
}
125+
}
126+
127+
fun DependencyHandler.testImplementation(list: List<String>) {
128+
list.forEach { dependency ->
129+
add("testImplementation", dependency)
130+
}
131+
}

buildSrc/src/main/java/Versions.kt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
object Versions {
2+
3+
//app level
4+
const val gradle = "7.1.1"
5+
6+
const val kotlin = "1.6.21"
7+
const val hilt = "2.38.1"
8+
const val safeArgs = "2.3.5"
9+
10+
//libs
11+
val coreKtx = "1.6.0"
12+
13+
val appcompat = "1.3.1"
14+
val material = "1.5.0-alpha04"
15+
val constraintLayout = "2.1.1"
16+
val navigation = "2.3.5"
17+
val recyclerview = "1.2.1"
18+
val legacy = "1.0.0"
19+
val activity = "1.3.1"
20+
21+
val coroutinesCore = "1.5.0"
22+
val coroutinesAndroid = "1.5.0"
23+
24+
val lifecycleScope = "2.3.1"
25+
val lifecycleScope_extensions = "2.2.0"
26+
val lifecycleArch = "1.1.1"
27+
28+
val gson = "2.8.7"
29+
val retrofit = "2.9.0"
30+
val okhttpLogging = "4.5.0"
31+
32+
val hilt_android = "2.39"
33+
val hilt_compiler = "2.38.1"
34+
val hilt_lifecycle = "1.0.0-alpha03"
35+
val hilt_androidx = "1.0.0"
36+
37+
val glide = "4.12.0"
38+
val glide_compiler = "4.11.0"
39+
val glide_transformations = "3.0.1"
40+
41+
val markwon = "4.6.2"
42+
val timber = "5.0.1"
43+
val datastore = "1.0.0"
44+
45+
//test
46+
val junit = "4.12"
47+
val extJunit = "1.1.3"
48+
val espresso = "3.4.0"
49+
}

settings.gradle renamed to settings.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ dependencyResolutionManagement {
66
jcenter() // Warning: this repository is going to shut down soon
77
}
88
}
9+
10+
include(":app")
911
rootProject.name = "GitHoob"
10-
include ':app'

0 commit comments

Comments
 (0)