Android derlemelerindeki Java sürümleri

Kaynak kodunuz ister Java, ister Kotlin, isterse her iki dilde olsun JDK veya Java dili seçmeniz gereken birkaç yer var sürümü olarak düşünebilirsiniz.

Gradle yapısında JDK ilişkilerine genel bakış

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 geliştirme sürecinizin arka planında uygulamanızı oluşturun.
  • Cihazınızdan çağırabileceğiniz API'leri içeren kitaplıklar Kotlin veya Java kaynak kodu. Bazı işlevlerin Android'de kullanılabilir.
  • Java Sanal Makinesi (JVM), süreçleri yürüten Java uygulamaları. Android Studio IDE'yi çalıştırmak için JVM'yi kullanırsınız. ve Gradle geliştirme aracı. JVM, Android'de kullanılmaz. cihazlar veya emülatörler.
JetBrains Çalışma Zamanı (JBR)
. JetBrains Çalışma Zamanı (JBR) , Android Studio ile dağıtılan gelişmiş bir JDK'dır. Studio ve ilgili JetBrain'lerde kullanım için ç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'yi kullanmanızı öneririz. Dağıtıldı ve Android Studio ile test etmek için kullanılır. Optimum düzeyde performans için geliştirmeler Android Studio kullanımı. Bunu sağlamak için STUDIO_JDK özelliğini ayarlamayın. ortam değişkeni

Android Studio için başlangıç komut dosyaları aşağıda bir JVM'yi arar. sipariş:

  1. STUDIO_JDK ortam değişkeni
  2. studio.jdk dizini (Android Studio dağıtımında)
  3. Android Studio'da jbr dizini (JetBrains Runtime), ya da Önerilir.
  4. JDK_HOME ortam değişkeni
  5. JAVA_HOME ortam değişkeni
  6. PATH ortam değişkeninde java yürütülebilir dosya

Gradle derlemelerimi hangi JDK'nin çalıştıracağını nasıl seçebilirim?

Gradle'ı Android Studio'daki düğmeleri kullanarak çalıştırırsanız JDK, Gradle'ı çalıştırmak için Android Studio ayarları kullanılır. Gradle'ı bir terminalde çalıştırırsanız JAVA_HOME ortam değişkeni (ayarlanırsa) Gradle komut dosyalarını hangi JDK'nın çalıştıracağını belirler. Eğer JAVA_HOME ise ayarlanmadığında PATH ortamınızda java komutunu kullanır değişkenine eklenmelidir.

En tutarlı sonuçlar için JAVA_HOME ayarınızı yaptığınızdan emin olun ve Android Studio'daki JDK yapılandırmasını aynı şekilde JDK

Gradle, derlemenizi çalıştırırken arka plan programı adı verilen yapmalarına yardımcı olur. Bu işlem yeniden kullanılabilir, ancak derlemeler aynı JDK ve Gradle sürümünü kullanıyor. Yeniden kullanılıyor arka plan programı, yeni bir JVM başlatma ve derleme sistemini başlatma süresini kısaltır.

Farklı JDK veya Gradle sürümleriyle derleme başlatırsanız arka plan programları oluşturulur. Bu da daha fazla CPU ve bellek tüketir.

Android Studio'da Gradle JDK yapılandırması

Mevcut projenin Gradle JDK yapılandırmasını değiştirmek için Gradle'ı açın Dosya'dan (veya macOS'te Android Studio'da) > Ayarlar > Derleme, Yürütme, Dağıtım > Derleme Araçları > Gradle'a dokunun. Gradle JDK açılır menüde, aşağıdaki seçeneklerden birini tercih edebilirsiniz:

  • JAVA_HOME ve GRADLE_LOCAL_JAVA_HOME gibi makrolar
  • vendor-version biçimindeki jbr-17 gibi depolanan JDK tablosu girişleri Android yapılandırma dosyalarında
  • JDK indirme
  • Belirli bir JDK ekleme
  • İşletim sisteminin varsayılan JDK kurulumundan yerel olarak algılanan JDK'ler dizin

Belirlenen seçenek,gradleJvm projenin .idea/gradle.xml dosyası ve JDK yol çözünürlüğü Android Studio ile başlatıldığında Gradle.

Şekil 1. Android Studio'da Gradle JDK ayarları.

Makrolar, dinamik proje JDK yolu seçimini etkinleştirir:

  • JAVA_HOME: Aynı ada sahip ortam değişkenini kullanır
  • GRADLE_LOCAL_JAVA_HOME: java.home özelliğini kullanır. .gradle/config.properties dosyasıyla otomatik olarak oluşturulur.

Seçilen JDK, Gradle derlemenizi çalıştırmak ve JDK API'yi çözmek için kullanılır referansları almanız gerekir. Lütfen belirtildiğinde compileSdk, Java sembollerinin kullanımını daha da kısıtlar oluştururken kullanabileceğiniz birçok özellik vardır.

JDK'dan daha yüksek veya ona eşit bir JDK sürümü seçtiğinizden emin olun kullandığınız eklentiler tarafından kullanılan sürümler hakkında daha fazla bilgi edinin. Şunu belirlemek için: Android Gradle Eklentisi (AGP) için gereken minimum JDK sürümü hakkında daha fazla bilgi için uyumluluk tablosunu sürüm notlarına ekleyin.

