From d4aa0a60fe09e8c12fad805329b89de8792ec725 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Thu, 15 Jan 2026 23:47:53 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20build-logic=20=EB=B0=8F=20Conventio?= =?UTF-8?q?n=20Plugin=20=EB=8F=84=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gradle build-logic을 추가하여 멀티 모듈 관리 및 공통 빌드 설정을 위한 Convention Plugin 구조를 설계했습니다. * build-logic 설정 및 convention 모듈 추가 * `com.team.prezel.android.application`, `com.team.prezel.android.application.compose` 커스텀 플러그인 적용 * `app/build.gradle.kts` 내 중복되는 SDK 버전, 컴파일 옵션 등 공통 설정을 Convention Plugin으로 이관 * `settings.gradle.kts` 내 `includeBuild("build-logic")` 추가 및 레포지토리 관리 방식 최적화 * build-logic 내 병렬 빌드 및 캐싱 활성화를 위한 `gradle.properties` 추가 --- Prezel/app/build.gradle.kts | 33 +++++++----------------- Prezel/build-logic/convention/.gitignore | 1 + Prezel/build-logic/gradle.properties | 5 ++++ Prezel/build-logic/settings.gradle.kts | 27 +++++++++++++++++++ Prezel/settings.gradle.kts | 12 +++++++-- 5 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 Prezel/build-logic/convention/.gitignore create mode 100644 Prezel/build-logic/gradle.properties create mode 100644 Prezel/build-logic/settings.gradle.kts diff --git a/Prezel/app/build.gradle.kts b/Prezel/app/build.gradle.kts index a0b2ea1d..5cdf557a 100644 --- a/Prezel/app/build.gradle.kts +++ b/Prezel/app/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - alias(libs.plugins.android.application) + id("com.team.prezel.android.application") + id("com.team.prezel.android.application.compose") alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.ktlint) @@ -7,17 +8,11 @@ plugins { android { namespace = "com.team.prezel" - compileSdk { - version = release(36) - } defaultConfig { applicationId = "com.team.prezel" - minSdk = 28 - targetSdk = 36 versionCode = 1 versionName = "1.0" - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -30,35 +25,25 @@ android { ) } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 - } + buildFeatures { compose = true } } -kotlin { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21) - } -} - dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.activity.compose) + implementation(libs.androidx.activity.ktx) + + // compose implementation(platform(libs.androidx.compose.bom)) - implementation(libs.androidx.compose.ui) - implementation(libs.androidx.compose.ui.graphics) - implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.compose.material3) + implementation(libs.androidx.activity.compose) + + // test testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) - androidTestImplementation(libs.androidx.compose.ui.test.junit4) - debugImplementation(libs.androidx.compose.ui.tooling) - debugImplementation(libs.androidx.compose.ui.test.manifest) } diff --git a/Prezel/build-logic/convention/.gitignore b/Prezel/build-logic/convention/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/Prezel/build-logic/convention/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Prezel/build-logic/gradle.properties b/Prezel/build-logic/gradle.properties new file mode 100644 index 00000000..af80a5e4 --- /dev/null +++ b/Prezel/build-logic/gradle.properties @@ -0,0 +1,5 @@ +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configureondemand=true +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true diff --git a/Prezel/build-logic/settings.gradle.kts b/Prezel/build-logic/settings.gradle.kts new file mode 100644 index 00000000..0f461ae8 --- /dev/null +++ b/Prezel/build-logic/settings.gradle.kts @@ -0,0 +1,27 @@ +pluginManagement { + repositories { + gradlePluginPortal() + google() + } +} + +dependencyResolutionManagement { + repositories { + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } + mavenCentral() + } + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +rootProject.name = "build-logic" +include(":convention") diff --git a/Prezel/settings.gradle.kts b/Prezel/settings.gradle.kts index 8dc16fae..94d2f1fe 100644 --- a/Prezel/settings.gradle.kts +++ b/Prezel/settings.gradle.kts @@ -1,4 +1,5 @@ pluginManagement { + includeBuild("build-logic") repositories { google { content { @@ -11,10 +12,17 @@ pluginManagement { gradlePluginPortal() } } + dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS repositories { - google() + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } mavenCentral() } } From 9f5a9444cdcecb2eb5182a1e11688df6c35f0113 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Fri, 16 Jan 2026 02:02:04 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20convention=20plugin=20=EB=8F=84?= =?UTF-8?q?=EC=9E=85=20=EB=B0=8F=20=EB=B9=8C=EB=93=9C=20=EC=8B=9C=EC=8A=A4?= =?UTF-8?q?=ED=85=9C=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 프로젝트 전반의 일관된 빌드 설정을 위해 build-logic convention 플러그인을 도입하고 관련 의존성을 정리했습니다. * feat: `prezel` 네임스페이스 기반의 커스텀 convention 플러그인 추가 (Application, Library, Compose, Hilt 등) * feat: Kotlin 2.3 및 JVM 21 타겟 설정 반영 * feat: 공통 Android/Kotlin 설정을 위한 `configureKotlinAndroid`, `configureAndroidCompose` 함수 구현 * chore: `libs.versions.toml` 내 라이브러리 버전 업데이트 및 프로젝트 플러그인 정의 * chore: `app/build.gradle.kts` 내 중복 설정 제거 및 convention 플러그인 적용 * refactor: `settings.gradle.kts`에 `TYPESAFE_PROJECT_ACCESSORS` 활성화 --- Prezel/.editorconfig | 2 +- Prezel/app/build.gradle.kts | 41 +--------- Prezel/app/src/main/AndroidManifest.xml | 3 +- .../build-logic/convention/build.gradle.kts | 80 +++++++++++++++++++ .../buildlogic/convention/AndroidCompose.kt | 25 ++++++ .../buildlogic/convention/KotlinAndroid.kt | 67 ++++++++++++++++ .../convention/ProjectExtensions.kt | 9 +++ ...droidApplicationComposeConventionPlugin.kt | 20 +++++ .../AndroidApplicationConventionPlugin.kt | 23 ++++++ .../AndroidFeatureApiConventionPlugin.kt | 19 +++++ .../AndroidFeatureImplConventionPlugin.kt | 34 ++++++++ .../AndroidLibraryComposeConventionPlugin.kt | 20 +++++ .../plugin/AndroidLibraryConventionPlugin.kt | 39 +++++++++ .../convention/plugin/HiltConventionPlugin.kt | 38 +++++++++ .../plugin/JvmLibraryConventionPlugin.kt | 21 +++++ Prezel/build.gradle.kts | 2 + Prezel/gradle/libs.versions.toml | 45 ++++++++++- Prezel/settings.gradle.kts | 2 + 18 files changed, 447 insertions(+), 43 deletions(-) create mode 100644 Prezel/build-logic/convention/build.gradle.kts create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/AndroidCompose.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/ProjectExtensions.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureApiConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureImplConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/HiltConventionPlugin.kt create mode 100644 Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/JvmLibraryConventionPlugin.kt diff --git a/Prezel/.editorconfig b/Prezel/.editorconfig index e31becfc..457be1e9 100644 --- a/Prezel/.editorconfig +++ b/Prezel/.editorconfig @@ -14,4 +14,4 @@ ij_kotlin_allow_trailing_comma_on_call_site = true ktlint_function_naming_ignore_when_annotated_with = Composable ktlint_standard_multiline-expression-wrapping = disabled ktlint_standard_function-signature = enabled -ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 2 +ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 2 \ No newline at end of file diff --git a/Prezel/app/build.gradle.kts b/Prezel/app/build.gradle.kts index 5cdf557a..8b216b84 100644 --- a/Prezel/app/build.gradle.kts +++ b/Prezel/app/build.gradle.kts @@ -1,49 +1,14 @@ plugins { - id("com.team.prezel.android.application") - id("com.team.prezel.android.application.compose") - alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) - alias(libs.plugins.ktlint) + alias(libs.plugins.prezel.android.application) + alias(libs.plugins.prezel.android.application.compose) } android { namespace = "com.team.prezel" - - defaultConfig { - applicationId = "com.team.prezel" - versionCode = 1 - versionName = "1.0" - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro", - ) - } - } - - buildFeatures { - compose = true - } } dependencies { + implementation(libs.androidx.activity.ktx) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.activity.ktx) - - // compose - implementation(platform(libs.androidx.compose.bom)) - implementation(libs.androidx.compose.material3) - implementation(libs.androidx.activity.compose) - - // test - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.androidx.espresso.core) - androidTestImplementation(platform(libs.androidx.compose.bom)) } diff --git a/Prezel/app/src/main/AndroidManifest.xml b/Prezel/app/src/main/AndroidManifest.xml index 8703db2f..7162ca24 100644 --- a/Prezel/app/src/main/AndroidManifest.xml +++ b/Prezel/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + ) { + commonExtension.apply { + buildFeatures { + compose = true + } + + dependencies { + val bom = libs.findLibrary("androidx-compose-bom").get() + "implementation"(platform(bom)) + "implementation"(libs.findBundle("android-compose").get()) + "androidTestImplementation"(platform(bom)) + "implementation"(libs.findLibrary("androidx-compose-ui-tooling-preview").get()) + "debugImplementation"(libs.findLibrary("androidx-compose-ui-tooling").get()) + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt new file mode 100644 index 00000000..4df2f747 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt @@ -0,0 +1,67 @@ +package com.team.prezel.buildlogic.convention + +import com.android.build.api.dsl.CommonExtension +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion + +/** + * Configure base Kotlin with Android options + */ +internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) { + commonExtension.apply { + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + isCoreLibraryDesugaringEnabled = true + } + } + + extensions.configure { + compilerOptions.apply { + languageVersion.set(KotlinVersion.KOTLIN_2_3) + coreLibrariesVersion = "2.3.0" + jvmTarget.set(JvmTarget.JVM_21) + allWarningsAsErrors.set(false) + freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") + freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") + } + } + + dependencies { + "coreLibraryDesugaring"("com.android.tools:desugar_jdk_libs:2.0.3") + } +} + +/** + * Configure base Kotlin options for JVM (non-Android) + */ +internal fun Project.configureKotlinJvm() { + extensions.configure { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + } + + extensions.configure { + compilerOptions.apply { + languageVersion.set(KotlinVersion.KOTLIN_2_3) + coreLibrariesVersion = "2.3.0" + jvmTarget.set(JvmTarget.JVM_21) + allWarningsAsErrors.set(false) + freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") + freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/ProjectExtensions.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/ProjectExtensions.kt new file mode 100644 index 00000000..e2343036 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/ProjectExtensions.kt @@ -0,0 +1,9 @@ +package com.team.prezel.buildlogic.convention + +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 + get(): VersionCatalog = extensions.getByType().named("libs") diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt new file mode 100644 index 00000000..19dde359 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt @@ -0,0 +1,20 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.android.build.api.dsl.ApplicationExtension +import com.team.prezel.buildlogic.convention.configureAndroidCompose +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.getByType + +class AndroidApplicationComposeConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "com.android.application") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") + + val extension = extensions.getByType() + configureAndroidCompose(extension) + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationConventionPlugin.kt new file mode 100644 index 00000000..2e796f0f --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationConventionPlugin.kt @@ -0,0 +1,23 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.android.build.api.dsl.ApplicationExtension +import com.team.prezel.buildlogic.convention.configureKotlinAndroid +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure + +class AndroidApplicationConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "com.android.application") + apply(plugin = "org.jetbrains.kotlin.android") + + extensions.configure { + configureKotlinAndroid(this) + defaultConfig.targetSdk = 36 + testOptions.animationsDisabled = true + } + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureApiConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureApiConventionPlugin.kt new file mode 100644 index 00000000..8aefea0a --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureApiConventionPlugin.kt @@ -0,0 +1,19 @@ +package com.team.prezel.buildlogic.convention.plugin + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.dependencies + +class AndroidFeatureApiConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "prezel.android.library") + apply(plugin = "org.jetbrains.kotlin.plugin.serialization") + + dependencies { +// "api"(project(":core:navigation")) + } + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureImplConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureImplConventionPlugin.kt new file mode 100644 index 00000000..1ee1a460 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidFeatureImplConventionPlugin.kt @@ -0,0 +1,34 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.android.build.api.dsl.LibraryExtension +import com.team.prezel.buildlogic.convention.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies + +class AndroidFeatureImplConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "prezel.android.library") + apply(plugin = "prezel.hilt") + + extensions.configure { + testOptions.animationsDisabled = true + } + + dependencies { +// "implementation"(project(":core:ui")) +// "implementation"(project(":core:designsystem")) + + "implementation"(libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) + "implementation"(libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) + + "androidTestImplementation"( + libs.findLibrary("androidx.lifecycle.runtimeTesting").get(), + ) + } + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt new file mode 100644 index 00000000..d596cbc7 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt @@ -0,0 +1,20 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.android.build.api.dsl.LibraryExtension +import com.team.prezel.buildlogic.convention.configureAndroidCompose +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.getByType + +class AndroidLibraryComposeConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "com.android.library") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") + + val extension = extensions.getByType() + configureAndroidCompose(extension) + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryConventionPlugin.kt new file mode 100644 index 00000000..963e6b69 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryConventionPlugin.kt @@ -0,0 +1,39 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.android.build.api.dsl.LibraryExtension +import com.team.prezel.buildlogic.convention.configureKotlinAndroid +import com.team.prezel.buildlogic.convention.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies + +class AndroidLibraryConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "com.android.library") + apply(plugin = "org.jetbrains.kotlin.android") + + extensions.configure { + configureKotlinAndroid(this) + testOptions.targetSdk = 36 + lint.targetSdk = 36 + defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testOptions.animationsDisabled = true + resourcePrefix = + path + .split("""\W""".toRegex()) + .drop(1) + .distinct() + .joinToString(separator = "_") + .lowercase() + "_" + } + + dependencies { + "androidTestImplementation"(libs.findLibrary("kotlin.test").get()) + "testImplementation"(libs.findLibrary("kotlin.test").get()) + } + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/HiltConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/HiltConventionPlugin.kt new file mode 100644 index 00000000..890d6092 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/HiltConventionPlugin.kt @@ -0,0 +1,38 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.team.prezel.buildlogic.convention.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.dependencies + +class HiltConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply( + plugin = libs + .findPlugin("ksp") + .get() + .get() + .pluginId, + ) + + dependencies { + "ksp"(libs.findLibrary("hilt.compiler").get()) + } + + pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { + dependencies { + "implementation"(libs.findLibrary("hilt.core").get()) + } + } + + pluginManager.withPlugin("com.android.base") { + apply(plugin = "dagger.hilt.android.plugin") + dependencies { + "implementation"(libs.findLibrary("hilt.android").get()) + } + } + } + } +} diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/JvmLibraryConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/JvmLibraryConventionPlugin.kt new file mode 100644 index 00000000..c31144c6 --- /dev/null +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/JvmLibraryConventionPlugin.kt @@ -0,0 +1,21 @@ +package com.team.prezel.buildlogic.convention.plugin + +import com.team.prezel.buildlogic.convention.configureKotlinJvm +import com.team.prezel.buildlogic.convention.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.dependencies + +class JvmLibraryConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "org.jetbrains.kotlin.jvm") + + configureKotlinJvm() + dependencies { + "testImplementation"(libs.findLibrary("kotlin.test").get()) + } + } + } +} diff --git a/Prezel/build.gradle.kts b/Prezel/build.gradle.kts index f496cb87..71edc763 100644 --- a/Prezel/build.gradle.kts +++ b/Prezel/build.gradle.kts @@ -4,6 +4,8 @@ plugins { alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.ktlint) apply true alias(libs.plugins.detekt) apply true + alias(libs.plugins.hilt) apply false + alias(libs.plugins.ksp) apply false } subprojects { diff --git a/Prezel/gradle/libs.versions.toml b/Prezel/gradle/libs.versions.toml index 9ea415ec..8b7952c5 100644 --- a/Prezel/gradle/libs.versions.toml +++ b/Prezel/gradle/libs.versions.toml @@ -7,9 +7,13 @@ junitVersion = "1.3.0" espressoCore = "3.7.0" lifecycleRuntimeKtx = "2.10.0" activityCompose = "1.12.2" -composeBom = "2025.12.01" +androidxLifecycle = "2.10.0" +composeBom = "2026.01.00" ktlint = "14.0.1" detekt = "1.23.8" +ksp = "2.3.4" +activityKtx = "1.12.2" +hilt = "2.57.2" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -18,14 +22,29 @@ androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "j 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" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } +androidx-lifecycle-runtimeCompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } +androidx-lifecycle-runtimeTesting = { group = "androidx.lifecycle", name = "lifecycle-runtime-testing", version.ref = "androidxLifecycle" } +androidx-lifecycle-viewModelCompose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } -androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activityKtx" } +hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } +hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } +hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" } +hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hilt" } +kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlin" } + +# Dependencies of the included build-logic +android-gradleApiPlugin = { group = "com.android.tools.build", name = "gradle-api", version.ref = "agp" } +compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } +kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } +ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } +androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } @@ -33,3 +52,25 @@ kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } +hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } + +# Plugins defined by this project +prezel-android-application = { id = "prezel.android.application" } +prezel-android-application-compose = { id = "prezel.android.application.compose" } +prezel-android-library = { id = "prezel.android.library" } +prezel-android-library-compose = { id = "prezel.android.library.compose" } +prezel-android-feature-impl = { id = "prezel.android.feature.impl" } +prezel-android-feature-api = { id = "prezel.android.feature.api" } +prezel-hilt = { id = "prezel.hilt" } +prezel-jvm-library = { id = "prezel.jvm.library" } + +[bundles] +android-compose = [ + "androidx-compose-material3", + "androidx-activity-compose", + "androidx-compose-ui", + "androidx-lifecycle-runtimeCompose", + "androidx-lifecycle-viewModelCompose" +] diff --git a/Prezel/settings.gradle.kts b/Prezel/settings.gradle.kts index 94d2f1fe..a8f98851 100644 --- a/Prezel/settings.gradle.kts +++ b/Prezel/settings.gradle.kts @@ -28,4 +28,6 @@ dependencyResolutionManagement { } rootProject.name = "Prezel" + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") include(":app") From c9a8f151ecad46465529e9605d8e4e439eca4c0a Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:08:38 +0900 Subject: [PATCH 3/9] =?UTF-8?q?perf:=20Gradle=20=EB=B9=8C=EB=93=9C=20?= =?UTF-8?q?=EC=84=B1=EB=8A=A5=20=EC=B5=9C=EC=A0=81=ED=99=94=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gradle 빌드 속도 향상을 위해 병렬 처리 및 캐싱 관련 설정을 추가했습니다. * `org.gradle.parallel` 활성화 * `org.gradle.caching` 활성화 * `org.gradle.configureondemand` 활성화 * `org.gradle.configuration-cache` 및 병렬 옵션 활성화 --- Prezel/build-logic/gradle.properties | 1 - Prezel/gradle.properties | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Prezel/build-logic/gradle.properties b/Prezel/build-logic/gradle.properties index af80a5e4..933280d2 100644 --- a/Prezel/build-logic/gradle.properties +++ b/Prezel/build-logic/gradle.properties @@ -1,5 +1,4 @@ org.gradle.parallel=true org.gradle.caching=true -org.gradle.configureondemand=true org.gradle.configuration-cache=true org.gradle.configuration-cache.parallel=true diff --git a/Prezel/gradle.properties b/Prezel/gradle.properties index 132244e5..a48c8561 100644 --- a/Prezel/gradle.properties +++ b/Prezel/gradle.properties @@ -21,3 +21,7 @@ kotlin.code.style=official # 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 +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true From 3783ffd258041c2e936a0f39bc47a697b29d7fc4 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:12:18 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20build-logic=20=EB=82=B4=20Kotlin/An?= =?UTF-8?q?droid=20=EA=B3=B5=ED=86=B5=20=EC=84=A4=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * `KotlinAndroid.kt` 파일을 추가하여 Android 및 JVM 환경을 위한 Kotlin 공통 설정을 정의했습니다. * SDK 버전(compileSdk 36, minSdk 29) 및 Java 21/JVM 20 타겟 설정을 적용했습니다. * Kotlin 2.1 언어 버전 및 컴파일러 옵션(coroutines 실험적 API, data class copy visibility)을 설정했습니다. * `coreLibraryDesugaring` 의존성 참조 방식을 Version Catalog(`libs.findLibrary`) 사용으로 개선했습니다. --- .../buildlogic/convention/KotlinAndroid.kt | 2 +- .../team/prezel/buildlogic/KotlinAndroid.kt | 67 +++++++++++++++++++ Prezel/gradle/libs.versions.toml | 2 + 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt index 4df2f747..2f2564e9 100644 --- a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt @@ -41,7 +41,7 @@ internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, } dependencies { - "coreLibraryDesugaring"("com.android.tools:desugar_jdk_libs:2.0.3") + "coreLibraryDesugaring"(libs.findLibrary("desugar-jdk-libs").get()) } } diff --git a/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt b/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt new file mode 100644 index 00000000..e10a50d5 --- /dev/null +++ b/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt @@ -0,0 +1,67 @@ +package com.team.prezel.buildlogic + +import com.android.build.api.dsl.CommonExtension +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion + +/** + * Configure base Kotlin with Android options + */ +internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) { + commonExtension.apply { + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + isCoreLibraryDesugaringEnabled = true + } + } + + extensions.configure { + compilerOptions.apply { + languageVersion.set(KotlinVersion.KOTLIN_2_1) + coreLibrariesVersion = "2.3.0" + jvmTarget.set(JvmTarget.JVM_20) + allWarningsAsErrors.set(false) + freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") + freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") + } + } + + dependencies { + "coreLibraryDesugaring"("com.android.tools:desugar_jdk_libs:2.0.3") + } +} + +/** + * Configure base Kotlin options for JVM (non-Android) + */ +internal fun Project.configureKotlinJvm() { + extensions.configure { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + } + + extensions.configure { + compilerOptions.apply { + languageVersion.set(KotlinVersion.KOTLIN_2_1) + coreLibrariesVersion = "2.3.0" + jvmTarget.set(JvmTarget.JVM_20) + allWarningsAsErrors.set(false) + freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") + freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") + } + } +} diff --git a/Prezel/gradle/libs.versions.toml b/Prezel/gradle/libs.versions.toml index 8b7952c5..b2cbe46c 100644 --- a/Prezel/gradle/libs.versions.toml +++ b/Prezel/gradle/libs.versions.toml @@ -14,6 +14,7 @@ detekt = "1.23.8" ksp = "2.3.4" activityKtx = "1.12.2" hilt = "2.57.2" +desugar-jdk = "2.0.3" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -45,6 +46,7 @@ compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle- kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } +desugar-jdk-libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-jdk" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } From 4616d940e516cf56045a6dc4932c144d95c1ddce Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:12:40 +0900 Subject: [PATCH 5/9] =?UTF-8?q?build:=20Android=20Compose=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compose 활성화를 위한 build-logic 설정을 추가했습니다. * `buildFeatures.compose` 활성화 * `kotlinCompilerExtensionVersion` 설정 * Compose 기본 의존성(ui, tooling, test) 추가 --- .../team/prezel/buildlogic/AndroidCompose.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt diff --git a/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt b/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt new file mode 100644 index 00000000..19d51884 --- /dev/null +++ b/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt @@ -0,0 +1,26 @@ +package com.team.prezel.buildlogic + +import com.android.build.api.dsl.CommonExtension +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies + +/** + * Configure Compose-specific options + */ +internal fun Project.configureAndroidCompose(commonExtension: CommonExtension<*, *, *, *, *, *>) { + commonExtension.apply { + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.5.0" + } + + dependencies { + "implementation"("androidx.compose.ui:ui:1.5.0") + "implementation"("androidx.compose.ui:ui-tooling-preview:1.5.0") + "debugImplementation"("androidx.compose.ui:ui-tooling:1.5.0") + "androidTestImplementation"("androidx.compose.ui:ui-test-junit4:1.5.0") + } + } +} From 2edb1e593b6554b14ebe571d8e497df154c0ab43 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:13:10 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor:=20=EC=BB=A8=EB=B2=A4=EC=85=98=20?= =?UTF-8?q?=ED=94=8C=EB=9F=AC=EA=B7=B8=EC=9D=B8=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compose 컨벤션 플러그인에서 외부 플러그인을 직접 참조하던 방식을 내부 커스텀 플러그인 참조 방식으로 변경했습니다. * `AndroidApplicationComposeConventionPlugin`에서 `com.android.application` 대신 `prezel.android.application` 적용 * `AndroidLibraryComposeConventionPlugin`에서 `com.android.library` 대신 `prezel.android.library` 적용 --- .../plugin/AndroidApplicationComposeConventionPlugin.kt | 2 +- .../convention/plugin/AndroidLibraryComposeConventionPlugin.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt index 19dde359..4c79a9b2 100644 --- a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidApplicationComposeConventionPlugin.kt @@ -10,8 +10,8 @@ import org.gradle.kotlin.dsl.getByType class AndroidApplicationComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - apply(plugin = "com.android.application") apply(plugin = "org.jetbrains.kotlin.plugin.compose") + apply(plugin = "prezel.android.application") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt index d596cbc7..6d10f810 100644 --- a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/plugin/AndroidLibraryComposeConventionPlugin.kt @@ -10,8 +10,8 @@ import org.gradle.kotlin.dsl.getByType class AndroidLibraryComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - apply(plugin = "com.android.library") apply(plugin = "org.jetbrains.kotlin.plugin.compose") + apply(plugin = "prezel.android.library") val extension = extensions.getByType() configureAndroidCompose(extension) From 1b4f25788d4d43a2d559a527495b273e22a2f043 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:16:36 +0900 Subject: [PATCH 7/9] =?UTF-8?q?chore:=20EOF=20Line=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Prezel/.editorconfig | 2 +- Prezel/app/.gitignore | 2 +- Prezel/app/proguard-rules.pro | 2 +- Prezel/app/src/main/res/values/strings.xml | 2 +- Prezel/build-logic/convention/.gitignore | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Prezel/.editorconfig b/Prezel/.editorconfig index 457be1e9..e31becfc 100644 --- a/Prezel/.editorconfig +++ b/Prezel/.editorconfig @@ -14,4 +14,4 @@ ij_kotlin_allow_trailing_comma_on_call_site = true ktlint_function_naming_ignore_when_annotated_with = Composable ktlint_standard_multiline-expression-wrapping = disabled ktlint_standard_function-signature = enabled -ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 2 \ No newline at end of file +ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 2 diff --git a/Prezel/app/.gitignore b/Prezel/app/.gitignore index 42afabfd..796b96d1 100644 --- a/Prezel/app/.gitignore +++ b/Prezel/app/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build diff --git a/Prezel/app/proguard-rules.pro b/Prezel/app/proguard-rules.pro index 481bb434..f1b42451 100644 --- a/Prezel/app/proguard-rules.pro +++ b/Prezel/app/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile diff --git a/Prezel/app/src/main/res/values/strings.xml b/Prezel/app/src/main/res/values/strings.xml index 6e1d6d92..4dc1d7b9 100644 --- a/Prezel/app/src/main/res/values/strings.xml +++ b/Prezel/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ Prezel - \ No newline at end of file + diff --git a/Prezel/build-logic/convention/.gitignore b/Prezel/build-logic/convention/.gitignore index 42afabfd..796b96d1 100644 --- a/Prezel/build-logic/convention/.gitignore +++ b/Prezel/build-logic/convention/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build From 335326d2b66238bc95cbc26734987c0b22fb6109 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:27:53 +0900 Subject: [PATCH 8/9] =?UTF-8?q?build:=20build-logic=20=EA=B5=AC=EC=A1=B0?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20Kotlin=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * `build-logic` 내 불필요한 파일(`AndroidCompose.kt`, `KotlinAndroid.kt`)을 삭제하고 컨벤션 플러그인 구조를 정리했습니다. * `KotlinAndroid.kt` 내 `coreLibrariesVersion`을 하드코딩된 값에서 `libs.versions.toml`의 버전을 참조하도록 수정했습니다. * JVM 타겟 버전을 `JVM_20`에서 `JVM_21`로 상향 조정했습니다. * `libs.versions.toml`에서 중복된 `lifecycleRuntimeKtx` 버전을 `androidxLifecycle`로 통합 관리하도록 변경했습니다. * `gradle.properties` 내 중복 정의된 `org.gradle.parallel` 속성을 제거했습니다. --- .../buildlogic/convention/KotlinAndroid.kt | 4 +- .../team/prezel/buildlogic/AndroidCompose.kt | 26 ------- .../team/prezel/buildlogic/KotlinAndroid.kt | 67 ------------------- Prezel/gradle.properties | 3 +- Prezel/gradle/libs.versions.toml | 3 +- 5 files changed, 4 insertions(+), 99 deletions(-) delete mode 100644 Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt delete mode 100644 Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt index 2f2564e9..592ce1fc 100644 --- a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt @@ -32,7 +32,7 @@ internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, extensions.configure { compilerOptions.apply { languageVersion.set(KotlinVersion.KOTLIN_2_3) - coreLibrariesVersion = "2.3.0" + coreLibrariesVersion = libs.findVersion("kotlin").get().toString() jvmTarget.set(JvmTarget.JVM_21) allWarningsAsErrors.set(false) freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") @@ -57,7 +57,7 @@ internal fun Project.configureKotlinJvm() { extensions.configure { compilerOptions.apply { languageVersion.set(KotlinVersion.KOTLIN_2_3) - coreLibrariesVersion = "2.3.0" + coreLibrariesVersion = libs.findVersion("kotlin").get().toString() jvmTarget.set(JvmTarget.JVM_21) allWarningsAsErrors.set(false) freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") diff --git a/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt b/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt deleted file mode 100644 index 19d51884..00000000 --- a/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/AndroidCompose.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.team.prezel.buildlogic - -import com.android.build.api.dsl.CommonExtension -import org.gradle.api.Project -import org.gradle.kotlin.dsl.dependencies - -/** - * Configure Compose-specific options - */ -internal fun Project.configureAndroidCompose(commonExtension: CommonExtension<*, *, *, *, *, *>) { - commonExtension.apply { - buildFeatures { - compose = true - } - composeOptions { - kotlinCompilerExtensionVersion = "1.5.0" - } - - dependencies { - "implementation"("androidx.compose.ui:ui:1.5.0") - "implementation"("androidx.compose.ui:ui-tooling-preview:1.5.0") - "debugImplementation"("androidx.compose.ui:ui-tooling:1.5.0") - "androidTestImplementation"("androidx.compose.ui:ui-test-junit4:1.5.0") - } - } -} diff --git a/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt b/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt deleted file mode 100644 index e10a50d5..00000000 --- a/Prezel/build-logic/src/main/java/com/team/prezel/buildlogic/KotlinAndroid.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.team.prezel.buildlogic - -import com.android.build.api.dsl.CommonExtension -import org.gradle.api.JavaVersion -import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginExtension -import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.dependencies -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion - -/** - * Configure base Kotlin with Android options - */ -internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) { - commonExtension.apply { - compileSdk = 36 - - defaultConfig { - minSdk = 29 - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 - isCoreLibraryDesugaringEnabled = true - } - } - - extensions.configure { - compilerOptions.apply { - languageVersion.set(KotlinVersion.KOTLIN_2_1) - coreLibrariesVersion = "2.3.0" - jvmTarget.set(JvmTarget.JVM_20) - allWarningsAsErrors.set(false) - freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") - freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") - } - } - - dependencies { - "coreLibraryDesugaring"("com.android.tools:desugar_jdk_libs:2.0.3") - } -} - -/** - * Configure base Kotlin options for JVM (non-Android) - */ -internal fun Project.configureKotlinJvm() { - extensions.configure { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 - } - - extensions.configure { - compilerOptions.apply { - languageVersion.set(KotlinVersion.KOTLIN_2_1) - coreLibrariesVersion = "2.3.0" - jvmTarget.set(JvmTarget.JVM_20) - allWarningsAsErrors.set(false) - freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") - freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") - } - } -} diff --git a/Prezel/gradle.properties b/Prezel/gradle.properties index a48c8561..4e5908e0 100644 --- a/Prezel/gradle.properties +++ b/Prezel/gradle.properties @@ -10,7 +10,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. For more details, visit # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects -# org.gradle.parallel=true +org.gradle.parallel=true # AndroidX package structure to make it clearer which packages are bundled with the # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn @@ -21,7 +21,6 @@ kotlin.code.style=official # 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 -org.gradle.parallel=true org.gradle.caching=true org.gradle.configuration-cache=true org.gradle.configuration-cache.parallel=true diff --git a/Prezel/gradle/libs.versions.toml b/Prezel/gradle/libs.versions.toml index b2cbe46c..f5b164fe 100644 --- a/Prezel/gradle/libs.versions.toml +++ b/Prezel/gradle/libs.versions.toml @@ -5,7 +5,6 @@ coreKtx = "1.17.0" junit = "4.13.2" junitVersion = "1.3.0" espressoCore = "3.7.0" -lifecycleRuntimeKtx = "2.10.0" activityCompose = "1.12.2" androidxLifecycle = "2.10.0" composeBom = "2026.01.00" @@ -21,7 +20,7 @@ androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = junit = { group = "junit", name = "junit", version.ref = "junit" } 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" } +androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "androidxLifecycle" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-lifecycle-runtimeCompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } androidx-lifecycle-runtimeTesting = { group = "androidx.lifecycle", name = "lifecycle-runtime-testing", version.ref = "androidxLifecycle" } From aa0ef8814f2cab1856659be8c0963e88f66a8594 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Mon, 19 Jan 2026 01:35:35 +0900 Subject: [PATCH 9/9] =?UTF-8?q?chore:=20libs.versions.toml=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B2=88=EB=93=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * `desugar-jdk`의 변수 및 라이브러리 명칭을 camelCase(`desugarJdk`)로 변경했습니다. * `androidx-compose-ui-tooling-preview` 라이브러리를 기본 compose 번들에 추가했습니다. --- .../com/team/prezel/buildlogic/convention/KotlinAndroid.kt | 2 +- Prezel/gradle/libs.versions.toml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt index 592ce1fc..661b4caa 100644 --- a/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt +++ b/Prezel/build-logic/convention/src/main/java/com/team/prezel/buildlogic/convention/KotlinAndroid.kt @@ -41,7 +41,7 @@ internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, } dependencies { - "coreLibraryDesugaring"(libs.findLibrary("desugar-jdk-libs").get()) + "coreLibraryDesugaring"(libs.findLibrary("desugarJdk-libs").get()) } } diff --git a/Prezel/gradle/libs.versions.toml b/Prezel/gradle/libs.versions.toml index f5b164fe..3fceabbc 100644 --- a/Prezel/gradle/libs.versions.toml +++ b/Prezel/gradle/libs.versions.toml @@ -13,7 +13,7 @@ detekt = "1.23.8" ksp = "2.3.4" activityKtx = "1.12.2" hilt = "2.57.2" -desugar-jdk = "2.0.3" +desugarJdk = "2.0.3" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -45,7 +45,7 @@ compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle- kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } -desugar-jdk-libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-jdk" } +desugarJdk-libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugarJdk" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } @@ -72,6 +72,7 @@ android-compose = [ "androidx-compose-material3", "androidx-activity-compose", "androidx-compose-ui", + "androidx-compose-ui-tooling-preview", "androidx-lifecycle-runtimeCompose", "androidx-lifecycle-viewModelCompose" ]