Baik kode sumber Anda ditulis dalam Java, Kotlin, maupun keduanya, ada beberapa tempat di mana Anda harus memilih bahasa JDK atau Java untuk build Anda.
Glosarium
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
berisi:
- Alat, seperti compiler, profiler, dan pembuat arsip. Fungsi ini digunakan di belakang layar selama pembuatan build untuk membuat aplikasi.
- Library yang berisi API yang dapat Anda panggil dari Kode sumber Kotlin atau Java. Perhatikan bahwa tidak semua fungsi yang 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 Android perangkat atau emulator.
- JetBrains Runtime (JBR)
- JetBrains Runtime (JBR) adalah JDK yang ditingkatkan, yang didistribusikan dengan Android Studio. Rilis ini mencakup beberapa pengoptimalan untuk digunakan di Studio dan 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. Di-deploy
dan digunakan untuk menguji Android Studio, dan
menyertakan peningkatan kualitas untuk
Penggunaan Android Studio. Untuk memastikan hal ini, jangan setel STUDIO_JDK
variabel lingkungan.
Skrip startup untuk Android Studio mencari JVM di bagian berikut berikut:
- Variabel lingkungan
STUDIO_JDK
- Direktori
studio.jdk
(di distribusi Android Studio) - Direktori
jbr
(JetBrains Runtime), di Android Studio distribusi. Direkomendasikan. - Variabel lingkungan
JDK_HOME
- Variabel lingkungan
JAVA_HOME
java
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 digunakan untuk menjalankan Gradle. Jika Anda menjalankan Gradle di terminal,
baik di dalam atau di luar Android Studio, variabel lingkungan JAVA_HOME
(if set) menentukan JDK yang menjalankan skrip Gradle. Jika JAVA_HOME
tidak disetel, tindakan ini akan menggunakan perintah java
di lingkungan PATH
Anda
variabel.
Untuk hasil yang paling konsisten, pastikan Anda menyetel JAVA_HOME
variabel lingkungan, dan
Konfigurasi JDK Gradle di Android Studio yang sama
JDK.
Saat menjalankan build, Gradle akan membuat proses yang disebut daemon untuk menjalankan build yang sebenarnya. Proses ini dapat digunakan kembali, selama build menggunakan versi JDK dan Gradle yang sama. Menggunakan kembali {i>daemon<i} mengurangi waktu untuk memulai JVM baru dan menginisialisasi sistem build.
Jika Anda memulai build dengan versi JDK atau Gradle yang berbeda, tambahan {i>daemon<i} dibuat, memakan lebih banyak CPU dan memori.
Konfigurasi JDK Gradle di Android Studio
Untuk memodifikasi konfigurasi JDK Gradle project yang ada, buka Gradle setelan dari File (atau Android Studio di macOS) > Pengaturan > Bangun, Eksekusi, Deployment > Alat Build > Gradle. Gradle JDK berisi opsi berikut yang dapat dipilih:
- 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 penginstalan JDK default sistem operasi direktori
Opsi yang dipilih disimpan di opsi gradleJvm
pada
file .idea/gradle.xml
project, dan resolusi jalur JDK-nya digunakan untuk menjalankan
Gradle saat dimulai melalui Android Studio.
Makro mengaktifkan pemilihan jalur JDK project dinamis:
JAVA_HOME
: menggunakan variabel lingkungan dengan nama yang samaGRADLE_LOCAL_JAVA_HOME
: menggunakan propertijava.home
di file.gradle/config.properties
yang secara default disetel ke JetBrains Runtime.
JDK yang dipilih digunakan untuk menjalankan build Gradle dan me-resolve JDK API
saat mengedit skrip build dan kode sumber. Perhatikan bahwa
compileSdk
yang ditentukan akan lebih membatasi simbol Java mana yang akan
yang tersedia saat mengedit
dan membangun kode program.
Pastikan untuk memilih versi JDK yang lebih tinggi dari atau sama dengan JDK versi 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 versi JDK, ini 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 di kode sumber Java atau Kotlin?
Aplikasi Android bisa menggunakan beberapa API yang didefinisikan di JDK, namun tidak semua
tersebut lebih mendalam. Android SDK menentukan implementasi berbagai fungsi library Java
sebagai bagian dari API-nya yang tersedia. Properti compileSdk
menentukan
Versi Android SDK yang akan digunakan saat mengompilasi kode sumber Kotlin atau Java.
Kotlin
android {
...
compileSdk = 33
}
Groovy
android {
...
compileSdk 33
}
Setiap versi Android mendukung versi JDK tertentu dan subset dari
Java API yang tersedia. Jika Anda menggunakan API Java yang tersedia di
compileSdk
yang tidak tersedia di kolom yang ditentukan
minSdk
, Anda mungkin dapat menggunakan API
dalam Android versi sebelumnya melalui proses yang dikenal sebagai
desugaring.
Lihat API Java 11+ yang tersedia melalui desugaring untuk mengetahui
Google Cloud Platform.
Gunakan tabel ini untuk menentukan versi Java mana yang didukung oleh setiap API Android, dan tempat menemukan detail tentang API Java 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 | API Java |
11 dan yang lebih lama | Versi Android |
JDK mana yang mengompilasi kode sumber Java saya?
JDK Toolchain Java berisi compiler Java yang digunakan untuk mengompilasi semua Java pada kode sumber Anda. JDK ini juga menjalankan pengujian unit dan javadoc selama build.
Toolchain default ke JDK yang digunakan untuk menjalankan Gradle. Jika Anda menggunakan default dan menjalankan build pada komputer yang berbeda (misalnya, komputer lokal Anda dan server Continuous Integration terpisah), hasil build Anda bisa berbeda jika versi JDK yang digunakan berbeda.
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), mengunduh satu.
- Mengekspos API Java toolchain untuk panggilan dari kode sumber.
- Mengompilasi sumber Java menggunakan versi bahasa Java-nya.
- Default untuk
sourceCompatibility
dantargetCompatibility
.
Kami menyarankan agar Anda selalu menentukan toolchain Java, dan pastikan bahwa JDK yang ditentukan akan diinstal, atau menambahkan resolver toolchain pada build Anda.
Anda dapat menentukan toolchain apakah kode sumber Anda ditulis dalam Java,
Kotlin, atau keduanya. Tentukan toolchain di tingkat teratas halaman modul
File build.gradle(.kts)
.
Tentukan versi toolchain Java seperti ini:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Metode ini berfungsi jika sumber Anda adalah Kotlin, Java, atau campuran keduanya.
Versi JDK toolchain bisa sama dengan JDK yang digunakan untuk menjalankan Gradle, tetapi perlu diingat bahwa mereka memiliki tujuan yang berbeda.
Fitur sumber bahasa Java manakah yang bisa saya gunakan dalam kode sumber Java?
Properti sourceCompatibility
menentukan fitur bahasa Java
tersedia selama kompilasi sumber Java.
Kebijakan ini tidak memengaruhi sumber Kotlin.
Jika tidak ditentukan, setelan default akan disetel ke Toolchain Java atau
JDK yang digunakan untuk menjalankan Gradle. Sebaiknya Anda selalu menentukan secara eksplisit
toolchain (lebih disukai) atau sourceCompatibility
.
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 mana yang dapat digunakan saat saya mengompilasi sumber Kotlin atau Java saya?
Menentukan targetCompatibility
dan jvmTarget
menentukan Java
versi format class yang digunakan saat menghasilkan bytecode untuk Java dan Kotlin yang dikompilasi
masing-masing.
Beberapa fitur Kotlin tersedia sebelum fitur Java yang setara ditambahkan.
Compiler Kotlin awal harus membuat caranya sendiri untuk mewakili Kotlin tersebut
baru. Beberapa fitur ini kemudian ditambahkan ke Java.
Dengan level jvmTarget
yang lebih baru, compiler Kotlin dapat langsung menggunakan
fitur Java, yang dapat menghasilkan
kinerja yang lebih baik.
targetCompatibility
ditetapkan secara default ke nilai yang sama dengan
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 tindakan ini mungkin memaksa Anda untuk
tingkatkan
versi Android SDK minimum untuk memastikan
ketika fitur tersebut tersedia.
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Groovy
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}