본문 바로가기
프로젝트/DIP 스위치 계산기

JDK 25 경고에 Gradle을 21로 고정했다가 3분 만에 AGP 9로 올렸다

by iwbap 2026. 10. 20.
728x90
반응형

DIP 스위치 계산기 앱을 Android Studio로 열자 Java 25와 Gradle 8.11.1이 호환되지 않는다는 경고가 나왔다. 처음에는 Gradle 실행 JDK를 21로 고정했지만, 곧 JDK 25·Gradle 9.1.0·AGP 9.0.1로 빌드 환경을 변경했다. 이 과정에서 R8과 Play Console 경고 대응 설정도 정리했다.

JDK 25 경고에 Gradle 실행 JDK를 21로 고정했다가 3분 만에 Gradle 9.1.0, AGP 9.0.1, AGP 내장 Kotlin으로 Android 빌드 툴체인을 올린 흐름을 요약한 대표 이미지
JDK 하나를 올리니 Gradle과 AGP가 따라 올라갔다

Java 25 경고에 Gradle 실행 JDK부터 고정했다

IDE에 표시된 메시지는 Java 25 and Gradle 8.11.1 are incompatible였다. PC의 JDK가 25라는 점은 이 메시지와 문서로 짐작한 것이다.

프로젝트는 Gradle 8.11.1과 AGP 8.10.1을 사용하고 있었다. 공식 호환표에 따르면 Java 25에서 Gradle을 실행하려면 9.1.0 이상이 필요했다.

14시 27분 29초에는 Gradle 데몬의 JDK를 21로 지정하는 파일을 추가했다. AGP는 그대로 두고 실행 환경만 맞추려 했다.

# Gradle Daemon JVM criteria: run Gradle 8.11.1 with a compatible Java runtime.
# Java 25 requires Gradle 9.1+; do not change Gradle/AGP solely for an IDE JVM mismatch.
# On Android Studio, choose JDK 21 for Gradle when prompted.
toolchainVersion=21

11초 뒤에는 GitHub Actions의 JDK를 17에서 21로 변경했다. 14시 28분 01초에는 Gradle Wrapper만 9.x로 올리지 말라는 주의사항을 빌드 문서에 추가했다.

3분도 안 돼 JDK 25와 AGP 9로 방향을 바꿨다

그 문서를 쓴 지 3분도 안 돼 방향을 바꿨다. 14시 30분 43초부터 31분 00초까지 17초 동안 같은 메시지의 커밋 7개가 찍혔다. 메시지는 "JDK 25 / AGP 9로 이전하고 R8 리소스 축소 켜기"였다.

2026년 10월 19일 14시 27분 데몬 JDK 21 고정과 CI JDK 21 변경, 14시 28분 Gradle만 올리지 말라는 문서, 14시 30~31분 JDK 25·AGP 9 이전 커밋 7개, 14시 32분 컷아웃 설정과 keep 규칙 축소, 14시 33분 문서 갱신으로 이어진 커밋 타임라인 개념 도식

Gradle만 올리지 말라고 적은 이유는 AGP 8.10.1과의 호환 검토가 필요해서였다. 반대로 AGP 9.0의 최소 Gradle 버전은 9.1.0이라, 이번에는 JDK·Gradle·AGP를 한 묶음으로 올렸다.

Gradle을 JDK 25로 실행하려면 Gradle 9.1.0 이상이 필요하고, 그 버전에 맞춰 AGP 9.0.1로 올리면 Kotlin 컴파일이 내장돼 kotlin-android 플러그인을 제거하게 되는 연쇄를 보여 주며, 앱 바이트코드는 Java 11 그대로임을 표시한 개념 도식

항목 이전 이후
Gradle Wrapper 8.11.1 9.1.0
AGP 8.10.1 9.0.1
Gradle 데몬 JDK · CI JDK 21 25
core-ktx / activity-compose 1.16.0 / 1.10.1 1.17.0 / 1.12.4
Google 모바일 광고 SDK 25.4.0 25.5.0

데몬 설정의 toolchainVersion도 21에서 25로 변경했다. 이 값은 Gradle 실행 JDK를 정하는 것이며, 앱의 Java 11 바이트코드 타깃과는 별개다.

