Android Gradle eklentisi 3.0.0 ve sonraki sürümler tüm Java 7 dil özelliklerini destekler ve platform sürümüne göre değişen Java 8 dili özelliklerinin bir alt kümesi de bulunmaktadır. Zaman uygulamanızı geliştirmek için Android Gradle eklentisi 4.0.0 ve sonraki bir sürümünü kullanarak API düzeyi gerekmeden bazı Java 8 language API'lerini kullanabilirsiniz uygulamasını indirin.
Bu sayfada, kullanabileceğiniz Java 8 dil özellikleri ve bu özellikleri doğru projenizi ve karşılaşabileceğiniz bilinen sorunları belirleyin. Java 8'in dil özelliklerine genel bir bakış için aşağıdaki videoyu izleyin.
Android Gradle eklentisi, belirli Java 8 sürümlerinin kullanımı için yerleşik destek sağlar.
dil özellikleri ve bunları kullanan üçüncü taraf kitaplıklar hakkında daha fazla bilgi edinin. Varsayılan araç zinciri
uygulayarak yeni dil özelliklerini kullanıma sunuyor.
D8/R8 derlemesinin parçası olarak desugar
adlı bayt kodu dönüşümleri
Şekil 1'de gösterildiği gibi, sınıf dosyalarını DEX koduna dönüştürün.
Java 8 dil özelliği desteği (Android Gradle Eklentisi 3.0.0+)
Desteklenen Java 8 dil özelliklerini kullanmaya başlamak için:
- Android Gradle eklentisini güncelleme 3.0.0 veya daha yüksek bir sürüme güncelleyin.
- Java 8 kullanan her modül için
dil özellikleri (kaynak kodunda veya bağımlılıklar yoluyla)
modülün
build.gradle
veyabuild.gradle.kts
dosyasını aşağıda gösterildiği gibi güncelleyin:
Kotlin
android { ... // Configure only for each module that uses Java 8 // language features (either in its source code or // through dependencies). compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } // For Kotlin projects kotlinOptions { jvmTarget = "1.8" } }
Eski
android { ... // Configure only for each module that uses Java 8 // language features (either in its source code or // through dependencies). compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // For Kotlin projects kotlinOptions { jvmTarget = "1.8" } }
Android Gradle eklentisi 3.0.0 ve sonraki sürümleri kullanarak uygulamanızı oluştururken eklentisi tüm Java 8 dil özelliklerini desteklemiyor. Şu dil özellikleri tüm API düzeylerinde kullanılabilir:
Java 8 dil özelliği | Notlar |
---|---|
Lambda ifadeleri | Android, iletilerin serileştirilmesini desteklemez lambda ifadeleri. |
Yöntem referansları | |
Ek açıklamaları yazma | Tür ek açıklaması bilgileri yalnızca derleme zamanında kullanılabilir.
çalışma zamanında değil. Platform,
TYPE
API düzeyi 24 ve önceki sürümlerde kullanılabilir, ancak ElementType.TYPE_USE veya
ElementType.TYPE_PARAMETER .
|
Varsayılan ve statik arayüz yöntemleri | |
Tekrarlanan ek açıklamalar |
Bu Java 8 dil özelliklerine ek olarak, Android Gradle eklentisi
3.0.0 ve daha yeni sürümler için
Tüm Android API düzeyleri için try
-kaynaklarla birlikte.
Desugar desteklemez
MethodHandle.invoke
veya
MethodHandle.invokeExact
.
Kaynak kodunuz veya modül bağımlılıklarınızdan biri bu yöntemlerden birini kullanıyorsa
minSdkVersion 26
veya daha yüksek bir değer belirtmelisiniz. Aksi takdirde
şu hata oluştu:
Dex: Error converting bytecode to dex:
Cause: signature-polymorphic method called without --min-sdk-version >= 26
Bazı durumlarda, modülünüz invoke
veya invokeExact
kullanmıyor olabilir
yöntemlerine göz atmanızı öneririm. Kullanmaya devam etmek için
minSdkVersion 25
veya daha düşük bir sürümü içeren
kaldırmak için kod küçültmeyi etkinleştirin
en iyi uygulamaları paylaşacağız. Bu işe yaramazsa şuna benzeyen alternatif bir kitaplık kullanmayı düşünün:
desteklenmeyen yöntemleri kullanmıyor.
Android Gradle'da Java 8+ dil özellikleri sadeleştiriliyor
eklentisi 3.0.0 ve daha yeni bir sürümle birlikte, herhangi bir ek sınıf ve API gerektirmez.
(ör. java.util.stream.*
) eski Android sürümlerinde kullanılabilir.
Android Gradle'dan kısmi Java API sadeleştirme desteği alabilirsiniz
eklentisi 4.0.0 veya üzeri bir sürüm olmalıdır.
Java 8+ API çözümleme desteği (Android Gradle Eklentisi 4.0.0+)
Uygulamanızı Android Gradle eklentisi 4.0.0 veya üstünü kullanarak oluşturuyorsanız eklentisi, API olmadan çeşitli Java 8 dilindeki API'lerin kullanımı için desteğin kapsamını genişletir. Uygulamanız için minimum API düzeyi gerekli. Android Gradle eklentisi 7.4.0 veya API'lerin kullanıma sunulmamış, kitaplık 2.0.0 veya üzeri sürümlerdir.
Eski platform sürümleri için bu ek destek sunulduğundan
4.0.0 ve daha yüksek sürümler
API'ler. Yalnızca şurada kullanıma sunulan standart dil API'lerini dahil edebilirsiniz:
daha eski sürümleri destekleyen uygulamalarda son Android sürümleri (ör. java.util.streams
)
Android'in sürümleri.
Uygulamanızı Android kullanarak oluştururken aşağıdaki API grupları desteklenir Gradle eklentisi 4.0.0 veya sonraki sürümler:
- Sıralı akışlar (
java.util.stream
) java.time
alt kümesijava.util.function
java.util.{Map,Collection,Comparator}
grubuna yapılan son eklemeler- İsteğe bağlılar (
java.util.Optional
,java.util.OptionalInt
vejava.util.OptionalDouble
) ve bazı yeni sınıflar java.util.concurrent.atomic
işlevine yapılan bazı eklemeler (yeni yöntemler açıkAtomicInteger
,AtomicLong
veAtomicReference
)ConcurrentHashMap
(Android 5.0 için hata düzeltmeleriyle birlikte)
Android Gradle eklentisi 7.4.0 veya sonraki sürümleri ile ek Java 11 API'leri
java.nio.file
paketinin bir alt kümesi gibi desteklenir.
Desteklenen API'lerin tam listesi için şu adresi ziyaret edin: Detaylandırma yoluyla kullanıma sunulan Java 8+ API'leri ve Kodsuzluğun azaltılmasıyla Java 11 ve sonraki sürümlerin API'leri kullanılabilir.
Eklenti, bu dil API'lerini desteklemek için ayrı bir DEX dosyası derler eksik API'lerin bir uygulamasını içeren ve uygulamanıza dahil eden bir kod snippet'i ekleyin. Sadeleştirme işlemi, uygulamanızın kodunu yeniden yazar. Bu kitaplık, aşağıdaki adreste kullanılır: belirler.
Android'in herhangi bir sürümünde bu dil API'lerine yönelik desteği etkinleştirmek için platform:
- Android Gradle eklentisini güncelleme 4.0.0 (veya üzeri) olarak güncelleyin.
- Aşağıdakileri uygulama modülünüze ekleyin:
build.gradle
veyabuild.gradle.kts
dosyası:
Kotlin
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled = true } compileOptions { // Flag to enable support for the new language APIs // For AGP 4.1+ isCoreLibraryDesugaringEnabled = true // For AGP 4.0 // coreLibraryDesugaringEnabled = true // Sets Java compatibility to Java 8 sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } dependencies { // For AGP 7.4+ coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") // For AGP 7.3 // coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.3") // For AGP 4.0 to 7.2 // coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.9") }
Eski
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled true } compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true // Sets Java compatibility to Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { // For AGP 7.4+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3' // For AGP 7.3 // coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.3' // For AGP 4.0 to 7.2 // coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.9' }
Önceki kod snippet'ini bir kitaplığa eklemeniz gerekebileceğini unutmayın
aşağıdaki durumlarda modülün build.gradle
veya build.gradle.kts
dosyasını yükleyin:
Kitaplık modülünün araçlı testleri, şu dil API'lerini kullanır (veya veya kitaplık modülü ya da bağımlılıkları) üzerinden satın alabilirsiniz. Böylece, eksik API'ler, araçlarlı test APK'nız için sağlanır.
Kitaplık modülünde lint'i ayrı olarak çalıştırmak istiyorsunuz. Bu öneri, Dil API'lerinin geçerli kullanımlarını lint tanıma ve yanlışlık bildirmeden kaçınma uyarılar.
Ayrıca API'lerin sadeleştirilmesinin sadece küçültme ile birlikte kullanılabileceğini unutmayın. kullanırken ortaya çıkar.
Sürümler
Aşağıdaki tabloda Java 8+ API kitaplığının sürümleri ve Her sürümü destekleyen minimum Android Gradle eklentisi sürümü:
Sürüm | Minimum Android Gradle eklentisi sürümü |
---|---|
1.1.9 | 4.0.0 |
1.2.3 | 7.3.0 |
2.0.3 | 7.4.0-alfa10 |
Java 8+ API kitaplığı sürümleri hakkında ayrıntılı bilgi için bkz.
CHANGELOG.md dosyası
desugar_jdk_libs
GitHub deposunda.