일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Android
- 안드로이드
- Livedata
- 테마
- Navigation Component
- 주석
- themes.xml
- nav_graph
- 취업
- kotlin
- electron
- imageview
- Jetpack Compose
- 면접
- Binding Adapter
- hilt
- Safe Args
- 개발자
- 일렉트론
- Gradle
- recyclerview
- BottomNavigationView
- asLiveData()
- android studio
- Datastore
- TypeConverter
- room
- ViewModel
- 스플래시
- fragment
- Today
- Total
나만 보는 일기장
Kotlin DSL & BuildSrc 사용해보자 본문
DSL(Domain Specific Language)이란 도메인 특화 언어로, 특정한 도메인에 사용하는데 특화된 컴퓨터 언어입니다.
기존의 Groovy 대신 Kotlin DSL을 사용하면 코드 하이라이팅, 자동완성, 문법 검사 등 IDE에서 제공하는 좋은 기능들을 사용할 수 있습니다. 하지만, 특정 경우에 Groovy보다 속도가 느리다는 단점이 있습니다.
Gradle 파일 변환
먼저 프로젝트의 루트 경로에 오른쪽 클릭 후 new->Directory를 눌러 buildSrc라는 이름으로 경로를 만들어줍니다. 그리고 buildSrc에서 오른쪽 클릭 후 new->File을 눌러 build.gradle.kts라는 이름으로 파일을 새로 생성해주고 내부에는 다음과 같이 적어줍니다.
plugins {
`kotlin-dsl`
}
repositories {
google()
mavenCentral()
}
그리고 Gradle Sync를 해 Kotlin DSL을 활성화할 수 있습니다.
이렇게 뭔가 주르륵 생기면 성공입니다.
그 이후, buildSrc에 아까같이 오른쪽 클릭 후 new->Directory를 누르면
위와 같이 자동완성이 뜨는데, src\main\kotlin을 선택해 만들어주고, 그 안에 Dependency.kt라는 파일을 만들어줍니다.
Dependency 내부에 각종 의존성들을 넣어놓고 관리하는데, 싱글톤으로 관리하기 위해 object로 만들어주었습니다.
Dependency.kt
object Dependency {
object Kotlin {
const val SDK = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21"
}
object AndroidX {
const val MATERIAL = "com.google.android.material:material:1.5.0"
const val CONSTRAINT_LAYOUT = "androidx.constraintlayout:constraintlayout:2.1.3"
const val APP_COMPAT = "androidx.appcompat:appcompat:1.3.1"
}
object KTX {
const val CORE = "androidx.core:core-ktx:1.7.0"
}
object Test {
const val JUNIT = "junit:junit:4.13.2"
const val ANDROID_JUNIT_RUNNER = "AndroidJUnitRunner"
}
object AndroidTest {
const val TEST_RUNNER = "androidx.test.ext:junit:1.1.3"
const val ESPRESSO_CORE = "androidx.test.espresso:espresso-core:3.4.0"
}
}
이제 나머지 build.gradle도 Kotlin DSL로 바꾸어주겠습니다.
왼쪽에서 오른쪽과 같이 *.gradle 파일들을 *.gradle.kts 형식으로 변경해줍니다. 그러면 이제 gradle 파일들이
코틀린 문법을 따르게 되기 때문에 그에 맞게 수정을 해주어야 합니다.
기본 생성된 프로젝트를 기준으로 코틀린 문법에 맞게 수정한 버전은 다음과 같습니다.
app 단위 gradle
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
}
android {
compileSdk = 32
defaultConfig {
applicationId = "com.patrick.dailypoem"
minSdk = 21
targetSdk = 32
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
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 {
dataBinding = true
}
}
dependencies {
implementation(Dependency.KTX.CORE)
implementation(Dependency.AndroidX.APP_COMPAT)
implementation(Dependency.AndroidX.MATERIAL)
implementation(Dependency.AndroidX.CONSTRAINT_LAYOUT)
testImplementation(Dependency.Test.JUNIT)
androidTestImplementation(Dependency.AndroidTest.TEST_RUNNER)
androidTestImplementation(Dependency.AndroidTest.ESPRESSO_CORE)
}
project 단위 gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "7.1.3" apply false
id("com.android.library") version "7.1.3" apply false
id("org.jetbrains.kotlin.android") version "1.6.20" apply false
}
tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
settings.gradle.kts
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "SecretDiary"
include(":app")
실행이 잘 되면 성공입니다.
안된다고요?
'개발 > Android' 카테고리의 다른 글
Guide to app architecture (0) | 2022.08.08 |
---|---|
AAC(Android Architecture Components) (0) | 2022.08.07 |
[Android Studio] 주석 스타일 간지나게 바꾸는 법 (0) | 2022.04.10 |
[ImageView] 이미지 비율은 맞추면서, 크기는 꽉 채우고 싶어요!! (4) | 2022.04.09 |