Baik kode sumber Anda ditulis di Java, Kotlin, maupun keduanya, ada beberapa tempat yang harus dipilih untuk memilih versi bahasa JDK atau Java untuk build Anda.
Glosarium
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
berisi:
- Alat, seperti compiler, profiler, dan pembuat arsip. Template ini digunakan di belakang layar selama build Anda untuk membuat aplikasi.
- 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), penafsir yang mengeksekusi aplikasi Java. Anda menggunakan JVM untuk menjalankan Android Studio IDE dan alat build Gradle. JVM tidak digunakan di perangkat Android atau emulator.
- Runtime JetBrains (JBR)
- JetBrains Runtime (JBR) adalah JDK yang ditingkatkan, yang didistribusikan dengan Android Studio. Rilis 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. Library ini di-deploy
dan digunakan untuk menguji Android Studio, serta menyertakan peningkatan untuk penggunaan
Android Studio yang optimal. Untuk memastikan hal ini, jangan menetapkan
variabel lingkungan STUDIO_JDK
.
Skrip startup untuk Android Studio mencari JVM dengan 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
dapat dieksekusi di variabel lingkunganPATH
Bagaimana cara memilih JDK mana 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 ditetapkan, perintah java
akan digunakan pada variabel lingkungan PATH
Anda.
Untuk mendapatkan hasil yang paling konsisten, pastikan Anda menetapkan variabel lingkungan JAVA_HOME
, dan
konfigurasi JDK Gradle di Android Studio ke JDK yang
sama.
Saat menjalankan build, Gradle akan membuat proses yang disebut daemon untuk melakukan build yang sebenarnya. Proses ini dapat digunakan kembali, selama build menggunakan versi JDK dan Gradle yang sama. Penggunaan kembali daemon akan mengurangi waktu untuk memulai JVM baru dan menginisialisasi sistem build.
Jika Anda memulai build dengan versi JDK atau Gradle yang berbeda, daemon tambahan akan dibuat sehingga memakai lebih banyak CPU dan memori.
Konfigurasi JDK Gradle di Android Studio
Untuk mengubah konfigurasi JDK Gradle project yang sudah ada, buka setelan Gradle dari File (atau Android Studio di macOS) > Settings > Build, Execution, Deployment > Build Tools > Gradle. Drop-down Gradle JDK berisi opsi yang dapat dipilih berikut:
- Makro seperti
JAVA_HOME
danGRADLE_LOCAL_JAVA_HOME
- Entri tabel JDK dalam format
vendor-version
sepertijbr-17
yang disimpan di 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 disetel ke Runtime JetBrains.
JDK yang dipilih digunakan untuk menjalankan build Gradle dan menyelesaikan referensi JDK API
saat mengedit skrip build dan kode sumber Anda. Perhatikan bahwa compileSdk
yang ditentukan akan lebih membatasi simbol Java yang akan tersedia saat mengedit dan mem-build kode sumber Anda.
Pastikan untuk memilih versi JDK yang lebih tinggi atau sama dengan versi JDK yang digunakan oleh plugin yang Anda gunakan di build Gradle. Untuk menentukan versi JDK minimum yang diperlukan untuk Plugin Android Gradle (AGP), lihat tabel kompatibilitas di catatan rilis.
Misalnya, Plugin Android Gradle versi 8.x memerlukan JDK 17. Jika Anda mencoba menjalankan build Gradle yang menggunakannya dengan JDK versi sebelumnya, build 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/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`.
API Java mana yang dapat saya gunakan dalam kode sumber Java atau Kotlin?
Aplikasi Android dapat menggunakan beberapa API yang didefinisikan di JDK, tetapi tidak semuanya. Android SDK menentukan implementasi berbagai 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
Java API yang tersedia. Jika menggunakan Java API yang tersedia di
compileSdk
yang tidak tersedia di
minSdk
yang ditentukan, Anda mungkin dapat menggunakan API ini
di versi Android 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 API Java yang tersedia.
Android | Java | Fitur bahasa dan API yang didukung |
---|---|---|
14 (API 34) | 17 | Library inti |
13 (API 33) | 11 | Library inti |
12 (API 32) | 11 | API Java |
11 dan yang lebih rendah | Versi Android |
JDK mana yang mengompilasi kode sumber Java saya?
JDK Java toolchain berisi compiler Java yang digunakan untuk mengompilasi kode sumber Java. JDK ini juga menjalankan pengujian javadoc dan unit selama build.
Toolchain default ke JDK yang digunakan untuk menjalankan Gradle. Jika Anda menggunakan default dan menjalankan build di komputer yang berbeda (misalnya, mesin lokal dan server Continuous Integration terpisah), hasil build dapat berbeda jika versi JDK yang berbeda digunakan.
Untuk membuat build yang lebih konsisten, Anda dapat secara eksplisit menentukan versi toolchain Java. Menentukan hal ini:
- Menemukan JDK yang kompatibel pada sistem yang menjalankan build.
- Jika tidak ada JDK yang kompatibel (dan resolver toolchain ditentukan), download JDK yang kompatibel.
- Mengekspos API Java toolchain untuk panggilan dari kode sumber.
- Mengompilasi sumber Java menggunakan versi bahasa Java-nya.
- Persediaan default untuk
sourceCompatibility
dantargetCompatibility
.
Sebaiknya selalu tentukan toolchain Java, dan pastikan JDK yang ditentukan telah diinstal, atau tambahkan resolver toolchain ke build Anda.
Anda dapat menentukan toolchain, baik kode sumber ditulis dalam Java,
Kotlin, atau keduanya. Tentukan toolchain di level teratas file build.gradle(.kts)
modul.
Jika kode sumber Anda hanya ditulis dalam Java, tentukan versi toolchain Java seperti ini:
Kotlin
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Jika sumber Anda hanya Kotlin atau campuran Kotlin dan Java, tentukan versi toolchain Java seperti ini:
Kotlin
kotlin {
jvmToolchain(17)
}
Groovy
kotlin {
jvmToolchain 17
}
Versi JDK toolchain dapat sama dengan JDK yang digunakan untuk menjalankan Gradle, tetapi perlu diperhatikan bahwa versi JDK memiliki tujuan yang berbeda.
Fitur sumber bahasa Java apa yang dapat saya gunakan dalam kode sumber Java?
Properti sourceCompatibility
menentukan fitur bahasa Java
yang tersedia selama kompilasi sumber Java.
Perubahan ini tidak memengaruhi sumber Kotlin.
Jika tidak ditentukan, defaultnya adalah Java toolchain atau JDK yang digunakan untuk menjalankan Gradle. Sebaiknya selalu tentukan toolchain (disarankan) atau sourceCompatibility
secara eksplisit.
Tentukan sourceCompatibility
dalam file build.gradle(.kts)
modul Anda.
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Fitur biner Java apa yang dapat digunakan saat saya mengompilasi sumber Kotlin atau Java?
Menentukan targetCompatibility
dan jvmTarget
akan 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 caranya sendiri untuk mewakili 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.
targetCompatibility
ditetapkan secara default ke nilai yang sama seperti
sourceCompatibility
,
tetapi jika ditentukan, harus lebih besar dari atau sama dengan sourceCompatibility
.
jvmTarget
ditetapkan secara default ke versi toolchain.
Versi Android yang berbeda mendukung versi Java yang berbeda pula. Anda dapat memanfaatkan fitur Java tambahan dengan meningkatkan targetCompatibility
dan jvmTarget
, tetapi hal ini mungkin memaksa Anda untuk meningkatkan versi Android SDK minimum guna memastikan fitur tersedia.
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Groovy
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}