Android 빌드의 Java 버전

소스 코드가 Java, Kotlin 또는 둘 다로 작성되었는지와 관계없이 JDK 또는 Java 언어를 선택해야 하는 곳이 여러 곳 있습니다. 새 버전이 생성됩니다

Gradle 빌드의 JDK 관계 개요

용어집

JDK (Java Development Kit)
JDK (Java Development Kit) 포함: <ph type="x-smartling-placeholder">
    </ph>
  • 컴파일러, 프로파일러, 아카이브 생성자와 같은 도구 이는 빌드 중에 백그라운드에서 사용되어 애플리케이션을 만듭니다
  • API가 포함된 라이브러리로 API를 호출할 수 있습니다. Kotlin 또는 Java 소스 코드 모든 함수가 Android에서 사용할 수 있습니다.
  • Java Virtual Machine (JVM), 인터프리터, Java 애플리케이션입니다. JVM을 사용하여 Android 스튜디오 IDE 실행 Gradle 빌드 도구가 포함됩니다. JVM이 Android에서 사용되지 않음 기기 또는 에뮬레이터에서 사용할 수 있습니다.
JetBrains Runtime (JBR)
JetBrains Runtime (JBR) 는 Android 스튜디오와 함께 배포되는 향상된 JDK입니다. 스튜디오 및 관련 JetBrains에서 사용할 수 있는 몇 가지 최적화가 포함되어 있습니다. 다른 Java 애플리케이션을 실행하는 데 사용할 수도 있습니다.

Android 스튜디오를 실행하기 위해 JDK를 선택하려면 어떻게 해야 하나요?

Android 스튜디오를 실행하려면 JBR을 사용하는 것이 좋습니다. Kubernetes는 Android Studio를 테스트하는 데 사용되고 최적의 성능을 위한 개선사항을 포함합니다. Android 스튜디오 사용 이를 위해서는 STUDIO_JDK를 설정하지 마세요. 환경 변수입니다

Android 스튜디오의 시작 스크립트는 다음에서 JVM을 찾습니다. 주문:

  1. STUDIO_JDK 환경 변수
  2. studio.jdk 디렉터리 (Android 스튜디오 배포)
  3. Android 스튜디오의 jbr 디렉터리 (JetBrains Runtime) 배포되었습니다. (권장)
  4. JDK_HOME 환경 변수
  5. JAVA_HOME 환경 변수
  6. PATH 환경 변수의 java 실행 파일

Gradle 빌드를 실행할 JDK는 어떻게 선택하나요?

Android 스튜디오의 버튼을 사용하여 Gradle을 실행하면 Android 스튜디오 설정은 Gradle을 실행하는 데 사용됩니다. 터미널에서 Gradle을 실행하는 경우 Android 스튜디오 안팎에서 JAVA_HOME 환경 변수가 (설정된 경우)은 Gradle 스크립트를 실행하는 JDK를 결정합니다. JAVA_HOME인 경우 설정되어 있지 않으면 PATH 환경에서 java 명령어를 사용합니다. 변수의 값을 지정합니다.

가장 일관된 결과를 얻으려면 JAVA_HOME을(를) 설정해야 합니다. 환경 변수 Android 스튜디오의 Gradle JDK 구성과 동일한 있습니다.

빌드를 실행할 때 Gradle은 데몬이라는 프로세스를 생성하여 실제 빌드를 수행할 수 있습니다 이 프로세스는 빌드가 동일한 JDK와 Gradle 버전을 사용하는 한 재사용 데몬이 새 JVM을 시작하고 빌드 시스템을 초기화하는 시간을 줄여줍니다.

다른 JDK 또는 Gradle 버전으로 빌드를 시작하는 경우 데몬이 생성되어 더 많은 CPU와 메모리를 소비합니다.

Android 스튜디오의 Gradle JDK 구성

