별거 없는 작업이라 생각했는데 막상해보니..
(이슈들 검색하느라..) 매우 귀찮은 작업이었다..;;
꼭 바꿔야하는 상황아니면.. 그리 추천해주고 싶지는 않다.
그래도 공부하는셈치고 할 생각 있으시면 해보시길
// 공식문서링크
// 구글 빌드구성 - 개요
https://developer.android.com/studio/build?hl=ko
// 구글 빌드구성 - Groovy에서 KTS로 빌드 구성 이전
https://developer.android.com/studio/build/migrate-to-kts?hl=ko
// 마이그레이션 하기
자동으로 되는게 없으므로,
손수 한땀한땀 해야함.
// 순서
0. 소스백업
1. 확장자 바꾸기
2. 문법 변경
3. 잘 되는지 확인
-------------------------------
0. 소스 백업
마이그레이션 하다가 프로젝트가 저세상으로 갈 수도 있으니,
항상 백업을 잘하자.
- vcs이용
깃 커밋 및 브랜치 이동하여 작업하기
또는
- zip로 백업
안드로이드 스튜디오에서
File -> Export -> Export to Zip file로 zip파일을 만들어서 백업하자.
그냥 프로젝트 폴더를 우클릭해서 zip으로 싸버리면 안되고(나중에 버그에 걸린다..)
이 방식으로 소스파일을 zip 빼내야 쓸모없는 빌드된 파일들이 포함되지 않는다.
( Shift 두번 눌러서, Export를 검색해서 찾아도 된다. )
-------------------------------
1. 확장자 바꾸기
아래의 gradle의 그루비 파일들을
- build.gradle (project level)
- build.gradle (module level)
- settings.gradle
각각 선택하여,
Shift + F6 이름바꾸기
-> 뒤에 '.kts'를 붙인다.
- build.gradle.kts (project level)
- build.gradle.kts (module level)
- settings.gradle.kts
로 변경하면 된다.
확장자 변경하고 나면
에디터 상단에서 메세지들이 계속 나오는데,
다음과 같은 이슈들이 있었다.
그리고 문법 변경시에 있었던 이슈도 여기 먼저 적어두겠다.
이슈1 )
code insight unavailable (script configuration wasn't received).
-> 문법 다 수정하고, 그래들 싱크가 성공되고나면 사라지므로 신경쓸 필요없음
Add to standalone scripts 버튼을 누르는건 아닌것 같음.
눌러봤는데, 따로 적용될 스크립트 파일이라는것 같다.
다시 되돌려지니까 눌러봐도 됨.
이슈2 )
settings.gradle.kts 에서 다음과 같은 메시지가 나옴.
-> Multiple script definitions are applicable for this script. KotlinSettingsScript is used
KotlinSettingsScript 적용되는거 맞는것 같으므로?, ignore로 무시했다.
이슈3 )
Unresolved reference: ext
ext블록이 인식되지 않음.
-> 구글문서에 문법이 잘못된듯
검색키워드 : Unresolved reference: ext when convert gradle to gradle.kts
이 이슈 해결이 필요하면 아래의 링크 참고하여 해결하면 됨.
https://stackoverflow.com/questions/45753733/ext-in-buildscript-can-not-be-recognised-by-gradle-kotlin-dsl
https://stackoverflow.com/questions/69323109/unresolved-reference-ext-when-convert-gradle-to-gradle-kts
------------------------------------
2. 문법 변경하기
구글 공식문서가 생각보다 별로였다...;
개요랑, 마이그레이션 하는부분 보면 되는데 좀 부족했고,
ext블록에 대해서는 잘못적혀있는듯하였다.
아래 블로그가 정리가 잘 되어있어서, 나는 문법에 대해서 따로 정리하지 않았다.
https://yjyoon-dev.github.io/android/2022/07/01/android-06/
여기서 추가로 더 필요한 사항은
구글링을 하거나, gradle공식문서를 봐야할듯하다.
요점은
- kts에서는 문자열에 작은따옴표가 없고, 쌍따옴표만 써야함.
찾아바꾸기 단축키로 빠르게 바꾸자. (컨트롤 + R : (해당 파일내))
- plugin에 id값 줄때 괄호쳐서 메서드 인수 넘기는 형식으로.
- 속성 값들을 띄워쓰기 해서 설정하는게 아니라,
대입 '=' 으로 바뀐다.
마이그레이션한 kts파일 전문을 아래 올려두었고,
테스트한 문법들이 있으므로, 알아서 분석할 수 있어야겠다.
// 기본 생성되는 Groovy파일내용과 분석을 보려면,
제가 이전에 작성했던 글에있으니,
아래 링크 '본론'을 보시면 됩니다.
https://hhyeok1026.tistory.com/29
-------------------------------------------
// build.gradle.kts (project level)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "7.2.1" apply false
id("com.android.library") version "7.2.1" apply false
id("org.jetbrains.kotlin.android") version "1.6.21" apply false
}
tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
/*
buildscript {
extra.apply{
set("sdkVersion", 28)
}
}
또는
extra["sdkVersion"] = 28
rootProject.extra["sdkVersion"]
?
가져올때는
extra["sdkVersion"] = 28 as Int
rootProject.extra["sdkVersion"] as Int
*/
extra["sdkVersion"] = 21
-------------------------------------------
// build.gradle.kts (module level)
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
compileSdk = 32
defaultConfig {
applicationId = "com.example.pokedex_meltdown"
//minSdk = 21
minSdk = rootProject.extra["sdkVersion"] as Int
targetSdk = 32
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
/*getByName("release") {
isMinifyEnabled = true // Enables code shrinking for the release build type.
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}*/
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.7.0")
implementation("androidx.appcompat:appcompat:1.5.1")
implementation("com.google.android.material:material:1.6.1")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
}
-------------------------------------------
// settings.gradle.kts
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "Pokedex-Meltdown"
include(":app")
------------------------------------
3. 잘 되는지 확인
그래들 싱크 & 빌드 & Run까지 잘되는지 확인하는게 좋겠다.
그리고 백업했던것을 다시 처리하자
'Android > Gradle' 카테고리의 다른 글
gradle ext(extra), buildSrc, libs.versions.toml 파일을 이용한 공통변수 사용 및 버전 관리하기 (0) | 2022.10.05 |
---|---|
Android Studio에서 기본 생성되는 gradle파일에 대한 분석 (야매 주의!) (0) | 2022.10.01 |