안드로이드 스튜디오로 개발할 때, 다음 요소들의 버전을 맞춘다.

  • Gradle
  • AGP( Android Gradle Plugin )
  • Gradle JDK

gradle-wrapper.properties (Gradle)


  
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

해당 파일에서 Gradle Version을 수정할 수 있다. (위 코드에서는 8.7)

 

https://docs.gradle.org/current/userguide/compatibility.html

 

Compatibility Matrix

Gradle runs on the Java Virtual Machine (JVM), which is often provided by either a JDK or JRE. A JVM version between 8 and 23 is required to execute Gradle. JVM 24 and later versions are not yet supported. Executing the Gradle daemon with JVM 16 or earlier

docs.gradle.org

Gradle은 JVM 위에서 동작하고, Java Version에 따른 Gradle Version 호환성이 있다.

 

AGP( Android Gradle Plugin )

AGP & Gradle Compatibility

 

Android Gradle 플러그인 8.9 출시 노트  |  Android Studio  |  Android Developers

Android 스튜디오 빌드 시스템은 Gradle을 기반으로 하며 Android Gradle 플러그인에는 Android 앱을 빌드하는 데 사용하는 몇 가지 추가 기능이 있습니다.

developer.android.com

 

AGP는 Gradle(빌드 자동화 도구)을 기반으로 동작하는 안드로이드 프로젝트 플러그인이다.

따라서, Gradle Version에 따른 AGP Version 호환성이 있다.

libs.versions.toml


  
[versions]
agp = "8.5.2"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
appcompat = "1.7.0"
material = "1.12.0"
constraintlayout = "2.1.4"
navigationFragment = "2.7.7"
navigationUi = "2.7.7"
...

플러그인 DSL 경우, libs.version.toml 파일에서

Groovy의 경우, build.gradle(app) 파일에서 AGP Version을 수정할 수 있다.

 

안드로이드 스튜디오에서도 가능하다.

(window) File → Project Structure → Project → AGP Version

 

Gradle JDK

JDK guide docs

 

Android 빌드의 Java 버전  |  Android Studio  |  Android Developers

빌드에서 사용할 JDK를 선택하는 방법

developer.android.com

 

Gradle 빌드를 실행할 JDK를 선택하려면

(window) File → Settings → Build, Execution, Deployment → Build Tools → Gradle

build.gradle (app)


  
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

해당 파일에 Java Version은 소스 코드 컴파일 시 규격을 정의한다.

 

예를 들어 아래 설정과 같다면

Gradle JDK = 21

sourceCompatibility = 17

targetCompatibility = 21

 

Gradle이 빌드하는 동안 컴파일, 테스트, 패키징 등을 처리할 때 Java 21 환경에서 작업을 한다. (gradle jdk)

소스 코드 컴파일 시 Java 17 문법을 사용한다. (source)

Java 21 환경에서 실행될 수 있는 바이트 코드가 생성된다. (target)

 

예시로 들긴 했는데,

소스 코드가 17로 컴파일되기 때문에 target 이 21이어도 17에서 실행되지 않을 바이트 코드는 없을 것이다.

다만, 21에서만 실행될 수 있는 JVM 최적화나 기능이 포함될 수는 있다..? (직접 따라가 보진 않았으니까)


 

프로젝트를 재현하거나 파악한다면, Gradle을 먼저 보고 AGP와 Gradle JDK를 맞추면 된다.