기존 프로젝트의 Gradle JDK 구성을 수정하려면 Gradle을 엽니다. 파일 (macOS에서는 Android 스튜디오)의 설정 > 설정 > 빌드, 실행, 배포 > 빌드 도구 > Gradle을 선택합니다. Gradle JDK 드롭다운에는 다음 옵션 중에서 선택할 수 있습니다.

  • JAVA_HOME, GRADLE_LOCAL_JAVA_HOME 등의 매크로
  • 저장된 jbr-17와 같은 vendor-version 형식의 JDK 테이블 항목 Android 구성 파일
  • JDK 다운로드
  • 특정 JDK 추가
  • 운영체제의 기본 JDK 설치에서 로컬로 감지된 JDK 디렉터리

선택한 옵션은gradleJvm 프로젝트의 .idea/gradle.xml 파일 및 JDK 경로 해상도를 사용하여 Android 스튜디오를 통해 시작된 경우 Gradle

그림 1. Android 스튜디오의 Gradle JDK 설정

매크로는 동적 프로젝트 JDK 경로 선택을 사용 설정합니다.

  • JAVA_HOME: 이름이 같은 환경 변수를 사용합니다.
  • GRADLE_LOCAL_JAVA_HOME: java.home 속성 사용 .gradle/config.properties 파일이며 기본값은 JetBrains Runtime입니다.

선택한 JDK는 Gradle 빌드를 실행하고 JDK API를 확인하는 데 사용됩니다. 참조는 빌드 스크립트와 소스 코드를 편집할 때 생성됩니다. Note that the 지정된 compileSdk는 어떤 Java 기호를 추가적으로 제한합니다. 소스 코드를 편집하고 빌드할 때 사용할 수 있습니다

JDK보다 높거나 같은 JDK 버전을 선택해야 합니다. Gradle 빌드에서 사용하는 플러그인에서 사용하는 버전 Android Gradle 플러그인 (AGP)에 필요한 최소 JDK 버전입니다. 출시 노트에서 호환성 표를 참조하세요.

예를 들어 Android Gradle 플러그인 버전 8.x에는 JDK 17이 필요합니다. 이전 버전의 API로 이를 사용하는 Gradle 빌드를 실행하려고 하면 클릭하면 다음과 같은 메시지가 보고됩니다.

An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
      Your current JDK is located in /usr/local/buildtools/java/jdk11
      You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

자바 또는 Kotlin 소스 코드에서 어떤 Java API를 사용할 수 있나요?

Android 애플리케이션은 JDK에 정의된 일부 API를 사용할 수 있지만 모든 API를 사용할 수 있는 것은 아닙니다. 있습니다. Android SDK는 여러 Java 라이브러리 함수의 구현을 정의함 사용할 수 있습니다 compileSdk 속성은 Kotlin 또는 Java 소스 코드를 컴파일할 때 사용할 Android SDK 버전입니다.

Kotlin

android {
    ...
    compileSdk = 33
}

Groovy

android {
    ...
    compileSdk 33
}

각 Android 버전은 JDK의 특정 버전과 Java API에 대해 알아봤습니다 Java API를 사용하는 경우 지정된 compileSdk에서 사용할 수 없는 minSdk님, API를 사용할 수 있습니다 이전 버전의 Android에서 실행되며 디슈가링입니다. 지원되는 내용은 디슈가링을 통해 사용할 수 있는 Java 11+ API를 참고하세요. API에 액세스할 수 있습니다

이 표를 사용하여 지원되는 Java 버전을 확인합니다. 각 Android API에 대해 알아보고 사용 가능한 Java API에 대한 세부정보를 찾을 수 있는 곳을 알아보세요.

Android 자바 지원되는 API 및 언어 기능
14 (API 34) 17 핵심 라이브러리
13 (API 33) 11 핵심 라이브러리
12 (API 32) 11 Java API
11 이하 Android 버전

어떤 JDK가 Java 소스 코드를 컴파일하나요?