AGP 9 내장 Kotlin으로 플러그인 선언을 정리했다

AGP 9.0은 Kotlin 지원을 기본으로 내장한다. 기존 org.jetbrains.kotlin.android 플러그인은 새 DSL과 호환되지 않아 별도 적용을 제거했다.

버전 카탈로그와 루트·앱 모듈 빌드 파일에서 해당 플러그인 선언을 삭제했다. 앱 모듈의 Kotlin 컴파일 옵션 블록도 제거했지만 Java의 VERSION_11 설정은 유지했다.

// app/build.gradle.kts (변경 후)
plugins {
    alias(libs.plugins.android.application)
    // alias(libs.plugins.jetbrains.kotlin.android)  ← AGP 9 내장 Kotlin으로 대체
    alias(libs.plugins.compose.compiler)
}

이전 AGP 환경의 경고를 숨기던 android.suppressUnsupportedCompileSdk=35도 삭제했다.

R8 리소스 축소를 켜고 ProGuard 규칙을 줄였다

릴리스의 isMinifyEnabled = true는 유지하고 isShrinkResources = true를 추가했다.

ProGuard 파일에서는 앱 구성 요소와 라이브러리를 광범위하게 보존하던 규칙을 제거했다. 기존 내용 33줄을 삭제하고 주석과 진단용 속성 지시문을 남겼다.

# Avoid blanket -keep rules: AGP and AndroidX / Google SDK dependencies supply
# the consumer rules necessary for Android components and SDK reflection.
# Preserve line mapping for Play Console retrace / crash diagnostics.
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile

판단 근거는 주석에 적은 그대로다. 필요한 keep 규칙은 AGP와 각 라이브러리가 소비자 규칙으로 함께 제공한다. 크래시 스택을 복원할 줄 번호 정보만 남겼다.

앱 패키지 public 멤버, 4대 컴포넌트, okhttp3·okio 전체를 살리던 이전 ProGuard 규칙과, 줄 번호 보존 규칙 2줄만 남기고 나머지를 라이브러리 소비자 규칙에 맡긴 이후 규칙을 비교하고, 리소스 축소 설정과 CI 작업에 릴리스 빌드 태스크를 추가했다는 점(실행 결과 미확인)을 덧붙인 개념 도식

GitHub Actions에 assembleRelease와 bundleRelease를 추가했지만 성공 실행 기록은 확인되지 않았다.

Android 15 컷아웃과 Play Console 경고도 정리했다

Play Console에는 setStatusBarColor, setNavigationBarColor, SHORT_EDGES, NEVER 관련 경고가 있었다. Android 15 이상에서 targetSdk 35 이상 앱에 edge-to-edge가 기본 적용되는 정책과 관련된 내용이었다.

앱 테마의 windowLayoutInDisplayCutoutMode를 always로 지정했다. 기존 enableEdgeToEdge()와 Scaffold의 안쪽 여백 처리는 그대로 두었다.

일부 경고는 광고 SDK나 Play Core 같은 의존성에서 왔을 수 있다. 그래서 이 설정만으로 경고가 다 사라진다고 보지 않았다.

기존 출시 버전 15(1.5.1)의 경고는 소스 변경만으로 달라지지 않는다. 새로 서명한 AAB를 Play Console에 업로드한 뒤 진단 결과를 다시 확인해야 한다.

빌드 성공과 실제 동작은 다음 검증으로 남겼다

  • JDK 25 환경에서 디버그 빌드와 단위 테스트 실행
  • R8 적용 릴리스 빌드와 AAB 생성 확인
  • Android 15·16 에뮬레이터의 컷아웃과 화면 여백 점검
  • 광고·앱 업데이트와 블루투스 2기기 대국 검증
  • 서명·versionCode 확인 후 Play Console 진단 재점검

JDK 경고 하나가 Gradle과 AGP까지 이어졌다. 이번 커밋은 설정 변경까지이고, 위 체크리스트는 아직 비어 있다. 남은 항목은 실제 빌드와 기기 검증으로 확인해야 한다.

관련 글: Android 16에서 깨진 로그인, 범인은 OS가 아니라 오래된 주소였다. 참고: Gradle 공식 호환성 표 · Android Gradle Plugin 9.0 출시 노트.

728x90
반응형