From 767fa44bc8bbc63073ffb8e3fa9d96665acd9400 Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 18:49:33 +0900 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20BuildSrc=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 13 +++++++++++++ buildSrc/build.gradle.kts | 8 ++++++++ buildSrc/settings.gradle.kts | 7 +++++++ gradle/libs.versions.toml | 6 +++++- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/settings.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index 5ea216f..44bc390 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,17 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + classpath(libs.tools.build.gradle) + classpath(libs.kotlin.gradle.plugin) + classpath(libs.compose.compiler.gradle.plugin) + } +} plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..02398e3 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `kotlin-dsl` +} + +repositories { + google() + mavenCentral() +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 0000000..fa8bc74 --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1,7 @@ +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 43ee769..2fbd8a2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.12.0-alpha06" +agp = "8.11.0" kotlin = "2.0.21" coreKtx = "1.10.1" junit = "4.13.2" @@ -12,6 +12,10 @@ appcompat = "1.6.1" material = "1.10.0" [libraries] +tools-build-gradle = { module = "com.android.tools.build:gradle", version.ref = "agp" } +kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +compose-compiler-gradle-plugin = { group = "org.jetbrains.kotlin", name = "compose-compiler-gradle-plugin", version.ref = "kotlin" } + androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } From ed823e06c9e2b04393684b395581166eac3c6558 Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 19:22:25 +0900 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20gradle=20Hilt=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 10 ++-- build.gradle.kts | 6 +-- buildSrc/build.gradle.kts | 7 +++ buildSrc/src/main/kotlin/DependencyExtend.kt | 50 ++++++++++++++++++++ data/build.gradle.kts | 8 +++- domain/build.gradle.kts | 8 +++- gradle/libs.versions.toml | 14 ++++++ 7 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 buildSrc/src/main/kotlin/DependencyExtend.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f4be208..d641ce7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,7 +1,9 @@ plugins { - alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) + id(libs.plugins.android.application.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.kotlin.compose.get().pluginId) + id(libs.plugins.ksp.get().pluginId) + id(libs.plugins.hilt.get().pluginId) } android { @@ -58,4 +60,6 @@ dependencies { androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) + + hiltDependency() } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 44bc390..d4e0060 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,11 +10,9 @@ buildscript { classpath(libs.tools.build.gradle) classpath(libs.kotlin.gradle.plugin) classpath(libs.compose.compiler.gradle.plugin) + classpath(libs.hilt.android.gradle.plugin) } } plugins { - alias(libs.plugins.android.application) apply false - alias(libs.plugins.kotlin.android) apply false - alias(libs.plugins.kotlin.compose) apply false - alias(libs.plugins.android.library) apply false + alias(libs.plugins.ksp) apply false } \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 02398e3..8d74a94 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -6,3 +6,10 @@ repositories { google() mavenCentral() } + +dependencies { + implementation(libs.tools.build.gradle) + implementation(libs.kotlin.gradle.plugin) + implementation(libs.compose.compiler.gradle.plugin) + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/DependencyExtend.kt b/buildSrc/src/main/kotlin/DependencyExtend.kt new file mode 100644 index 0000000..bebf910 --- /dev/null +++ b/buildSrc/src/main/kotlin/DependencyExtend.kt @@ -0,0 +1,50 @@ +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.Project +import org.gradle.kotlin.dsl.DependencyHandlerScope +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.the + +fun Project.hiltDependency() { + project.dependencies { + implementation(libs.hilt.android) + ksp(libs.hilt.compiler) + } +} + +private val Project.libs get() = the() + +private fun DependencyHandlerScope.implementation(vararg list: Any) { + list.forEach { add("implementation", it) } +} + +private fun DependencyHandlerScope.debugImplementation(vararg list: Any) { + list.forEach { add("debugImplementation", it) } +} + +private fun DependencyHandlerScope.kapt(vararg list: Any) { + list.forEach { add("kapt", it) } +} + +private fun DependencyHandlerScope.ksp(vararg list: Any) { + list.forEach { add("ksp", it) } +} + +private fun DependencyHandlerScope.testImplementation(vararg list: Any) { + list.forEach { add("testImplementation", it) } +} + +private fun DependencyHandlerScope.testRuntimeOnly(vararg list: Any) { + list.forEach { add("testRuntimeOnly", it) } +} + +private fun DependencyHandlerScope.androidTestImplementation(vararg list: Any) { + list.forEach { add("androidTestImplementation", it) } +} + +private fun DependencyHandlerScope.androidTestRuntimeOnly(vararg list: Any) { + list.forEach { add("androidTestRuntimeOnly", it) } +} + +private fun DependencyHandlerScope.annotationProcessor(vararg list: Any) { + list.forEach { add("annotationProcessor", it) } +} \ No newline at end of file diff --git a/data/build.gradle.kts b/data/build.gradle.kts index fcdb40f..3045fee 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,6 +1,8 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) + id(libs.plugins.android.library.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.ksp.get().pluginId) + id(libs.plugins.hilt.get().pluginId) } android { @@ -41,4 +43,6 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + + hiltDependency() } \ No newline at end of file diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index 6404bd2..6cfc50d 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -1,6 +1,8 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) + id(libs.plugins.android.library.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.ksp.get().pluginId) + id(libs.plugins.hilt.get().pluginId) } android { @@ -40,4 +42,6 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + + hiltDependency() } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2fbd8a2..cd02997 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,11 @@ activityCompose = "1.8.0" composeBom = "2024.09.00" appcompat = "1.6.1" material = "1.10.0" +ksp = "2.0.21-1.0.28" + +hilt = "2.56" +hilt-android-gradle-plugin = "2.51.1" +hilt-navigation = "1.2.0" [libraries] tools-build-gradle = { module = "com.android.tools.build:gradle", version.ref = "agp" } @@ -33,9 +38,18 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3" androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } +## hilt +hilt-android-gradle-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt-android-gradle-plugin" } +hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } +hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } +hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation" } + [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } android-library = { id = "com.android.library", version.ref = "agp" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt-android-gradle-plugin" } + From f17c1df3e02116429c68bd2b4c3529cf7e28d5af Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 19:28:41 +0900 Subject: [PATCH 03/11] =?UTF-8?q?feat:=20gradle=20javapoet=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildSrc/build.gradle.kts | 1 + gradle/libs.versions.toml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 8d74a94..6788613 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -8,6 +8,7 @@ repositories { } dependencies { + implementation(libs.javapoet) implementation(libs.tools.build.gradle) implementation(libs.kotlin.gradle.plugin) implementation(libs.compose.compiler.gradle.plugin) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cd02997..73cd311 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ agp = "8.11.0" kotlin = "2.0.21" coreKtx = "1.10.1" +javapoet = "1.13.0" junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" @@ -17,6 +18,7 @@ hilt-android-gradle-plugin = "2.51.1" hilt-navigation = "1.2.0" [libraries] +javapoet = { module = "com.squareup:javapoet", version.ref = "javapoet" } tools-build-gradle = { module = "com.android.tools.build:gradle", version.ref = "agp" } kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } compose-compiler-gradle-plugin = { group = "org.jetbrains.kotlin", name = "compose-compiler-gradle-plugin", version.ref = "kotlin" } From 83233ef701b760404292574099a8d0cafc9e3454 Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 19:28:53 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20hilt=20Application=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- app/src/main/java/com/keeply/kr/KeeplyApplication.kt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/keeply/kr/KeeplyApplication.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e25703..cebbd23 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,11 +9,11 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" + android:name=".KeeplyApplication" android:theme="@style/Theme.Keeply"> diff --git a/app/src/main/java/com/keeply/kr/KeeplyApplication.kt b/app/src/main/java/com/keeply/kr/KeeplyApplication.kt new file mode 100644 index 0000000..7a81b8b --- /dev/null +++ b/app/src/main/java/com/keeply/kr/KeeplyApplication.kt @@ -0,0 +1,7 @@ +package com.keeply.kr + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class KeeplyApplication: Application() \ No newline at end of file From 49eda806636f261b514a1d67d58ce5c9283e11ac Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 19:39:42 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat:=20gradle=20retrofit=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/build.gradle.kts | 1 + gradle/libs.versions.toml | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 3045fee..c2d28bc 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -43,6 +43,7 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + implementation(libs.bundles.retrofit) hiltDependency() } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 73cd311..c45eb57 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,14 +17,17 @@ hilt = "2.56" hilt-android-gradle-plugin = "2.51.1" hilt-navigation = "1.2.0" +retrofit = "2.11.0" +okhttp = "4.12.0" + [libraries] javapoet = { module = "com.squareup:javapoet", version.ref = "javapoet" } tools-build-gradle = { module = "com.android.tools.build:gradle", version.ref = "agp" } kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } compose-compiler-gradle-plugin = { group = "org.jetbrains.kotlin", name = "compose-compiler-gradle-plugin", version.ref = "kotlin" } -androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } @@ -46,6 +49,12 @@ hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation" } +## retrofit +retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } +retrofit-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" } +logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } +retrofit-kotlin-serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization", version.ref = "retrofit" } + [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } @@ -54,4 +63,11 @@ android-library = { id = "com.android.library", version.ref = "agp" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt-android-gradle-plugin" } +[bundles] +retrofit = [ + "retrofit", + "retrofit-converter-gson", + "logging-interceptor", + "retrofit-kotlin-serialization" +] From b9d0974cd3bdb584e47f545262461d3331043d24 Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 23:08:22 +0900 Subject: [PATCH 06/11] =?UTF-8?q?feat:=20gradle=20android=20config=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 16 +++++++-------- buildSrc/src/main/kotlin/BaseExtend.kt | 27 ++++++++++++++++++++++++++ buildSrc/src/main/kotlin/Version.kt | 10 ++++++++++ data/build.gradle.kts | 14 ++++++------- domain/build.gradle.kts | 14 ++++++------- 5 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 buildSrc/src/main/kotlin/BaseExtend.kt create mode 100644 buildSrc/src/main/kotlin/Version.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d641ce7..3630a1b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,6 @@ +import Versions.JAVA_VERSION +import Versions.JAVA_VERSION_STRING + plugins { id(libs.plugins.android.application.get().pluginId) id(libs.plugins.kotlin.android.get().pluginId) @@ -8,16 +11,13 @@ plugins { android { namespace = "com.keeply.kr" - compileSdk = 36 + + setConfigs() defaultConfig { applicationId = "com.keeply.kr" - minSdk = 28 - targetSdk = 36 versionCode = 1 versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -30,11 +30,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JAVA_VERSION + targetCompatibility = JAVA_VERSION } kotlinOptions { - jvmTarget = "11" + jvmTarget = JAVA_VERSION_STRING } buildFeatures { compose = true diff --git a/buildSrc/src/main/kotlin/BaseExtend.kt b/buildSrc/src/main/kotlin/BaseExtend.kt new file mode 100644 index 0000000..09c62ec --- /dev/null +++ b/buildSrc/src/main/kotlin/BaseExtend.kt @@ -0,0 +1,27 @@ +import Versions.COMPILE_SDK +import Versions.MIN_SDK +import Versions.TARGET_SDK +import com.android.build.gradle.BaseExtension +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension + +fun BaseAppModuleExtension.setConfigs() { + compileSdk = COMPILE_SDK + + defaultConfig { + minSdk = MIN_SDK + targetSdk = TARGET_SDK + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } +} + +fun BaseExtension.setConfigs() { + compileSdkVersion(Versions.COMPILE_SDK) + + defaultConfig { + minSdk = Versions.MIN_SDK + targetSdk = Versions.TARGET_SDK + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Version.kt b/buildSrc/src/main/kotlin/Version.kt new file mode 100644 index 0000000..2dcafae --- /dev/null +++ b/buildSrc/src/main/kotlin/Version.kt @@ -0,0 +1,10 @@ +import org.gradle.api.JavaVersion + +object Versions { + const val COMPILE_SDK = 35 + const val MIN_SDK = 26 + const val TARGET_SDK = 35 + + val JAVA_VERSION = JavaVersion.VERSION_17 + const val JAVA_VERSION_STRING = "17" +} \ No newline at end of file diff --git a/data/build.gradle.kts b/data/build.gradle.kts index c2d28bc..953cd8f 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,3 +1,6 @@ +import Versions.JAVA_VERSION +import Versions.JAVA_VERSION_STRING + plugins { id(libs.plugins.android.library.get().pluginId) id(libs.plugins.kotlin.android.get().pluginId) @@ -7,12 +10,9 @@ plugins { android { namespace = "com.keeply.data" - compileSdk = 36 + setConfigs() defaultConfig { - minSdk = 28 - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } @@ -26,11 +26,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JAVA_VERSION + targetCompatibility = JAVA_VERSION } kotlinOptions { - jvmTarget = "11" + jvmTarget = JAVA_VERSION_STRING } } diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index 6cfc50d..bcf80a9 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -1,3 +1,6 @@ +import Versions.JAVA_VERSION +import Versions.JAVA_VERSION_STRING + plugins { id(libs.plugins.android.library.get().pluginId) id(libs.plugins.kotlin.android.get().pluginId) @@ -7,12 +10,9 @@ plugins { android { namespace = "com.keeply.domain" - compileSdk = 36 + setConfigs() defaultConfig { - minSdk = 28 - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } @@ -26,11 +26,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JAVA_VERSION + targetCompatibility = JAVA_VERSION } kotlinOptions { - jvmTarget = "11" + jvmTarget = JAVA_VERSION_STRING } } From 6bcd7eb65ccfbf5c08a14ced5f2a8146dff01474 Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 23:09:54 +0900 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20gradle=20=EB=B3=91=EB=A0=AC=20?= =?UTF-8?q?=EC=BA=90=EC=8B=9C=20=EB=B9=8C=EB=93=9C=20=EC=98=B5=EC=85=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 20e2a01..eca5d3b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,7 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true + +org.gradle.parallel=true +org.gradle.caching=true \ No newline at end of file From d0ea3b6da19352087889ca2b6d976cde1561e9a0 Mon Sep 17 00:00:00 2001 From: cherry Date: Wed, 25 Jun 2025 23:23:18 +0900 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20gradle=20android=20buildTypes=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 10 +--------- .../main/java/com/keeply/kr/MainActivity.kt | 2 ++ buildSrc/src/main/kotlin/BaseExtend.kt | 17 +++++++++++++++++ buildSrc/src/main/kotlin/BuildTaskObject.kt | 19 +++++++++++++++++++ data/build.gradle.kts | 10 +--------- domain/build.gradle.kts | 10 +--------- 6 files changed, 41 insertions(+), 27 deletions(-) create mode 100644 buildSrc/src/main/kotlin/BuildTaskObject.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3630a1b..b051360 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,15 +20,7 @@ android { versionName = "1.0" } - buildTypes { - release { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - } + setBuildType() compileOptions { sourceCompatibility = JAVA_VERSION targetCompatibility = JAVA_VERSION diff --git a/app/src/main/java/com/keeply/kr/MainActivity.kt b/app/src/main/java/com/keeply/kr/MainActivity.kt index 85f5623..6a18b64 100644 --- a/app/src/main/java/com/keeply/kr/MainActivity.kt +++ b/app/src/main/java/com/keeply/kr/MainActivity.kt @@ -12,7 +12,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.keeply.kr.ui.theme.KeeplyTheme +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/buildSrc/src/main/kotlin/BaseExtend.kt b/buildSrc/src/main/kotlin/BaseExtend.kt index 09c62ec..dccf286 100644 --- a/buildSrc/src/main/kotlin/BaseExtend.kt +++ b/buildSrc/src/main/kotlin/BaseExtend.kt @@ -24,4 +24,21 @@ fun BaseExtension.setConfigs() { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } +} + +fun BaseExtension.setBuildType() { + buildTypes { + getByName(BuildTask.DEBUG) { + isDebuggable = BuildTaskDebug.isDebuggable + isMinifyEnabled = BuildTaskDebug.isMinifyEnabled + } + getByName(BuildTask.RELEASE) { + isDebuggable = BuildTaskRelease.isDebuggable + isMinifyEnabled = BuildTaskRelease.isMinifyEnabled + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/BuildTaskObject.kt b/buildSrc/src/main/kotlin/BuildTaskObject.kt new file mode 100644 index 0000000..dab2640 --- /dev/null +++ b/buildSrc/src/main/kotlin/BuildTaskObject.kt @@ -0,0 +1,19 @@ +interface BuildTask { + companion object { + const val DEBUG = "debug" + const val RELEASE = "release" + } + + val isMinifyEnabled: Boolean + val isDebuggable: Boolean +} + +object BuildTaskDebug : BuildTask { + override val isMinifyEnabled = false + override val isDebuggable = true +} + +object BuildTaskRelease : BuildTask { + override val isMinifyEnabled = false + override val isDebuggable = false +} diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 953cd8f..474ed61 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -16,15 +16,7 @@ android { consumerProguardFiles("consumer-rules.pro") } - buildTypes { - release { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - } + setBuildType() compileOptions { sourceCompatibility = JAVA_VERSION targetCompatibility = JAVA_VERSION diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index bcf80a9..4c8c1b6 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -16,15 +16,7 @@ android { consumerProguardFiles("consumer-rules.pro") } - buildTypes { - release { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - } + setBuildType() compileOptions { sourceCompatibility = JAVA_VERSION targetCompatibility = JAVA_VERSION From aea76c9981bd3d18460292ef2d6054a8913cbf92 Mon Sep 17 00:00:00 2001 From: cherry Date: Fri, 27 Jun 2025 00:57:56 +0900 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20data=20layer=20json,=20BuildConfi?= =?UTF-8?q?g=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 3 +++ buildSrc/src/main/kotlin/ProjectExtention.kt | 9 +++++++++ data/build.gradle.kts | 9 +++++++++ gradle/libs.versions.toml | 5 +++-- 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 buildSrc/src/main/kotlin/ProjectExtention.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b051360..aa628a9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,6 +21,9 @@ android { } setBuildType() + buildFeatures { + buildConfig = true + } compileOptions { sourceCompatibility = JAVA_VERSION targetCompatibility = JAVA_VERSION diff --git a/buildSrc/src/main/kotlin/ProjectExtention.kt b/buildSrc/src/main/kotlin/ProjectExtention.kt new file mode 100644 index 0000000..df339b0 --- /dev/null +++ b/buildSrc/src/main/kotlin/ProjectExtention.kt @@ -0,0 +1,9 @@ +import org.gradle.api.Project +import java.util.Properties + +fun Project.getBuildConfigProperty(propertyKey: String): String = + getLocalProperties("./local.properties").getProperty(propertyKey) + +fun Project.getLocalProperties(fileName: String) = Properties().apply { + load(project.rootProject.file(fileName).inputStream()) +} \ No newline at end of file diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 474ed61..95ca640 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -13,10 +13,18 @@ android { setConfigs() defaultConfig { + buildConfigField( + "String", + "BASE_URL", + getBuildConfigProperty("BASE_URL") + ) consumerProguardFiles("consumer-rules.pro") } setBuildType() + buildFeatures { + buildConfig = true + } compileOptions { sourceCompatibility = JAVA_VERSION targetCompatibility = JAVA_VERSION @@ -36,6 +44,7 @@ dependencies { androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) implementation(libs.bundles.retrofit) + implementation(libs.serialization.json) hiltDependency() } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c45eb57..5080959 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,6 +19,7 @@ hilt-navigation = "1.2.0" retrofit = "2.11.0" okhttp = "4.12.0" +serialization-json = "1.8.1" [libraries] javapoet = { module = "com.squareup:javapoet", version.ref = "javapoet" } @@ -51,10 +52,11 @@ hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.re ## retrofit retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } -retrofit-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" } logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } retrofit-kotlin-serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization", version.ref = "retrofit" } +serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "serialization-json" } + [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } @@ -66,7 +68,6 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt-android-grad [bundles] retrofit = [ "retrofit", - "retrofit-converter-gson", "logging-interceptor", "retrofit-kotlin-serialization" ] From b4e37db7e27db2a42dbeb46ba3ca5ab59d45f83d Mon Sep 17 00:00:00 2001 From: cherry Date: Fri, 27 Jun 2025 01:00:00 +0900 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20data=20layer=20apiModule=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/keeply/data/core/di/ApiModule.kt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 data/src/main/java/com/keeply/data/core/di/ApiModule.kt diff --git a/data/src/main/java/com/keeply/data/core/di/ApiModule.kt b/data/src/main/java/com/keeply/data/core/di/ApiModule.kt new file mode 100644 index 0000000..0e9ff14 --- /dev/null +++ b/data/src/main/java/com/keeply/data/core/di/ApiModule.kt @@ -0,0 +1,53 @@ +package com.keeply.data.core.di + +import com.keeply.data.BuildConfig +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import kotlinx.serialization.json.Json +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.kotlinx.serialization.asConverterFactory +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiModule { + + @Provides + @Singleton + fun provideJson(): Json = Json { + ignoreUnknownKeys = true + prettyPrint = true + } + + @Singleton + @Provides + fun provideHttpLoggingInterceptor() = HttpLoggingInterceptor().apply { + level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY + else HttpLoggingInterceptor.Level.NONE + } + + @Singleton + @Provides + fun provideOKHttpClient( + httpLoggingInterceptor: HttpLoggingInterceptor + ): OkHttpClient { + return OkHttpClient().newBuilder() + .addInterceptor(httpLoggingInterceptor) + .build() + } + + @Provides + @Singleton + fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit { + return Retrofit.Builder() + .baseUrl(BuildConfig.BASE_URL) + .addConverterFactory(Json.asConverterFactory("application/json".toMediaType())) + .client(okHttpClient) + .build() + } +} \ No newline at end of file From 6083bfe3495739ae810fbfde5e13a8d5de57272b Mon Sep 17 00:00:00 2001 From: cherry Date: Fri, 27 Jun 2025 01:07:14 +0900 Subject: [PATCH 11/11] =?UTF-8?q?feat:=20app=20layer=20orbit=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 ++ gradle/libs.versions.toml | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aa628a9..ae90e5b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,5 +56,7 @@ dependencies { debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) + implementation(libs.bundles.orbit) + hiltDependency() } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5080959..8d51836 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,6 +13,8 @@ appcompat = "1.6.1" material = "1.10.0" ksp = "2.0.21-1.0.28" +orbit = "10.0.0" + hilt = "2.56" hilt-android-gradle-plugin = "2.51.1" hilt-navigation = "1.2.0" @@ -44,6 +46,11 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3" androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } +## orbit +orbit-compose = { group = "org.orbit-mvi", name = "orbit-compose", version.ref = "orbit" } +orbit-core = { group = "org.orbit-mvi", name = "orbit-core", version.ref = "orbit" } +orbit-viewmodel = { group = "org.orbit-mvi", name = "orbit-viewmodel", version.ref = "orbit" } + ## hilt hilt-android-gradle-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt-android-gradle-plugin" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } @@ -72,3 +79,8 @@ retrofit = [ "retrofit-kotlin-serialization" ] +orbit = [ + "orbit-compose", + "orbit-core", + "orbit-viewmodel" +]