Java 도구 모음 JDK에는 Java를 컴파일하는 데 사용되는 Java 컴파일러가 포함되어 있습니다. 소스 코드 이 JDK는 빌드 중에 javadoc 및 단위 테스트도 실행합니다.

도구 모음은 Gradle을 실행하는 데 사용되는 JDK로 기본 설정됩니다. 기본값을 사용하는 경우 다른 머신 (예: 로컬 머신과 로컬 머신)에서 빌드를 별도의 지속적 통합 서버)에서 빌드한 결과 다른 JDK 버전이 사용되면 다를 수 있습니다.

보다 일관된 빌드를 만들려면 Java 도구 모음 버전 이를 다음과 같이 지정하면 됩니다.

  • 빌드를 실행 중인 시스템에서 호환되는 JDK를 찾습니다.
    • 호환되는 JDK가 없고 도구 모음 리졸버가 정의된 경우 한 번 다운로드하게 됩니다.
  • 소스 코드 호출을 위해 도구 모음 Java API를 노출합니다.
  • Java 언어 버전을 사용하여 Java 소스를 컴파일합니다.
  • sourceCompatibilitytargetCompatibility

항상 Java 도구 모음을 지정하고 지정된 JDK가 설치되거나 도구 모음 리졸버 생성합니다

소스 코드가 Java로 작성되었는지, 아니면 Java로 작성되었는지와 관계없이 둘 다 가능합니다. 모듈의 최상위 수준에서 도구 모음을 지정합니다. build.gradle(.kts) 파일.

Java 도구 모음 버전을 다음과 같이 지정합니다.

Kotlin

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

Groovy

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

소스가 Kotlin이나 Java이거나 두 가지가 혼합된 경우에 작동합니다.

툴체인 JDK 버전은 Gradle을 실행하는 데 사용되는 JDK와 동일할 수 있지만 목적이 서로 다르다는 점을 기억해야 합니다

자바 소스 코드에서 어떤 자바 언어 소스 기능을 사용할 수 있나요?

sourceCompatibility 속성은 어떤 Java 언어 기능을 Java 소스를 컴파일하는 동안 사용할 수 있습니다. Kotlin 소스에는 영향을 미치지 않습니다.

지정하지 않으면 기본적으로 Java 도구 모음 또는 JDK에서 Gradle을 실행하는 데 사용됩니다. 항상 실행 가능한 VM의 이름을 도구 모음 (권장) 또는 sourceCompatibility

모듈의 build.gradle(.kts) 파일에 sourceCompatibility를 지정합니다.

Kotlin

android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
    }
}

Groovy

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
    }
}

Kotlin 또는 Java 소스를 컴파일할 때 어떤 Java 바이너리 기능을 사용할 수 있나요?

targetCompatibilityjvmTarget를 지정하면 Java 컴파일된 자바 및 Kotlin의 바이트 코드를 생성할 때 사용되는 클래스 형식 버전 각각 사용합니다.

일부 Kotlin 기능은 상응하는 Java 기능이 추가되기 전에 존재했습니다. 초기 Kotlin 컴파일러는 이러한 Kotlin을 표현하는 자체 방식을 만들어야 했습니다. 기능을 살펴보겠습니다 이러한 기능 중 일부는 나중에 Java에 추가되었습니다. 이후의 jvmTarget 수준에서는 Kotlin 컴파일러가 자바 기능이 작동하지 않으므로 성능이 개선될 수 있습니다.

targetCompatibility의 기본값은 sourceCompatibility, 지정된 경우 sourceCompatibility 이상이어야 합니다.

jvmTarget의 기본값은 도구 모음 버전입니다.

Android 버전마다 지원하는 Java 버전도 다릅니다. 다음과 같은 작업을 할 수 있습니다. Java 기능을 더 많이 활용하여 targetCompatibilityjvmTarget를 지원하지만 최소 Android SDK 버전을 사용할 수 있습니다

Kotlin

android {
    compileOptions {
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

Groovy

android {
    compileOptions {
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget '17'
    }
}