Kaynak kodunuz Java, Kotlin veya her ikisi ile yazılmış olsun, derleme işleminiz için bir JDK veya Java dil sürümü seçmeniz gereken birkaç yer vardır.
Sözlük
- Java Geliştirme Kiti (JDK)
-
Java Geliştirme Kiti (JDK) şunu içerir:
- Derleyici, profil oluşturucu ve arşiv oluşturucu gibi araçlar. Bunlar, derlemeniz sırasında uygulamanızı oluşturmak için 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 yorumcu 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 Çalışma Zamanı (JBR)
- JetBrains Runtime (JBR) , Android Studio ile dağıtılan gelişmiş bir JDK'dir. Studio 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 bir JDK'yı nasıl seçebilirim?
Android Studio'yu çalıştırmak için JBR 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 şekilde kullanılmasına yönelik geliştirmeler içerir. Bunu sağlamak için STUDIO_JDK
ortam değişkenini ayarlamayın.
Android Studio için başlangıç komut dosyaları, bir JVM'yi aşağıdaki sırayla arar:
STUDIO_JDK
ortam değişkenistudio.jdk
dizini (Android Studio dağıtımında)jbr
dizini (JetBrains Runtime) içerir. Önerilir.JDK_HOME
ortam değişkeniJAVA_HOME
ortam değişkeniPATH
ortam değişkenindejava
yürütülebilir dosya
Gradle derlememde hangi JDK'nin çalışacağı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 ayarlanan JDK kullanılır. Gradle'i Android Studio'nun içinde veya dışında bir terminalde çalıştırırsanız JAVA_HOME
ortam değişkeni (ayarlanmışsa) Gradle komut dosyalarını hangi JDK'nin çalıştıracağını belirler. JAVA_HOME
ayarlanmazsa PATH
ortam değişkeninizde java
komutunu kullanır.
En tutarlı sonuçlar için JAVA_HOME
ortam değişkeninizi ve Android Studio'daki Gradle JDK yapılandırmasını aynı JDK'ya ayarladığınızdan emin olun.
Gradle, derlemenizi çalıştırırken gerçek derlemeyi gerçekleştirmek için arka plan adı verilen bir işlem oluşturur. Derlemeler aynı JDK ve Gradle sürümünü kullandığı sürece bu işlem yeniden kullanılabilir. Bir daemon'u yeniden kullanmak, yeni bir JVM'yi başlatma ve derleme sistemini başlatma süresini azaltır.
Derlemeleri farklı JDK'lar veya Gradle sürümleriyle başlatırsanız daha fazla CPU ve bellek tüketen ek daemon'lar oluşturulur.
Android Studio'da Gradle JDK yapılandırması
Mevcut projenin Gradle JDK yapılandırmasını değiştirmek için Dosya'dan (veya macOS'te Android Studio'da) > Ayarlar > Derleme, Yürütme, Dağıtım > Derleme Araçları > Gradle'dan Gradle ayarlarını açın. Gradle JDK açılır menüsünde, aşağıdaki seçeneklerden birini tercih edebilirsiniz:
JAVA_HOME
veGRADLE_LOCAL_JAVA_HOME
gibi makrolar- Android yapılandırma dosyalarında depolanan
jbr-17
gibivendor-version
biçimindeki JDK tablo girişleri - JDK indirme
- Belirli bir JDK ekleme
- İşletim sisteminin varsayılan JDK yükleme dizininden yerel olarak algılanan JDK'ler
Seçilen seçenek, projenin .idea/gradle.xml
dosyasında gradleJvm
seçeneğinde saklanır ve JDK yol çözümü, Android Studio üzerinden başlatılırken Gradle'i çalıştırmak için kullanılır.
Makrolar, dinamik proje JDK yolu seçimini etkinleştirir:
JAVA_HOME
: Aynı ada sahip ortam değişkenini kullanırGRADLE_LOCAL_JAVA_HOME
:.gradle/config.properties
dosyasında varsayılan olarak JetBrains Çalışma Zamanı'na ayarlıjava.home
özelliğini kullanır.
Seçilen JDK, Gradle derlemenizi çalıştırmak ve derleme komut dosyalarınız ile kaynak kodunuzu düzenlerken JDK API referanslarını çözmek için kullanılır. Belirtilen compileSdk
öğesinin, kaynak kodunuzu düzenlerken ve oluştururken hangi Java simgelerinin kullanılabileceğini daha da kısıtlayacağını unutmayın.
Gradle derlemenizde kullandığınız eklentiler tarafından kullanılan JDK sürümlerinden daha yüksek veya bu sürümlere 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. Bu sınıfı JDK'nin daha eski bir sürümüyle kullanan bir Gradle derlemesi çalıştırmaya çalışırsanız aşağıdaki gibi bir mesaj gösterilir:
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`.
Java veya Kotlin kaynak kodumda hangi Java API'lerini kullanabilirim?
Bir Android uygulaması, JDK'da tanımlanan API'lerin bazılarını kullanabilir ancak hepsini
kullanamaz. Android SDK'sı, mevcut API'lerinin bir parçası olarak birçok Java kitaplık işlevinin uygulamalarını 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
}
Eski
android {
...
compileSdk 33
}
Android'in her sürümü, JDK'nin belirli bir sürümünü ve mevcut Java API'lerinin bir alt kümesini destekler. Belirtilen minSdk
sürümünde bulunmayan bir compileSdk
sürümünde kullanılabilen bir Java API'si kullanıyorsanız şekerleme kaldırma olarak bilinen bir işlemle API'yi Android'in önceki sürümünde kullanabilirsiniz.
Desteklenen API'ler için Desugaring yoluyla kullanılabilen Java 11+ API'leri sayfasına göz atın.
Her Android API'sinin desteklediği Java sürümünü ve hangi Java API'lerinin kullanılabildiğiyle ilgili ayrıntıları öğrenmek için bu tablodan yararlanabilirsiniz.
Yapay Zeka | 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 önceki sürümler | Android sürümleri |
Java kaynak kodumu hangi JDK derler?
Java araç seti JDK, 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ır ve bir derlemeyi farklı makinelerde (örneğin, yerel makineniz ve ayrı bir Sürekli Entegrasyon sunucusu) çalıştırırsanız farklı JDK sürümleri kullanılırsa derlemenizin sonuçları farklılık gösterebilir.
Daha tutarlı bir derleme oluşturmak için Java araç zinciri sürümünü açıkça belirtebilirsiniz. Şunu belirtebilirsiniz:
- Derlemeyi çalıştıran sistemde uyumlu bir JDK bulur.
- Uyumlu bir JDK yoksa (ve bir araç zinciri çözümleyicisi tanımlanmışsa) bir tane indirir.
- Kaynak kodundan yapılan çağrılar için araç zinciri Java API'lerini gösterir.
- Java kaynak kodunu, Java dil sürümünü kullanarak derleyin.
sourceCompatibility
vetargetCompatibility
için varsayılan olarak tedarik edilir.
Her zaman Java araç zincirini belirtmenizi ve belirtilen JDK'nın yüklü olduğundan emin olmanızı veya derlemenize bir araç zinciri çözümleyicisi eklemenizi öneririz.
Kaynak kodunuz Java, Kotlin veya her ikisinde de yazılmış olabilir. Bu durumda, araç setini belirtebilirsiniz. Modülünüzün build.gradle(.kts)
dosyasının üst düzeyinde araç setini belirtin.
Java araç zinciri sürümünü şu şekilde belirtin:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Eski
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Bu yöntem, kaynağınız Kotlin, Java veya her ikisinin bir karışımıysa işe yarar.
Araç zinciri JDK sürümü, Gradle'i çalıştırmak için kullanılan JDK ile aynı olabilir ancak bunların farklı amaçlara hizmet ettiğini 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 build.gradle(.kts)
dosyasında sourceCompatibility
değerini aşağıdaki gibi belirtin:
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Eski
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Belirtilmezse bu özellik varsayılan olarak Java araç zinciri 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üme (ör. Java 8 veya sonraki sürümler) ayarlanır.
Kotlin veya Java kaynağımı derlediğimde hangi Java ikili özellikleri kullanılabilir?
targetCompatibility
ve jvmTarget
özellikleri, sırasıyla derlenmiş Java ve Kotlin kaynağı için bayt kodu oluştururken kullanılan Java sınıfı biçim sürümünü belirler.
Bazı Kotlin özellikleri, eşdeğer Java özellikleri eklenmeden önce mevcuttu.
İlk Kotlin derleyicileri bu Kotlin özelliklerini temsil etmek için kendi yöntemlerini oluşturmak zorundaydılar. Bu özelliklerden bazıları daha sonra Java'ya eklendi.
Daha sonraki jvmTarget
seviyelerinde Kotlin derleyicisi Java özelliğini doğrudan kullanabilir. Bu da daha iyi performansla sonuçlanabilir.
Android'in farklı sürümleri, Java'nın farklı sürümlerini destekler. targetCompatibility
ve jvmTarget
sayısını artırarak ek Java özelliklerinden yararlanabilirsiniz. Ancak bu durum, özelliğin kullanılabilmesi için minimum Android SDK sürümünüzü artırmanızı da zorunlu kılabilir.
targetCompatibility
değerinin sourceCompatibility
değerinden büyük veya buna eşit olması gerektiğini unutmayın. Uygulamada sourceCompatibility
, targetCompatibility
ve jvmTarget
genellikle aynı değeri kullanmalıdır.
Bu ayarları aşağıdaki şekilde ayarlayabilirsiniz:
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Eski
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ünü kullanı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 bir Java araç zinciri kullanmanızı öneririz.