Kaynak kodunuz Java, Kotlin veya her ikisinde de yazılmış olsa derlemeniz için JDK ya da Java dilinin bir sürümünü seçmeniz gereken birkaç yer vardır.
Sözlük
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
içeriği:
- Derleyici, profil oluşturucu ve arşiv oluşturucu gibi araçlar. Bunlar, uygulamanızı oluşturmak için derleme sırasında arka planda kullanılır.
- Kotlin veya Java kaynak kodunuzdan çağırabileceğiniz API'ler içeren kitaplıklar. Android'de tüm işlevlerin kullanılamadığını unutmayın.
- Java uygulamalarını yürüten bir yorumlayıcı olan Java sanal makinesi (JVM). Android Studio IDE'yi ve Gradle derleme aracını çalıştırmak için JVM'yi kullanırsınız. JVM, Android cihazlarda veya emülatörlerde kullanılmaz.
- JetBrains Runtime (JBR)
- JetBrains Runtime (JBR) , Android Studio ile dağıtılan gelişmiş bir JDK'dır. Studio'da ve ilgili JetBrains ürünlerinde kullanılmak üzere çeşitli optimizasyonlar içerir ancak diğer Java uygulamalarını çalıştırmak için de kullanılabilir.
Android Studio'yu çalıştırmak için nasıl JDK seçebilirim?
Android Studio'yu çalıştırmak için JBR'yi kullanmanızı öneririz. Android Studio ile birlikte dağıtılır ve Android Studio'yu test etmek için kullanılır. Ayrıca, Android Studio'nun optimum kullanımı için geliştirmeler içerir. Bunu sağlamak için STUDIO_JDK
ortam değişkenini ayarlamayın.
Android Studio'nun başlangıç komut dosyaları, JVM'yi aşağıdaki sırayla arar:
STUDIO_JDK
ortam değişkenistudio.jdk
dizini (Android Studio dağıtımında)jbr
dizininde (JetBrains Runtime) bulunur. Önerilir.JDK_HOME
ortam değişkeniJAVA_HOME
ortam değişkenijava
ortam değişkeninde yürütülebilirPATH
Gradle derlemelerimi hangi JDK'nın çalıştıracağını nasıl seçebilirim?
Gradle'ı Android Studio'daki düğmeleri kullanarak çalıştırırsanız Gradle'ı çalıştırmak için Android Studio ayarlarında belirlenen JDK kullanılır. Gradle'ı bir terminalde (Android Studio'nun içinde veya dışında) çalıştırırsanız JAVA_HOME
ortam değişkeni
(ayarlanmışsa) Gradle komut dosyalarını hangi JDK'nın çalıştıracağını belirler. JAVA_HOME
ayarlanmamışsa PATH
ortam değişkeninizde java
komutunu kullanır.
En tutarlı sonuçları elde etmek için JAVA_HOME
ortam değişkeninizi ve Android Studio'daki Gradle JDK yapılandırmanızı aynı JDK'ya ayarladığınızdan emin olun.
Gradle, derlemenizi çalıştırırken gerçek derlemeyi gerçekleştirmek için daemon adı verilen bir işlem oluşturur. Bu işlem, derlemeler aynı JDK ve Gradle sürümünü kullandığı sürece yeniden kullanılabilir. Bir daemon'un yeniden kullanılması, yeni bir JVM'nin başlatılması ve derleme sisteminin başlatılması için gereken süreyi kısaltır.
Derlemeleri farklı JDK'lar veya Gradle sürümleriyle başlatırsanız ek daemon'lar oluşturulur ve daha fazla CPU ile bellek tüketilir.
gradle-wrapper.properties
dosyasında aynı Gradle sürümünü belirtin.
Android Studio'da Gradle JDK yapılandırması
Mevcut projenin Gradle JDK yapılandırmasını değiştirmek için File (Dosya) (veya macOS'te Android Studio) > Settings > Build, Execution, Deployment > Build Tools > Gradle'dan Gradle ayarlarını açın. Gradle JDK açılır listesinde aşağıdaki seçenekler bulunur:
JAVA_HOME
veGRADLE_LOCAL_JAVA_HOME
gibi makrolarvendor-version
biçimindejbr-17
gibi Android yapılandırma dosyalarında depolanan JDK tablo girişleri- JDK indirme
- Belirli bir JDK ekleme
- İşletim sisteminin varsayılan JDK yükleme dizininden yerel olarak algılanan JDK'lar
Seçilen seçenek, projenin .idea/gradle.xml
dosyasındaki gradleJvm
seçeneğinde depolanır ve Android Studio üzerinden başlatıldığında Gradle'ı çalıştırmak için JDK yolu çözümü kullanılır.

Makrolar, dinamik proje JDK yolu seçimine olanak tanır:
JAVA_HOME
: Aynı ada sahip ortam değişkenini kullanır.GRADLE_LOCAL_JAVA_HOME
:.gradle/config.properties
dosyasındakijava.home
özelliğini kullanır. Bu özellik varsayılan olarak JetBrains Runtime'ı kullanır.
Seçilen JDK, Gradle derlemenizi çalıştırmak ve derleme komut dosyalarınızı ve kaynak kodunuzu düzenlerken JDK API referanslarını çözmek için kullanılır. Belirtilen compileSdk
, kaynak kodunuzu düzenlerken ve oluştururken hangi Java sembollerinin kullanılabileceğini daha da kısıtlayacaktır.
Gradle derlemenizde kullandığınız eklentiler tarafından kullanılan JDK sürümlerinden daha yüksek veya onlara eşit bir JDK sürümü seçtiğinizden emin olun. Android Gradle eklentisi (AGP) için gereken minimum JDK sürümünü belirlemek üzere sürüm notlarındaki uyumluluk tablosuna bakın.
Örneğin, Android Gradle eklentisi 8.x sürümü için JDK 17 gerekir. Bunu kullanan bir Gradle derlemesini JDK'nın daha eski bir sürümüyle çalıştırmaya çalışırsanız şu gibi bir mesaj bildirilir:
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`.
Java veya Kotlin kaynak kodumda hangi Java API'lerini kullanabilirim?
Bir Android uygulaması, JDK'da tanımlanan API'lerin bir kısmını kullanabilir ancak tamamını kullanamaz. Android SDK, birçok Java kitaplığı işlevinin uygulamalarını mevcut API'lerinin bir parçası olarak tanımlar. compileSdk
özelliği, Kotlin veya Java kaynak kodunuzu derlerken hangi Android SDK sürümünün kullanılacağını belirtir.
Kotlin
android {
...
compileSdk = 33
}
Groovy
android {
...
compileSdk 33
}
Android'in her sürümü, JDK'nin belirli bir sürümünü ve kullanılabilir Java API'lerinin bir alt kümesini destekler. Belirtilen minSdk
'de bulunmayan bir compileSdk
içinde kullanılabilen bir Java API'si kullanıyorsanız desugaring olarak bilinen bir işlemle API'yi Android'in önceki sürümünde kullanabilirsiniz.
Desteklenen API'ler için Java 11+ API'leri (desugaring ile kullanılabilir) başlıklı makaleyi inceleyin.
Hangi Android API'nin hangi Java sürümünü desteklediğini ve hangi Java API'lerinin kullanılabildiğiyle ilgili ayrıntıları nerede bulabileceğinizi belirlemek için bu tabloyu kullanın.
Android | Java | Desteklenen API ve dil özellikleri |
---|---|---|
14 (API 34) | 17 | Temel kitaplıklar |
13 (API 33) | 11 | Temel kitaplıklar |
12 (API 32) | 11 | Java API'si |
11 ve daha düşük | Android sürümleri |
Java kaynak kodumu hangi JDK derler?
Java araç zinciri JDK, herhangi bir Java kaynak kodunu derlemek için kullanılan Java derleyicisini içerir. Bu JDK, derleme sırasında javadoc ve birim testlerini de çalıştırır.
Araç zinciri, Gradle'ı çalıştırmak için kullanılan JDK'yı varsayılan olarak kullanır. Varsayılanı kullanıyorsanız ve farklı makinelerde (örneğin, yerel makineniz ve ayrı bir sürekli entegrasyon sunucusu) derleme çalıştırıyorsanız farklı JDK sürümleri kullanıldığında derlemenizin sonuçları farklı olabilir.
Daha tutarlı bir derleme oluşturmak için Java araç zinciri sürümünü açıkça belirtebilirsiniz. Bunu belirtmek:
- Derlemenin çalıştığı sistemde uyumlu bir JDK'yı bulur.
- Uyumlu bir JDK yoksa (ve bir araç zinciri çözümleyici tanımlanmışsa) JDK indirilir.
- Kaynak kodundan yapılan çağrılar için araç zinciri Java API'lerini kullanıma sunar.
- Java kaynaklarını Java dilinin kendi sürümünü kullanarak derler.
sourceCompatibility
vetargetCompatibility
için varsayılan değerleri sağlar.
Her zaman Java araç zincirini belirtmenizi ve belirtilen JDK'nın yüklendiğinden emin olmanızı ya da derlemenize bir araç zinciri çözümleyici eklemenizi öneririz.
Kaynak kodunuzun Java, Kotlin veya her ikisinde de yazılı olup olmadığını belirtebilirsiniz. Araç zincirini, modülünüzün build.gradle(.kts)
dosyasının en üst düzeyinde belirtin.
Java araç zinciri sürümünü şu şekilde belirtin:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Bu özellik, kaynağınız Kotlin, Java veya her ikisinin karışımıysa çalışır.
Araç zinciri JDK sürümü, Gradle'ı çalıştırmak için kullanılan JDK ile aynı olabilir ancak farklı amaçlara hizmet ettiklerini unutmayın.
Java kaynak kodumda hangi Java dili kaynak özelliklerini kullanabilirim?
sourceCompatibility
özelliği, Java kaynağının derlenmesi sırasında hangi Java dili özelliklerinin kullanılabileceğini belirler.
Kotlin kaynağını etkilemez.
Modülünüzün sourceCompatibility
dosyasında build.gradle(.kts)
öğesini aşağıdaki gibi belirtin:
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Belirtilmezse bu özellik varsayılan olarak Java toolchain sürümüne ayarlanır. Java araç zinciri kullanmıyorsanız varsayılan olarak Android Gradle eklentisi tarafından seçilen bir sürüm (örneğin, Java 8 veya daha yeni bir sürüm) kullanılır.
Kotlin veya Java kaynağımı derlerken hangi Java ikili özellikleri kullanılabilir?
targetCompatibility
ve jvmTarget
özellikleri, derlenmiş Java ve Kotlin kaynakları için sırasıyla bytecode oluşturulurken kullanılan Java sınıfı biçimi sürümünü belirler.
Bazı Kotlin özellikleri, eşdeğer Java özellikleri eklenmeden önce vardı.
İlk Kotlin derleyicileri, bu Kotlin özelliklerini temsil etmek için kendi yöntemlerini oluşturmak zorundaydı. Bu özelliklerden bazıları daha sonra Java'ya eklendi.
Daha sonraki jvmTarget
seviyelerinde Kotlin derleyici, Java özelliğini doğrudan kullanabilir. Bu da daha iyi performans sağlayabilir.
Android'in farklı sürümleri, Java'nın farklı sürümlerini destekler. targetCompatibility
ve jvmTarget
değerlerini artırarak ek Java özelliklerinden yararlanabilirsiniz ancak bu, özelliği kullanabilmek için minimum Android SDK sürümünüzü de artırmanızı gerektirebilir.
targetCompatibility
değerinin sourceCompatibility
değerine eşit veya ondan büyük olması gerektiğini unutmayın. Uygulamada sourceCompatibility
, targetCompatibility
ve jvmTarget
genellikle aynı değeri kullanmalıdır.
Bu ayarları aşağıdaki şekilde belirleyebilirsiniz:
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'
}
}
Belirtilmezse bu özellikler varsayılan olarak Java araç zinciri sürümüne ayarlanır. Java araç zinciri kullanmıyorsanız varsayılan değerler farklı olabilir ve derleme sorunlarına neden olabilir. Bu nedenle, bu değerleri her zaman açıkça belirtmenizi veya Java toolchain kullanmanızı öneririz.