Örneğin, Android Gradle Eklentisi sürüm 8.x için JDK 17 gerekir. Eski bir sürümle birlikte kullanan bir Gradle derlemesi çalıştırmaya şuna benzer bir mesaj bildirir:

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'lerden bazılarını kullanabilir, ancak tüm API'ler sağlayabilir. Android SDK'sı birçok Java kitaplık işlevinin uygulamalarını tanımlar olduğunu varsayalım. compileSdk özelliği, Kotlin veya Java kaynak kodunuzu derlerken kullanılacak Android SDK sürümü.

Kotlin

android {
    ...
    compileSdk = 33
}

Eski

android {
    ...
    compileSdk 33
}

Android'in her sürümü, JDK'nın belirli bir sürümünü ve API'lerini kullanabilirsiniz. Şurada bulunan bir Java API'sı kullanıyorsanız: belirtilen bölgede bulunmayan bir compileSdk minSdk, API'yi kullanabilirsiniz Android'in önceki sürümünde kullanılabilecek bir işlemle detogaring. Destekler için Desugaring yoluyla kullanılabilen Java 11+ API'leri sayfasına göz atın API'ler.

tarafından desteklenen Java sürümünü belirlemek için bu tabloyu kullanın ve hangi Java API'lerinin kullanılabilir olduğuyla ilgili ayrıntıları nerede bulabileceğinizi öğrenebilirsiniz.

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 altı Android sürümleri

Java kaynak kodumu hangi JDK derler?

Java araç zinciri JDK, herhangi bir Java'yı derlemek için kullanılan Java derleyicisini içerir. kaynak kodudur. Bu JDK, ayrıca derleme sırasında javadoc ve birim testlerini çalıştırır.

Araç zinciri, Gradle'ı çalıştırmak için kullanılan JDK'yi varsayılan olarak kullanır. Varsayılan değeri kullanıyorsanız ve derlemeyi farklı makinelerde (örneğin, yerel makineniz ayrı bir Sürekli Entegrasyon sunucusu), derlemenizin sonuçları farklı JDK sürümleri kullanılırsa farklılık gösterebilir.

Daha tutarlı bir derleme oluşturmak için, örneğin bir projenizde Java araç zinciri sürümü. Bunu belirtmek gerekirse:

  • 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 gelen çağrılar için araç zinciri Java API'lerini sunar.
  • Java kaynağını, Java dili sürümünü kullanarak derler.
  • sourceCompatibility ve targetCompatibility.

Java araç zincirini her zaman belirtmenizi ve belirtilen JDK yüklüyse veya araç zinciri çözümleyici ele alacağız.

Kaynak kodunuzun Java'da yazılıp yazılmadığını, araç zincirini Kotlin ya da her ikisi. Modülünüzün en üst düzeyinde araç zincirini build.gradle(.kts) dosyası yükleyin.

Java araç zinciri sürümünü şu şekilde belirtin:

Kotlin

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

Eski

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

Kaynağınız Kotlin, Java veya her ikisinin bir karışımıysa bu yöntem işe yarar.

Araç zinciri JDK sürümü, Gradle'ı çalıştırmak için kullanılan JDK ile aynı olabilir ancak farklı amaçlara hizmet ettiğini unutmayın.

Java kaynak kodumda hangi Java dili kaynak özelliklerini kullanabilirim?

sourceCompatibility özelliği, hangi Java dili özelliklerini belirler? , Java kaynağının derlenmesi sırasında kullanılabilir. Kotlin kaynağını etkilemez.

Herhangi bir değer belirtilmediyse varsayılan olarak Java araç zinciri veya JDK eskiden Gradle'ı çalıştırıyordu. Hedeflerinizi her zaman açıkça belirtmenizi öneririz: bir araç zinciri (tercih edilir) veya sourceCompatibility.

Modülünüzün build.gradle(.kts) dosyasında sourceCompatibility öğesini belirtin.

Kotlin

android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
    }
}

Eski

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
    }
}

Kotlin veya Java kaynağımı derlerken hangi Java ikili programı özellikleri kullanılabilir?

targetCompatibility ve jvmTarget belirtildiğinde Java'yı belirler derlenmiş Java ve Kotlin için bayt kodu oluştururken kullanılan sınıf biçimli sürüm kaynak bölümüne yerleştirin.

Bazı Kotlin özellikleri, eşdeğer Java özellikleri eklenmeden önce mevcuttu. İlk Kotlin derleyicileri, bu Kotlin'leri temsil etmek için kendi yöntemlerini oluşturmak zorunda kaldı. özellikleri. Bu özelliklerden bazıları daha sonra Java'ya eklendi. Daha sonraki jvmTarget seviyelerinde Kotlin derleyicisi, isteyerek daha iyi performans sağlayabilir.

targetCompatibility, varsayılan olarak sourceCompatibility, ancak belirtilirse sourceCompatibility değerinden büyük veya buna eşit olmalıdır.

jvmTarget varsayılan olarak araç zinciri sürümüne ayarlanır.

Android'in farklı sürümleri farklı Java sürümlerini destekler. Şunları yapabilirsiniz: iyi bir performans gösterecek ve bunu targetCompatibility ve jvmTarget. Ancak bu işlem şunları da zorunlu kılabilir: artır minimum Android SDK sürümünün yararlanabilirsiniz.

Kotlin

android {
    compileOptions {
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

Eski

android {
    compileOptions {
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget '17'
    }
}