Das Android Gradle-Plug-in 3.0.0 und höher unterstützt alle Java 7-Sprachfeatures und einen Teil der Java 8-Sprachfeatures, die je nach Plattformversion variieren. Wenn Sie Ihre App mit dem Android Gradle-Plug-in 4.0.0 oder höher erstellen, können Sie einige Java 8-Sprach-APIs verwenden, ohne dass für Ihre App eine Mindest-API-Ebene erforderlich ist.
Auf dieser Seite werden die Java 8-Sprachfeatures beschrieben, die Sie verwenden können, wie Sie Ihr Projekt richtig konfigurieren, um sie zu verwenden, und bekannte Probleme, die auftreten können. Im folgenden Video erhalten Sie einen Überblick über die Sprachfunktionen von Java 8.
Das Android Gradle-Plug-in bietet integrierte Unterstützung für die Verwendung bestimmter Java 8-Sprachfeatures und Drittanbieterbibliotheken, die diese verwenden. Die Standard-Toolchain implementiert die neuen Sprachfeatures, indem sie im Rahmen der D8/R8-Kompilierung von Klassendateien in DEX-Code Bytecode-Transformationen (desugar
) durchführt, wie in Abbildung 1 dargestellt.

desugar
-Bytecodetransformationen
Unterstützung für Java 8-Sprachfunktionen (Android Gradle Plugin 3.0.0 und höher)
So verwenden Sie unterstützte Java 8-Sprachfunktionen:
- Aktualisieren Sie das Android Gradle-Plug-in auf Version 3.0.0 oder höher.
- Aktualisieren Sie für jedes Modul, das Java 8-Sprachfeatures verwendet (entweder im Quellcode oder über Abhängigkeiten), die
build.gradle
- oderbuild.gradle.kts
-Datei des Moduls wie unten gezeigt:
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" } }
Groovy
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" } }
Wenn Sie Ihre App mit dem Android Gradle-Plug-in 3.0.0 oder höher erstellen, werden nicht alle Java 8-Sprachfunktionen unterstützt. Die folgenden Sprachfunktionen sind auf jeder API-Ebene verfügbar:
Java 8-Sprachfunktion | Hinweise |
---|---|
Lambda-Ausdrücke | Android unterstützt die Serialisierung von Lambda-Ausdrücken nicht. |
Methodenreferenzen | |
Typannotationen | Informationen zu Typanmerkungen sind nur zur Kompilierungszeit und nicht zur Laufzeit verfügbar. Die Plattform unterstützt TYPE auf API-Level 24 und niedriger, aber nicht ElementType.TYPE_USE oder ElementType.TYPE_PARAMETER .
|
Standard- und statische Schnittstellenmethoden | |
Wiederkehrende Anmerkungen |
Zusätzlich zu diesen Java 8-Sprachfeatures wird in den Android Gradle-Plug-in-Versionen 3.0.0 und höher die Unterstützung für
try
-with-resources auf alle Android API-Ebenen ausgeweitet.
Desugar unterstützt weder MethodHandle.invoke
noch MethodHandle.invokeExact
.
Wenn Ihr Quellcode oder eine Ihrer Modulabhängigkeiten eine dieser Methoden verwendet, müssen Sie minSdkVersion 26
oder höher angeben. Andernfalls erhalten Sie die folgende Fehlermeldung:
Dex: Error converting bytecode to dex:
Cause: signature-polymorphic method called without --min-sdk-version >= 26
In einigen Fällen werden die Methoden invoke
oder invokeExact
in Ihrem Modul möglicherweise nicht verwendet, auch wenn sie in einer Bibliotheksabhängigkeit enthalten sind. Wenn Sie diese Bibliothek weiterhin mit minSdkVersion 25
oder niedriger verwenden möchten, aktivieren Sie das Schrumpfen von Code, um nicht verwendete Methoden zu entfernen. Wenn das nicht funktioniert, können Sie eine alternative Bibliothek verwenden, die keine nicht unterstützten Methoden verwendet.
Java 8 und höher unterstützt die Desugaring-Funktion des Android Gradle-Plug-ins 3.0.0 und höher und stellt keine zusätzlichen Klassen und APIs (z. B. java.util.stream.*
) für die Verwendung auf älteren Android-Releases zur Verfügung.
Die Unterstützung für die teilweise Desugaring der Java API ist im Android Gradle-Plug-in 4.0.0 oder höher verfügbar, wie im folgenden Abschnitt beschrieben.
Unterstützung für die Desugaring-API von Java 8 und höher (Android Gradle Plugin 4.0.0 und höher)
Wenn Sie Ihre App mit dem Android Gradle-Plug-in 4.0.0 oder höher erstellen, wird die Unterstützung für die Verwendung einer Reihe von Java 8-Sprach-APIs erweitert, ohne dass eine Mindest-API-Ebene für Ihre App erforderlich ist. Mit dem Android Gradle-Plug-in 7.4.0 oder höher sind auch eine Reihe von Java 11-Sprach-APIs mit der desugared-Bibliothek 2.0.0 oder höher verfügbar.
Diese zusätzliche Unterstützung für ältere Plattformversionen ist möglich, da das Plug-in 4.0.0 und höher die Desugaring-Engine erweitert, um auch Java-Sprach-APIs zu desugarn. Sie können Standard-Sprach-APIs, die nur in den letzten Android-Releases (z. B. java.util.streams
) verfügbar waren, in Apps einbinden, die ältere Android-Versionen unterstützen.
Die folgenden APIs werden unterstützt, wenn Sie Ihre App mit dem Android Gradle-Plug-in 4.0.0 oder höher erstellen:
- Sequenzielle Streams (
java.util.stream
) - Eine Teilmenge von
java.time
java.util.function
- Neue Elemente in
java.util.{Map,Collection,Comparator}
- Optionale Parameter (
java.util.Optional
,java.util.OptionalInt
undjava.util.OptionalDouble
) und einige neue Klassen - Einige Ergänzungen zu
java.util.concurrent.atomic
(neue Methoden fürAtomicInteger
,AtomicLong
undAtomicReference
) ConcurrentHashMap
(mit Fehlerkorrekturen für Android 5.0)
Mit dem Android Gradle-Plug-in 7.4.0 oder höher werden zusätzliche Java 11 APIs unterstützt, z. B. ein Teil des java.nio.file
-Pakets.
Eine vollständige Liste der unterstützten APIs finden Sie unter Java 8 und höher – APIs, die durch Desugaring verfügbar sind und Java 11 und höher – APIs, die durch Desugaring verfügbar sind.
Zur Unterstützung dieser Sprach-APIs kompiliert das Plug-in eine separate DEX-Datei, die eine Implementierung der fehlenden APIs enthält, und fügt sie Ihrer App hinzu. Beim Entzug wird der Code Ihrer App neu geschrieben, damit stattdessen diese Bibliothek zur Laufzeit verwendet wird. Der in die separate DEX-Datei kompilierte Quellcode ist im GitHub-Repository desugar_jdk_libs verfügbar.
So aktivieren Sie die Unterstützung dieser Sprach-APIs auf jeder Version der Android-Plattform:
- Aktualisieren Sie das Android Gradle-Plug-in auf Version 4.0.0 oder höher.
- Fügen Sie der Datei
build.gradle
oderbuild.gradle.kts
Ihres App-Moduls Folgendes hinzu:
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") }
Groovy
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' }
Möglicherweise müssen Sie das vorherige Code-Snippet auch in die Datei build.gradle
oder build.gradle.kts
eines Bibliotheksmoduls einfügen, wenn:
Die instrumentierten Tests des Bibliotheksmoduls verwenden diese Sprach-APIs (entweder direkt oder über das Bibliotheksmodul oder seine Abhängigkeiten). So werden die fehlenden APIs für Ihr instrumentiertes Test-APK bereitgestellt.
Sie möchten Lint für das Bibliotheksmodul separat ausführen. So kann lint gültige Verwendungen der Sprach-APIs erkennen und falsche Warnungen vermeiden.
Beachten Sie auch, dass die Desugaring-Funktion der API mit dem Schrumpfen kombiniert werden kann, aber nur, wenn Sie den R8-Schrumpfer verwenden.
Versionen
In der folgenden Tabelle sind die Versionen der API-Bibliothek für Java 8 und höher und die Mindestversion des Android Gradle-Plug-ins aufgeführt, die für jede Version unterstützt werden:
Version | Mindestversion des Android-Gradle-Plug-ins |
---|---|
1.1.9 | 4.0.0 |
1.2.3 | 7.3.0 |
2.0.3 | 7.4.0-alpha10 |
Details zu den Versionen der API-Bibliothek für Java 8 und höher finden Sie in der CHANGELOG.md-Datei im GitHub-Repository von desugar_jdk_libs
.