닉네임도항상고민
블로그이름이항상고민
닉네임도항상고민
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Profile (0)
    • Android (33)
      • Kotlin in android (8)
      • Java in android (0)
      • Dev env setting (9)
      • Meltdown(pokedex) (3)
      • Error (6)
      • Gradle (3)
      • Etc (4)
    • Google sample app (7)
      • nowinandroid (4)
      • sunflower (3)
    • 프로젝트 뚝딱거리기 (3)
    • Personal project (11)
      • Just One Thing (5)
      • 50Buttons (6)
    • Coding Practice (0)
      • Baekjoon (0)
      • Programmers (0)
    • Git (1)
    • Language (0)
      • Java (0)
      • Kotlin (0)
    • 기타 프로그램관련 (14)
    • 프로그램설치 및 설정 (2)
    • 공부 자료 리뷰 (책 서평, 인강리뷰) (13)
    • 일상과 헛소리 (26)
    • 알쓸신잡 (3)
    • ---이하 out of control--- (0)
    • Spring (3)
    • IOS (1)
    • Mysql (1)

공지사항

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

최근 댓글

인기 글

최근 글

태그

  • 대충 헛소리임
  • 글을 많이 써보자
  • 랜콘센트
  • 맥북프로 16
  • 커밋 수 1년에 200이하 맥북프로 금지
  • m1 롤 설정
  • Kotlin In Action
  • 벽면 랜포트 고장
  • 2021 macbook pro
  • 구글
  • 안스
  • 후기
  • KotlinInAction
  • 누가 코틀린 2주면 익힌다고 했는가.. 누구인가..?
  • 진지하게 받지마셈
  • Atomic Kotlin
  • 잠을 잘자고
  • 그것은 무엇인가
  • 맥북 롤 설정
  • 이펙티브코틀린
  • Apache License 2.0
  • Android
  • android codelab
  • 서평
  • m1pro
  • 아토믹코틀린
  • effective kotlin
  • 맥북프로 후기
  • mac jdk삭제
  • 박사 학위 논문이라고 쓰고 싶다 ㅅㅂ

티스토리

hELLO · Designed By 정상우.
닉네임도항상고민

블로그이름이항상고민

Android/Gradle

[Android Gradle] Groovy에서 kts파일로 마이그레이션 하기

2022. 10. 2. 13:24

 

별거 없는 작업이라 생각했는데 막상해보니..

(이슈들 검색하느라..) 매우 귀찮은 작업이었다..;;

 

꼭 바꿔야하는 상황아니면.. 그리 추천해주고 싶지는 않다.

그래도 공부하는셈치고 할 생각 있으시면 해보시길


 

// 공식문서링크

 

// 구글 빌드구성 - 개요

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/

 

[Android] Groovy에서 KTS로 마이그레이션

Android 프로젝트에서 gradle 빌드 구성 파일들을 Groovy에서 Kotlin DSL KTS로 이전해보자

yjyoon-dev.github.io

 

여기서 추가로 더 필요한 사항은 

구글링을 하거나, gradle공식문서를 봐야할듯하다.

 

 

요점은

- kts에서는 문자열에 작은따옴표가 없고, 쌍따옴표만 써야함.

찾아바꾸기 단축키로 빠르게 바꾸자. (컨트롤 + R : (해당 파일내))

- plugin에 id값 줄때 괄호쳐서 메서드 인수 넘기는 형식으로.

- 속성 값들을 띄워쓰기 해서 설정하는게 아니라,

대입 '=' 으로 바뀐다.

 

 

마이그레이션한 kts파일 전문을 아래 올려두었고,

테스트한 문법들이 있으므로, 알아서 분석할 수 있어야겠다.

 

// 기본 생성되는 Groovy파일내용과 분석을 보려면,

제가 이전에 작성했던 글에있으니, 

아래 링크 '본론'을 보시면 됩니다.

https://hhyeok1026.tistory.com/29

 

Android Studio에서 기본 생성되는 gradle파일에 대한 분석 (야매 주의!)

이글을 작성하는 시점의 개발환경 - Android Studio Chipmunk | 2021.2.1 Patch 1 - AGP (Android gradle plugin) : 7.2.1 - Gradle Version : 7.3.3 - Gradle 파일 타입 : Groovy 계속해서 개발환경 버전이 올라..

hhyeok1026.tistory.com

 

-------------------------------------------

 

// 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 파일을 이용한 공통변수 사용 및 버전 관리하기  (1) 2022.10.05
Android Studio에서 기본 생성되는 gradle파일에 대한 분석 (야매 주의!)  (0) 2022.10.01
    'Android/Gradle' 카테고리의 다른 글
    • gradle ext(extra), buildSrc, libs.versions.toml 파일을 이용한 공통변수 사용 및 버전 관리하기
    • Android Studio에서 기본 생성되는 gradle파일에 대한 분석 (야매 주의!)
    닉네임도항상고민
    닉네임도항상고민
    개발 블로그라기 보단, 개발' 일기' 블로그가 되어가고 있다. 단순히 검색해서 나오는 코드보다는 공부하면서 생기는 노하우를 전달하고 싶다. (도움 되는 글을 보셨다면 '하트'를 눌러주셔요♥ , 도움 안되는 잡글이 있다면, 댓글로 적어주시면 비공개 처리 합니다. )

    티스토리툴바