Baik kode sumber Anda ditulis dalam Java, Kotlin, atau keduanya, ada beberapa tempat yang harus Anda pilih JDK atau versi bahasa Java untuk build Anda.
Glosarium
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
berisi:
- Alat, seperti compiler, profiler, dan pembuat arsip. Ini digunakan di balik layar selama build untuk membuat aplikasi Anda.
- Library yang berisi API yang dapat Anda panggil dari kode sumber Kotlin atau Java. Perhatikan bahwa tidak semua fungsi tersedia di Android.
- Java Virtual Machine (JVM), interpreter yang menjalankan aplikasi Java. Anda menggunakan JVM untuk menjalankan IDE Android Studio dan alat build Gradle. JVM tidak digunakan di perangkat atau emulator Android.
- JetBrains Runtime (JBR)
- JetBrains Runtime (JBR) adalah JDK yang ditingkatkan, didistribusikan dengan Android Studio. JDK ini mencakup beberapa pengoptimalan untuk digunakan di Studio dan produk JetBrains terkait, tetapi juga dapat digunakan untuk menjalankan aplikasi Java lainnya.
Bagaimana cara memilih JDK untuk menjalankan Android Studio?
Sebaiknya gunakan JBR untuk menjalankan Android Studio. Plugin ini di-deploy
dengan dan digunakan untuk menguji Android Studio, serta menyertakan peningkatan untuk penggunaan Android Studio yang optimal. Untuk memastikannya, jangan tetapkan variabel lingkungan STUDIO_JDK
.
Skrip startup untuk Android Studio mencari JVM dalam urutan berikut:
- Variabel lingkungan
STUDIO_JDK
- Direktori
studio.jdk
(dalam distribusi Android Studio) - Direktori
jbr
(JetBrains Runtime), dalam distribusi Android Studio. Direkomendasikan. - Variabel lingkungan
JDK_HOME
- Variabel lingkungan
JAVA_HOME
java
yang dapat dieksekusi dalam variabel lingkunganPATH
Bagaimana cara memilih JDK yang menjalankan build Gradle saya?
Jika Anda menjalankan Gradle menggunakan tombol di Android Studio, JDK yang ditetapkan di
setelan Android Studio akan digunakan untuk menjalankan Gradle. Jika Anda menjalankan Gradle di terminal,
baik di dalam maupun di luar Android Studio, variabel lingkungan JAVA_HOME
(jika ditetapkan) menentukan JDK mana yang menjalankan skrip Gradle. Jika JAVA_HOME
tidak disetel, perintah java
akan digunakan pada variabel lingkungan PATH
.
Untuk hasil yang paling konsisten, pastikan Anda menyetel JAVA_HOME
variabel lingkungan, dan
konfigurasi JDK Gradle di Android Studio ke JDK yang sama.
Saat menjalankan build, Gradle akan membuat proses yang disebut daemon untuk melakukan build sebenarnya. Proses ini dapat digunakan kembali, selama build menggunakan JDK dan versi Gradle yang sama. Penggunaan ulang daemon mengurangi waktu untuk memulai JVM baru dan menginisialisasi sistem build.
Jika Anda memulai build dengan JDK atau versi Gradle yang berbeda, daemon tambahan akan dibuat, sehingga menggunakan lebih banyak CPU dan memori.
Konfigurasi JDK Gradle di Android Studio
Untuk mengubah konfigurasi JDK Gradle project yang ada, buka setelan Gradle dari File (atau Android Studio di macOS) > Settings > Build, Execution, Deployment > Build Tools > Gradle. Dropdown Gradle JDK berisi opsi berikut untuk dipilih:
- Makro seperti
JAVA_HOME
danGRADLE_LOCAL_JAVA_HOME
- Entri tabel JDK dalam format
vendor-version
sepertijbr-17
yang disimpan dalam file konfigurasi Android - Mendownload JDK
- Menambahkan JDK tertentu
- JDK yang terdeteksi secara lokal dari direktori penginstalan JDK default sistem operasi
Opsi yang dipilih disimpan dalam opsi gradleJvm
di
file .idea/gradle.xml
project, dan resolusi jalur JDK-nya digunakan untuk menjalankan
Gradle saat dimulai melalui Android Studio.

