Sunflower 프로젝트 카피시작(Hilt, Compose 등등 기술 실전에서 연습하기 위함)
Gradle Groovy DSL 과 비교한 Gradle Kotlin DSL 의 장점(참고)
단점(참고)
import org.gradle.kotlin.dsl.`kotlin-dsl`
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
}
object Apps {
const val applicationId = "com.practice.sunflower"
const val compileSdk = 33
const val minSdk = 24
const val targetSdk = 33
const val versionCode = 1
const val versionName = "1.0.0"
const val kotlinCompilerExtensionVersion = "1.3.2"
const val jvmTarget = "1.8"
const val gradle = "3.5.2"
}
object Versions {
const val androidxCore = "1.8.0"
const val kotlin_bom = "1.8.0"
const val lifecycle = "2.3.1"
const val androidx_compose_activity = "1.5.1"
const val compose_bom = "2022.10.00"
const val hilt = "2.44"
const val hilt_navigation_compose = "1.0.0"
const val junit = "4.13.2"
const val test_junit = "1.1.5"
const val espresso = "3.5.1"
const val compose_junit = "1.0.0-alpha12"
}
object Libs {
const val androidx_core = "androidx.core:core-ktx:${Versions.androidxCore}"
const val kotlin_bom = "org.jetbrains.kotlin:kotlin-bom:${Versions.kotlin_bom}"
const val lifecycle_runtime = "androidx.lifecycle:lifecycle-runtime-ktx:${Versions.lifecycle}"
//hilt
const val hilt_android = "com.google.dagger:hilt-android:${Versions.hilt}"
const val hilt_compiler = "com.google.dagger:hilt-android-compiler:${Versions.hilt}"
const val hilt_plugin = "com.google.dagger:hilt-android-gradle-plugin:${Versions.hilt}"
//compose
const val compose_bom = "androidx.compose:compose-bom:${Versions.compose_bom}"
const val compose_activity = "androidx.activity:activity-compose:${Versions.androidx_compose_activity}"
const val compose_ui = "androidx.compose.ui:ui"
const val compose_ui_graphics = "androidx.compose.ui:ui-graphics"
const val compose_ui_tooling_preview = "androidx.compose.ui:ui-tooling-preview"
const val compose_material3 = "androidx.compose.material3:material3"
const val hilt_navigation_compose = "androidx.hilt:hilt-navigation-compose:${Versions.hilt_navigation_compose}"
}
object TestLibs {
const val junit = "junit:junit:${Versions.junit}"
}
object DebugLibs {
const val compose_tooling = "androidx.compose.ui:ui-tooling"
const val compose_test_manifest = "androidx.compose.ui:ui-test-manifest"
}
object AndroidTestLibs{
const val test_junit = "androidx.test.ext:junit:${Versions.test_junit}"
const val espresso = "androidx.test.espresso:espresso-core:${Versions.espresso}"
const val compose_junit = "androidx.compose.ui:ui-test-junit4:${Versions.compose_junit}"
}
Project build.gradle
plugins {
id("com.android.application") version "8.0.2" apply false
id("com.android.library") version "8.0.2" apply false
id("org.jetbrains.kotlin.android") version "1.7.20" apply false
id("com.google.dagger.hilt.android") version "2.44.2" apply false
}
App build.gradle
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
id("com.google.dagger.hilt.android")
}
android {
namespace = Apps.applicationId
compileSdk = Apps.compileSdk
defaultConfig {
applicationId = Apps.applicationId
minSdk = Apps.minSdk
targetSdk = Apps.targetSdk
versionCode = Apps.versionCode
versionName = Apps.versionName
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}
buildTypes {
getByName("release"){
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
compose = true
dataBinding = true
}
composeOptions {
kotlinCompilerExtensionVersion = Apps.kotlinCompilerExtensionVersion
}
packagingOptions.resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}")
// packagingOptions {
// resources {
// excludes += "/META-INF/{AL2.0,LGPL2.1}"
// }
// }
}
dependencies {
implementation(Libs.androidx_core)
implementation(platform(Libs.kotlin_bom))
implementation(Libs.lifecycle_runtime)
implementation(Libs.compose_activity)
implementation(platform(Libs.compose_bom))
implementation(Libs.compose_ui)
implementation(Libs.compose_ui_graphics)
implementation(Libs.compose_ui_tooling_preview)
implementation(Libs.compose_material3)
testImplementation(TestLibs.junit)
androidTestImplementation(AndroidTestLibs.test_junit)
androidTestImplementation(AndroidTestLibs.espresso)
androidTestImplementation(AndroidTestLibs.compose_junit)
debugImplementation(DebugLibs.compose_tooling)
debugImplementation(DebugLibs.compose_test_manifest)
implementation(Libs.hilt_android)
kapt(Libs.hilt_compiler)
implementation(Libs.hilt_navigation_compose)
}
settings.gradle
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "SunFlower"
include(":app")
여기까지는 문제 없이 진행
이 방법으로 수정시작
[versions]
#apps
gradle = "3.5.2"
#libs
androidxCore = "1.8.0"
kotlin_bom = "1.8.0"
lifecycle = "2.3.1"
androidx_compose_activity = "1.5.1"
compose_bom = "2022.10.00"
material = "1.9.0"
hilt = "2.44"
hilt_navigation_compose = "1.0.0"
junit = "4.13.2"
test_junit = "1.1.5"
espresso = "3.5.1"
compose_junit = "1.0.0-alpha12"
#plugin
application = "8.0.2"
library = "8.0.2"
jetbrain_android = "1.7.20"
[plugins]
application = {id = "com.android.application" , version.ref = "application"}
library = {id= "com.android.library", version.ref = "library"}
jetbrain_android = {id="org.jetbrains.kotlin.android", version.ref = "jetbrain_android" }
hilt = {id= "com.google.dagger.hilt.android", version.ref = "hilt"}
[libraries]
androidx_core = {module = "androidx.core:core-ktx", version.ref = "androidxCore"}
kotlin_bom = {group = "org.jetbrains.kotlin", name = "kotlin-bom", version.ref = "kotlin_bom" }
lifecycle_runtime = {module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle"}
material = {module = "com.google.android.material:material", version.ref = "material"}
#hilt
hilt_android = {module = "com.google.dagger:hilt-android", version.ref = "hilt"}
hilt_compiler = {module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt"}
hilt_plugin = {module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt"}
#compose
compose_bom = {group = "androidx.compose", name = "compose-bom", version.ref = "compose_bom"}
compose_activity = {module = "androidx.activity:activity-compose", version.ref = "androidx_compose_activity"}
compose_ui = {module = "androidx.compose.ui:ui"}
compose_ui_graphics = {module = "androidx.compose.ui:ui-graphics" }
compose_ui_tooling_preview = {module = "androidx.compose.ui:ui-tooling-preview" }
compose_material3 = {module = "androidx.compose.material3:material3" }
hilt_navigation_compose = {module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt_navigation_compose" }
#TestLibs
junit = {module = "junit:junit", version.ref = "junit"}
#DebugLibs
compose_tooling = {module = "androidx.compose.ui:ui-tooling" }
compose_test_manifest = {module = "androidx.compose.ui:ui-test-manifest" }
#AndroidTestLibs
test_junit = {module = "androidx.test.ext:junit", version.ref = "test_junit" }
espresso = {module = "androidx.test.espresso:espresso-core", version.ref = "espresso"}
compose_junit = {module = "androidx.compose.ui:ui-test-junit4", version.ref = "compose_junit"}
[bundles]
androidx-compose = ["compose_ui","compose_ui_graphics","compose_ui_tooling_preview","compose_material3"]
androidx-compose-debug-test = ["compose_tooling", "compose_test_manifest"]
Project build.gradle
@file:Suppress("DSL_SCOPE_VIOLATION")
plugins {
alias(libs.plugins.application) apply false
alias(libs.plugins.library) apply false
alias(libs.plugins.jetbrain.android) apply false
alias(libs.plugins.hilt) apply false
}
App build.gradle
@file:Suppress("DSL_SCOPE_VIOLATION")
plugins {
alias(libs.plugins.application)
alias(libs.plugins.jetbrain.android)
id("kotlin-kapt")
alias(libs.plugins.hilt)
}
android {
namespace = "com.practice.sunflower"
compileSdk = 33
defaultConfig {
applicationId = "com.practice.sunflower"
minSdk = 24
targetSdk = 33
versionCode = 1
versionName = "1.0.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}
buildTypes {
getByName("release"){
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
compose = true
dataBinding = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.3.2"
}
packagingOptions.resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}")
// packagingOptions {
// resources {
// excludes += "/META-INF/{AL2.0,LGPL2.1}"
// }
// }
}
dependencies {
implementation(libs.androidx.core)
implementation(platform(libs.kotlin.bom))
implementation(libs.lifecycle.runtime)
implementation(libs.compose.activity)
implementation(platform(libs.compose.bom))
implementation(libs.bundles.androidx.compose)
// implementation(libs.compose.ui)
// implementation(libs.compose.ui.graphics)
// implementation(libs.compose.ui.tooling.preview)
// implementation(libs.compose.material3)
implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.test.junit)
androidTestImplementation(libs.espresso)
androidTestImplementation(libs.compose.junit)
debugImplementation(libs.bundles.androidx.compose.debug.test)
// debugImplementation(libs.compose.tooling)
// debugImplementation(libs.compose.test.manifest)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.hilt.navigation.compose)
}
이 프로젝트에는 "androidx.compose:compose-bom" 와 "org.jetbrains.kotlin:kotlin-bom" 이 존재하는데, 이녀석들은 아직 정확한 이해가 안되어 있어서 추후 정리할 예정이다
사전 참고 자료
이후 추가 코드 작성에 따라서 변화 예정