본문 바로가기

Android/Android Version

[Android] Android Koala 적용과 Gradle 8.5.2 버전 대응하기

728x90

최근 업무를 진행하면서, 라이브러리의 버전 문제 때문에 kotlin 버전을 올려야 했다.

kotlin 버전을 올리는 김에 프로젝트 환경을 전체적으로 업데이트시키자고 마음을 먹었고, 올해 초에 나와 많이 안정화된 android koala와 더불어 gradle을 올리고자 하였다.

 

해당 버전을 올리면서 많은 부분 수정된 것은 없지만, 그래도 버전을 올리면서 변경된 부분들에 대해 작성하고자 한다.


우선, 필자는 android Giraffe를 사용하고 있었는데 해당 버전은 22년 3월에 나온 버전이었다.

따라서 최신 버전으로 업데이트 하기 위해 android studio 공식 홈페이지에 방문해서 다운로드 하도록 한다.

 

다운로드를 한 후, mac 기준 설치 시 중복된 파일들을 물어보는 부분에 "모두 대치"를 클릭하여 최신 버전으로 변경해 주도록 한다.

그 후 안드로이드 스튜디오를 켜주면

 

살짝 UI가 변경됐음을 알 수 있다.

그런데 이번에 android studio 버전을 올린 김에 UI도 변경해주도록 한다.

해당 UI는 놀랍게도 필자가 사용하던 Giraffe 버전에서 변경된 부분인데, 뭔가 프로젝트 환경을 바꾼다는 것에 부담감이 있어서 변경하지 않았던 부분이다.

 

어디서 많이 본 UI 같다고 생각했는데, VS Code에서 볼 수 있는 UI와 굉장히 흡사하다고 생각이 들었다.

검색해서 다시 한번 확인해보니 진짜 똑같긴 하다.

 

우선, 안드로이드 스튜디오를 켰으면 좌측 상단에 있는 Android Studio -> Check for Updates를 클릭하도록 한다.

 

이와 같이 클릭하면 대응되는 gradle plugin을 어떻게 업데이트해야 하는지 가이드가 나오는데,

필자는 기존 7.3.0 버전의 gradle plugin을 사용하고 있었는데, 이 부분이 8.5.2 버전으로 올려야 한다고 나왔다.

 

공식 문서를 확인해보면 다음과 같다.

 

그리고 아래에 나와있는 것은

Jellyfish에 사용되는 AGP 최소 버전은 8.4라고 한다.

따라서 check for updates에서 나온 8.5.2 버전으로 업데이트하는 것이 바람직해 보인다.

 

업데이트를 실행하면 이와 같이 gradle 관련한 버전이 바뀌어 있는 것을 볼 수 있다.

plugins에서 볼 수 있는 버전은 8.5.2 이고 설치 된 gradle의 버전은 8.7으로 나온다면 정상적으로 적용이 된 것이다.

 

gradle 버전까지 맞춰주었으니 우선 빌드를 한번 해보도록 하자.

 

역시나, 한번에 빌드가 성공하지 않는다.

오류를 확인해보면 다음과 같이 나온다.

Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.

> 'compileDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.

  Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain

 

대충 보면 현재 사용 중인 java version에서 뭔가 문제가 발생한 것으로 예상된다.

 

공식 문서에서 확인하기 전, Giraffe에서는 없었고 Jellyfish 버전부터 Android Studio 안으로 들어온 Gemini를 사용해 보도록 하자.

 

우측 메뉴에 있는 Gemini를 누르면 다음과 같이 나온다.Preview 버전일 때는 무료로 사용할 수 있다고 하니 아주 편하게 쓸 수 있을 것 같다.

 

로그인을 해주고 위의 에러에 대해서 물어보도록 한다.

 

굉장히 잘 나오는 것 같다.

물론 영어로 대답해주지만, 한글로 번역해 달라고 하면 잘해준다.

 

간단하게 jvmTarget을 17로 올리기만 하면 되는 것 같다.

 

물론,

기대하지 않았지만 당연하다시피

 

위의 해결 방안을 사용했을 때 정상적으로 빌드가 되지 않는다.

 