Makro memungkinkan pemilihan jalur JDK project dinamis:
JAVA_HOME
: menggunakan variabel lingkungan dengan nama yang samaGRADLE_LOCAL_JAVA_HOME
: menggunakan propertijava.home
dalam file.gradle/config.properties
yang secara default menggunakan JetBrains Runtime.
JDK yang dipilih digunakan untuk menjalankan build Gradle dan menyelesaikan referensi JDK API saat mengedit skrip build dan kode sumber. Perhatikan bahwa
compileSdk
yang ditentukan akan lebih membatasi simbol Java yang akan
tersedia saat mengedit dan membangun kode sumber Anda.
Pastikan untuk memilih versi JDK yang lebih tinggi atau sama dengan versi JDK yang digunakan oleh plugin yang Anda gunakan dalam build Gradle. Untuk menentukan versi JDK minimum yang diperlukan untuk Plugin Android Gradle (AGP), lihat tabel kompatibilitas dalam catatan rilis.
Misalnya, Plugin Android Gradle versi 8.x memerlukan JDK 17. Jika Anda mencoba menjalankan build Gradle yang menggunakannya dengan JDK versi lebih lama, build tersebut akan melaporkan pesan seperti:
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/jdk
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`.
API Java mana yang dapat saya gunakan dalam kode sumber Java atau Kotlin saya?
Aplikasi Android dapat menggunakan beberapa API yang ditentukan dalam JDK, tetapi tidak semuanya. Android SDK menentukan implementasi banyak fungsi library Java sebagai bagian dari API yang tersedia. Properti compileSdk
menentukan versi Android SDK yang akan digunakan saat mengompilasi kode sumber Kotlin atau Java Anda.
Kotlin
android {
...
compileSdk = 33
}
Groovy
android {
...
compileSdk 33
}
Setiap versi Android mendukung versi JDK tertentu dan subset API Java yang tersedia. Jika Anda menggunakan Java API yang tersedia di
compileSdk
yang tidak tersedia di
minSdk
yang ditentukan, Anda mungkin dapat menggunakan API
di Android versi sebelumnya melalui proses yang dikenal sebagai
desugaring.
Lihat API Java 11+ yang tersedia melalui desugaring untuk API yang didukung.
Gunakan tabel ini untuk menentukan versi Java yang didukung oleh setiap Android API, dan tempat menemukan detail tentang Java API yang tersedia.
Android | Java | Fitur API dan bahasa yang didukung |
---|---|---|
14 (API 34) | 17 | Library inti |
13 (API 33) | 11 | Library inti |
12 (API 32) | 11 | Java API |
11 dan yang lebih lama | Versi Android |
JDK mana yang mengompilasi kode sumber Java saya?
JDK Java toolchain berisi compiler Java yang digunakan untuk mengompilasi kode sumber Java apa pun. JDK ini juga menjalankan javadoc dan pengujian unit selama build.
Toolchain secara default menggunakan JDK yang digunakan untuk menjalankan Gradle. Jika Anda menggunakan default dan menjalankan build di mesin yang berbeda (misalnya, mesin lokal dan server Integrasi Berkelanjutan terpisah), hasil build Anda dapat berbeda jika versi JDK yang digunakan berbeda.
Untuk membuat build yang lebih konsisten, Anda dapat menentukan versi toolchain Java secara eksplisit. Menentukan hal ini:
- Menemukan JDK yang kompatibel di sistem yang menjalankan build.
- Jika tidak ada JDK yang kompatibel (dan resolver toolchain ditentukan), JDK akan didownload.
- Mengekspos Java API toolchain untuk panggilan dari kode sumber.
- Mengompilasi sumber Java menggunakan versi bahasa Java-nya.
- Menyediakan nilai default untuk
sourceCompatibility
dantargetCompatibility
.
Sebaiknya selalu tentukan toolchain Java, dan pastikan JDK yang ditentukan diinstal, atau tambahkan pemecah masalah toolchain ke build Anda.
Anda dapat menentukan toolchain, baik kode sumber Anda ditulis dalam Java, Kotlin, atau keduanya. Tentukan toolchain di tingkat teratas file
build.gradle(.kts)
modul Anda.
Tentukan versi toolchain Java seperti ini:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Ini berfungsi jika sumber Anda adalah Kotlin, Java, atau campuran keduanya.
Versi JDK toolchain dapat sama dengan JDK yang digunakan untuk menjalankan Gradle, tetapi perlu diingat bahwa keduanya memiliki tujuan yang berbeda.
Fitur sumber bahasa Java mana yang dapat saya gunakan dalam kode sumber Java saya?
Properti sourceCompatibility
menentukan fitur bahasa Java mana yang tersedia selama kompilasi sumber Java.
Hal ini tidak memengaruhi sumber Kotlin.
Tentukan sourceCompatibility
di file build.gradle(.kts)
modul Anda sebagai
berikut:
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Jika tidak ditentukan, properti ini akan ditetapkan secara default ke versi toolchain Java. Jika Anda tidak menggunakan toolchain Java, toolchain akan menggunakan versi default yang dipilih oleh plugin Android Gradle (misalnya, Java 8 atau yang lebih tinggi).
Fitur biner Java mana yang dapat digunakan saat saya mengompilasi sumber Kotlin atau Java?
Properti targetCompatibility
dan jvmTarget
menentukan versi format class Java yang digunakan saat membuat bytecode untuk sumber Java dan Kotlin yang dikompilasi.
Beberapa fitur Kotlin sudah ada sebelum fitur Java yang setara ditambahkan.
Compiler Kotlin awal harus membuat cara sendiri untuk merepresentasikan fitur Kotlin tersebut. Beberapa fitur ini kemudian ditambahkan ke Java.
Dengan level jvmTarget
yang lebih baru, compiler Kotlin dapat langsung menggunakan fitur Java, yang dapat menghasilkan performa yang lebih baik.
Versi Android yang berbeda mendukung versi Java yang berbeda. Anda dapat
memanfaatkan fitur Java tambahan dengan meningkatkan
targetCompatibility
dan jvmTarget
, tetapi hal ini dapat memaksa Anda untuk
meningkatkan
versi Android SDK minimum untuk memastikan
fitur tersedia.
Perhatikan bahwa targetCompatibility
harus lebih besar dari atau sama dengan
sourceCompatibility
. Dalam praktiknya, sourceCompatibility
,
targetCompatibility
, dan jvmTarget
umumnya harus menggunakan nilai yang sama.
Anda dapat menyetelnya sebagai berikut:
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}
Jika tidak ditentukan, properti ini secara default ditetapkan ke versi toolchain Java. Jika Anda tidak menggunakan toolchain Java, nilai default mungkin berbeda dan menyebabkan masalah build. Oleh karena itu, sebaiknya Anda selalu menentukan nilai ini secara eksplisit atau menggunakan Java toolchain.