gradle.kts 정리

creativeBin·2022년 12월 26일
0
post-thumbnail

💡기존 gradle 파일을 gradle.kts로 변경

  • 기존 (Gradle)
    • def 변수를 이용해서 모듈 버전 관리

    • 솔직히 단일 모듈로 진행했을 땐 불편한 점 없었음 😊

      plugins {
          id 'com.android.application'
          id 'org.jetbrains.kotlin.android'
      }
      
      android {
          compileSdk 32
      
          defaultConfig {
              applicationId "projectName"
              minSdk 21
              targetSdk 32
              versionCode 1
              versionName "1.0"
      
              testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
          }
      
          buildTypes {
              release {
                  minifyEnabled 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 {
              viewBinding true
              dataBinding true
          }
      }
      
      dependencies {
      
          def preference_version = "1.2.0"
          implementation "androidx.preference:preference-ktx:$preference_version"
      
          def core_ktx_version = '1.7.0'
          implementation "androidx.core:core-ktx:$core_ktx_version"
      
          implementation 'androidx.appcompat:appcompat:1.5.1'
      
          def material_version = '1.8.0-alpha02'
          implementation "com.google.android.material:material:$material_version"
      
          implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
      
          def nav_version = '2.5.3'
          implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
          implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
      
          def lottie_version = '3.0.7'
          implementation "com.airbnb.android:lottie:$lottie_version"
      
          def custom_toastui = '1.5.2'
          implementation "com.github.GrenderG:Toasty:$custom_toastui"
      
          testImplementation 'junit:junit:4.13.2'
      
          androidTestImplementation 'androidx.test.ext:junit:1.1.3'
          androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
      }

    • Kotlin DSL + BuildSrc

      gradle scripts output

      Untitled

      Untitled

    • buildSrc 모듈 생성 (buildSrc 디렉토리 생성)

      build.gradle.kts (buildSrc)

      plugins {
          `kotlin-dsl`
      }
      
      repositories {
          google()
          mavenCentral()
      }

      gradle 생성하면 디렉토리가 생김

      setting.gradle.kts

      pluginManagement {
          repositories {
              gradlePluginPortal()
              google()
              mavenCentral()
          }
      }
      dependencyResolutionManagement {
          repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
          repositories {
              google()
              mavenCentral()
              maven {
                  url = uri("https://jitpack.io")
              }
              flatDir { dirs("libs") }
          }
      }
      
      rootProject.name = "imchic"
      include(":app")
      include(":data")
      include(":gdal_app")

      build.gradle.kts (project)

      plugins {
          id ("com.android.application") version "7.2.0" apply false
          id ("com.android.library") version "7.2.0" apply false
          id ("org.jetbrains.kotlin.android") version "1.7.20" apply false
          id("com.google.dagger.hilt.android") version "2.44" apply false
      }
      tasks.register("clean", Delete::class) {
          delete(rootProject.buildDir)
      }

      build.gradle.kts (app)

      import java.util.Properties
      
      plugins {
          id("com.android.application")
          id("org.jetbrains.kotlin.android")
          id("kotlin-kapt")
          id("dagger.hilt.android.plugin")
      }
      
      android {
          compileSdk = 32
      
          // local.properties 가져오기
          val localProperties = Properties().apply {
              load(rootProject.file("local.properties").inputStream())
          }
      
          defaultConfig {
              applicationId = AppConfig.applicationId
              minSdk = AppConfig.minSdk
              targetSdk = AppConfig.targetSdk
              versionCode = AppConfig.versionCode
              versionName = AppConfig.versionName
      
              testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
      
              ndk {
                  abiFilters.add("armeabi-v7a")
                  abiFilters.add("arm64-v8a")
              }
          }
      
          signingConfigs {
              create("release") {
                  keyAlias = "key0"
                  keyPassword = ""
                  storePassword = ""
                  storeFile = file("../keystore/imchic.jks")
              }
          }
      
          buildTypes {
              getByName("debug") {
                  isMinifyEnabled = false
                  isDebuggable = true
                  isTestCoverageEnabled = true
                  applicationIdSuffix = ".debug"
                  buildConfigField("String", "api_url", localProperties.getProperty("api_url"))
                  buildConfigField("String", "BASE_URL", "\"${AppConfig.debugUrl}\"")
                  proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
              }
              getByName("release") {
                  signingConfig = signingConfigs.getByName("release")
                  isMinifyEnabled = true
                  isDebuggable = false
                  applicationIdSuffix = ".release"
                  buildConfigField("String", "BASE_URL", "\"${AppConfig.releaseUrl}\"")
                  proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
              }
          }
          compileOptions {
              sourceCompatibility = JavaVersion.VERSION_1_8
              targetCompatibility = JavaVersion.VERSION_1_8
          }
          kotlinOptions {
              jvmTarget = AppConfig.javaVersion
          }
          buildFeatures {
              dataBinding = true
          }
          lint {
              abortOnError = false
          } 
      }
      
      dependencies {
      
          // aar library add
          implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
      
          implementation(Libraries.KTX.CORE)
          implementation(Libraries.KTX.PREF)
      
          implementation(Libraries.Google.MATERIAL)
          implementation(Libraries.Google.HILT)
          kapt(Libraries.Google.HILT_COMPILER)
      
          implementation(Libraries.AndroidX.APP_COMPAT)
          implementation(Libraries.AndroidX.CONSTRAINT_LAYOUT)
          implementation(Libraries.AndroidX.NAVIGATION_FRAGMENT_KTX)
          implementation(Libraries.AndroidX.NAVIGATION_UI_KTX)
      
          implementation(Libraries.OPENSOURCE.OKHTTP)
          implementation(Libraries.OPENSOURCE.LOTTIE)
          implementation(Libraries.OPENSOURCE.CUSTOM_TOAST)
      
          implementation(Libraries.Test.JUNIT)
          implementation(Libraries.AndroidTest.ESPRESSO_CORE)
      }
      
      kapt {
          correctErrorTypes = true
      }

      Untitled

      Dependency.kt

      object AppConfig {
      
          const val compileSdk = 32
          const val applicationId = "com.example.imchic"
          const val buildToolsVersion = "30.0.2"
          const val minSdk = 24
          const val targetSdk = 32
          const val versionCode = 1
          const val versionName = "0.0.1"
      
          const val debugUrl = "http://dev.imchic.com/"
          const val releaseUrl = "http://release"
      
          const val javaVersion = "1.8"
      }
      object Versions {
      
          // AndroidX
          const val APP_COMPAT = "1.5.1"
          const val MATERIAL = "1.8.0-alpha02"
          const val CONSTRAINT_LAYOUT = "2.1.4"
          const val NAVIGATION = "2.5.3"
      
          // KTX
          const val CORE = "1.7.0"
      
          // HILT
          const val HILT = "2.44"
      
          // TEST
          const val JUNIT = "1.1.3"
      
          // Android Test
          const val ESPRESSO_CORE = "3.4.0"
      }
      
      object Libraries {
      
          object AndroidX {
              const val APP_COMPAT = "androidx.appcompat:appcompat:${Versions.APP_COMPAT}"
              const val CONSTRAINT_LAYOUT = "androidx.constraintlayout:constraintlayout:${Versions.CONSTRAINT_LAYOUT}"
              const val NAVIGATION_FRAGMENT_KTX = "androidx.navigation:navigation-fragment-ktx:${Versions.NAVIGATION}"
              const val NAVIGATION_UI_KTX = "androidx.navigation:navigation-ui-ktx:${Versions.NAVIGATION}"
          }
      
          object Google {
              const val MATERIAL = "com.google.android.material:material:${Versions.MATERIAL}"
              const val HILT = "com.google.dagger:hilt-android:${Versions.HILT}"
              const val HILT_COMPILER = "com.google.dagger:hilt-android-compiler:${Versions.HILT}"
          }
      
          object KTX {
              const val CORE = "androidx.core:core-ktx:${Versions.CORE}"
              const val PREF = "androidx.preference:preference-ktx:1.2.0"
          }
      
          object OPENSOURCE {
              const val OKHTTP = "com.squareup.okhttp3:okhttp:4.9.1"
              const val LOTTIE = "com.airbnb.android:lottie:3.0.7"
              const val CUSTOM_TOAST = "com.github.GrenderG:Toasty:1.5.2"
          }
      
          object Test {
              const val JUNIT = "androidx.test.ext:junit:${Versions.JUNIT}"
              const val ANDROID_JUNIT_RUNNER = "androidx.test.runner.AndroidJUnitRunner"
          }
      
          object AndroidTest {
              const val ESPRESSO_CORE = "androidx.test.espresso:espresso-core:${Versions.ESPRESSO_CORE}"
          }
      
      }

      참조

profile
언제나 항상 즐겁게 New vibes 😎

0개의 댓글