그래서 참고에서 나와있는 url 기반으로 toolChain에 대한 문서를 참조해 보도록 하자.

문서를 확인해 보면, AGP 8.1.0-alpha09 버전 이상부터는 gradle toolchain을 사용할 수 있다고 나와있다.

그 이전 버전은 지금까지와 그대로 해도 상관없다고 하는데 gradle 버전을 8.5.2로 올렸으니 해당 부분을 적용해 보도록 한다.

 

문서를 보면 다음과 같이 나와있다.

With toolchains support, Gradle can autodetect local JDKs and install missing JDKs that Gradle requires for the build. Now Gradle itself can run on any JDK and still reuse the 
remote build cache feature
 for tasks that depend on a major JDK version.

 

toolchain을 사용하면 JDK를 알아서 감지하고, 빌드에 필요한 JDK 버전을 알아서 설치해준다고 한다.

뭐 간단하게 말해서, 한번 toolchain을 설정해두고 나면 대응되지 않는 JDK 버전을 사용하고 있다고 하더라도 알아서 설치해 주고 빌드할 수 있게 도와주는 아주 굉장한 녀석이라고 한다.

 

그럼 적용해 보자.

kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
    }
    // Or shorter:
    jvmToolchain(<MAJOR_JDK_VERSION>)
    // For example:
    jvmToolchain(17)
}

 

에러 로그에서 17 버전으로 올리라고 나왔었는데, example로 17 버전을 넣어주는 상냥함. 그대로 사용해 보도록 한다.

 

gradle에서 jdk version을 작성해 줬던 부분을 확인해 보자.

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = '1.8'
}

 

필자는 완전 옛날 버전을 그대로 사용하고 있었는데, 해당 코드 대신 다음과 같이 변경된 코드를 넣어주도록 한다.

kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
    jvmToolchain(17)
}

 

이렇게 수정을 한 후 빌드를 해보면, 아주 잘 돌아간다.

 

그러면 이제 위에 나왔던 설명을 그대로 한번 실행해 보도록 한다.

알아서 JDK 버전을 설치하고 실행해 준다고 하니, 

kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
    jvmToolchain(11)
}

 

이와 같이 수정해서 빌드를 해보자.

 

잘 된다.

너무 좋은 것 같은데, 설명에 보면 "원격 빌드 캐시 기능"을 사용할 수 있다고 한다.

캐싱하고 있는 게 있어서 버전을 바꿔도 되는 건가? 싶어서 이전 코드로 원복 시켜서 빌드해 보았다.

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = '1.8'
}

 

잘 된다.

이게 잘 되면 안 될 것 같은데 이상하다. 캐싱 때문이라면 Clean project를 수행하고, Invalidate Caches를 통해 다 날리고 빌드를 해봤는데 잘 된다.

뭔가 내부적으로 바뀐 것 같은데 이유는 모르겠으나, 최신 버전으로 돌려놓고 사용하도록 한다.


생각보다 너무 쉽게 버전 업데이트가 끝났다.

 

그러면 이번 업데이트 된 Koala에서의 특징을 한번 확인해 보자.

 

우선, Running Devices 창을 여러 개 표시할 수 있게 되었다.

 

애뮬레이터로 이렇게 표시가 가능하며 실 기기를 연결했을 때도 동일하게 추가로 보여줄 수 있다.

 

정말 이 기능을 보고 오! 싶었다.

바로 이전 글에 올렸다시피, targetSDK를 올리는 등 version에 대한 대응을 할 때 변경 되는 지점의 버전과 이전 버전 등을 확인해 가면서 작업을 해야 하는 경우가 있다.

 

targetSDK를 34로 올렸을 때 os 버전이 33이냐 34냐에 따라서 다르게 동작하는데, 이것을 확인하기 위해서 실 기기와 에뮬레이터를 각각 하나씩 다르게 연결해서 보고, 왔다 갔다 체크하기가 여간 귀찮은 일이 아니었다.

하지만 해당 기능을 사용하면 간단하게 한 화면에서 비교하면서 체크가 가능해진다는 것이니 아주 편리한 기능이 될 것으로 생각된다.

 

다음으로는 Gemini API 템플릿을 사용하는 부분인데,

 

이와 같이 Gemini API Starter라는 템플릿이 생겼다.

 

저것으로 프로젝트를 생성하려고 하면 API Key를 입력하라고 하는데, 위에서 확인했던 preview에서는 무료로 사용 가능하다는 말을 보고 공짜겠지 싶어서 키 생성을 들어가 보니,

 

뭔가 결제해야지만 사용할 수 있을 것처럼 작성해 뒀다.

하지만 그냥 키 만들기를 수행하면,

 

무료 버전으로 설정이 되면서 만들어진다.

 

해당 키를 등록해서 프로젝트를 만들고, Sample로 만들어진 코드를 기반으로 빌드를 수행해 보자.

 

버전을 올리라는데, 결국 뭔가 샘플로 바로 만들어진 것을 사용하는 것조차 결제를 해야 한다.

이것이 안 되는 것을 확인했으니, 공식 문서에서 나와있는 다음 스탭으로 import sample을 통해 다른 AI Sample을 만들어서 빌드를 해보자.

 

File > New > Import Sample을 클릭한 후 가이드에 나와있는 대로 검색해서 동일하게 만들어보도록 하자.

 

프로젝트를 새로 만들고, 빌드를 하면 다음과 같이 나온다.

 

API key를 입력하라고 나오고, ModelName이 아까 예제에서 봤던 그 녀석이기 때문에 사용하지 못할 것으로 보인다.

 

해당 기능은 그만 알아보도록 하자.

 

그리고 마지막으로,

Gemini가 들어온 Jellyfish 버전부터 나왔던 기능인지는 모르겠으나, 다음과 같이 자동 완성 기능을 제공해 준다.

해당 기능이 언제 들어왔는지 Android studio 출시 노트를 확인했는데 찾을 수 없었다.

 

지금까지 사용했던 선언된 변수나 함수의 리스트를 보여주는 부분이 아니라,

해당 위치에 맞춰서 해당 프로젝트에서 많이 선언했던 코드인지, AI로 판단해서 적당한 코드를 작성해 주는 것인지는 모르겠지만,

어쨌든 해당 위치에 적합한 코드를 미리 작성해주는 것으로 생각된다.

 

해당 위치에 진짜 필요한 기능을 미리 작성해 준다기보다는 가능성이 있는 녀석들을 보여주는 것이기 때문에 그렇게 쓸만하다고는 못 느끼던 찰나, 여러 개의 함수에 특정 조건을 추가한다는 등 반복 작업을 해야 할 때 해당 기능이 생각보다 쓸만하다고 느꼈다.

 

복사 붙여 넣기로 작업하는 게 아닌, 상황에 따라서 함수나 변수 이름이 조금씩 다른 케이스가 존재하는데 이때 그 다른 부분을 맞춰서 알아서 작성해 주었다.


이것으로 Android studio 버전과 Gradle 버전을 올리고 바뀐 부분에 대해서 알아보았다.

 

생각보다 코드는 바꿀 것이 거의 없었고, 알아서 다 해준다 라는 느낌을 많이 받았다.

예전에는 하나하나 버전을 찾아서 대응되는 것들을 설치하고 작성해서 사용해야 했는데, 이제는 알아서 설치까지 해주고 대응되는 버전이 어떤 것인지도 알아서 알려주니 정말 간편해졌다.

 

AI 기능들도 슬슬 들어오는 것으로 보이는데, 결제하지 않으면 사용하지 못하는 AI Template에 대해서는 나중에 결제할 때가 되면 확인해 볼 생각이다.

아직까지는 gemini보다 다른 AI Tool이 더 좋다고 느껴지는 관계로..

 

이쯤 되면, 내년에 다음 버전이 나오고 하면 정말 딸깍으로 다양한 버전들을 올리고 대응할 수 있을 것으로 기대된다.

앞으로는 버전 업데이트에 스트레스를 받지 않을 수 있는 환경이 되었으면 정말 좋겠다.

728x90