Das Android-Gradle-Plug-in 3.0.0 und höher unterstützt alle Java 7-Sprachfunktionen sowie eine Untergruppe der Java 8-Sprachfunktionen, die je nach Plattformversion variieren. Wann? zum Erstellen Ihrer App mit dem Android-Gradle-Plug-in 4.0.0 und höher verwenden, können Sie einige Java 8-Sprach-APIs verwenden, ohne dass ein Mindest-API-Level für Ihr
Auf dieser Seite werden die Java 8-Sprachfunktionen, die Sie verwenden können, sowie und Ihr Projekt für deren Verwendung konfigurieren. Weitere Informationen zu bekannten Problemen. Das folgende Video bietet einen Überblick über die Sprachfunktionen von Java 8.
Das Android-Gradle-Plug-in unterstützt die Verwendung bestimmter Java 8-Versionen
Sprachfunktionen und Bibliotheken
von Drittanbietern, die sie verwenden. Die Standard-Toolchain
die neuen Sprachfunktionen implementiert, indem
Bytecode-Transformationen mit der Bezeichnung desugar
im Rahmen der D8/R8-Kompilierung
Klassendateien in DEX-Code umwandeln, wie in Abbildung 1 dargestellt.
![Unterstützung der Java 8-Sprachfunktionen mit dem Bytecode „desugar“
Transformationen](https://developer.android.google.cn/static/studio/images/write/desugar_diagram.png?authuser=8&hl=de)
desugar
Bytecode-Transformationen.
Unterstützung von Java 8-Sprachfunktionen (Android-Gradle-Plug-in 3.0.0 oder höher)
So nutzen Sie die unterstützten Java 8-Sprachfunktionen:
- Android-Gradle-Plug-in aktualisieren bis 3.0.0 oder höher.
- Für jedes Modul, das Java 8 verwendet,
Sprachmerkmale (entweder im Quellcode oder über Abhängigkeiten)
Aktualisieren Sie 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" } }
Cool
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 und höher erstellen, unterstützt das Plug-in nicht alle Java 8-Sprachfunktionen. Die folgende Sprache Funktionen sind auf jeder API-Ebene verfügbar:
Java 8-Sprachfunktion | Hinweise |
---|---|
Lambda-Ausdrücke | Android unterstützt die Serialisierung von Lambda-Ausdrücke verwendet werden. |
Methodenreferenzen | |
Anmerkungen eingeben | Informationen zu Typanmerkungen sind erst bei der Kompilierung verfügbar.
nicht während der Laufzeit. Die Plattform unterstützt
TYPE
in API-Level 24 und niedriger, aber nicht ElementType.TYPE_USE oder
ElementType.TYPE_PARAMETER
|
Standardmäßige und statische Schnittstellenmethoden | |
Wiederholte Anmerkungen |
Zusätzlich zu diesen Java 8-Sprachfunktionen bietet das Android-Gradle-Plug-in
3.0.0 und höher erweitern den Support für
<ph type="x-smartling-placeholder"></ph>
try
-with-resources auf alle Android API-Ebenen.
Desugar unterstützt keine
MethodHandle.invoke
oder
MethodHandle.invokeExact
Wenn Ihr Quellcode oder eine Ihrer Modulabhängigkeiten eine dieser Methoden verwendet,
müssen Sie mindestens minSdkVersion 26
angeben. Andernfalls erhalten Sie die
folgenden Fehler:
Dex: Error converting bytecode to dex:
Cause: signature-polymorphic method called without --min-sdk-version >= 26
In einigen Fällen verwendet dein Modul invoke
oder invokeExact
nicht
auch wenn sie in einer Bibliotheksabhängigkeit enthalten sind. Zur weiteren Verwendung
mit minSdkVersion 25
oder niedriger,
Code verkleinern zum Entfernen
nicht verwendeten Methoden. Sollte dies nicht funktionieren, können Sie eine alternative Bibliothek verwenden,
nicht die nicht unterstützten Methoden verwendet.
Deugaring der Sprachfeatures von Java 8 und höher im Android-Gradle-Plug-in
Plug-ins 3.0.0 und höher und erstellt keine zusätzlichen Klassen und APIs,
(z. B. java.util.stream.*
) zur Verwendung mit älteren Android-Releases verfügbar.
Unterstützung für die teilweise Java API-Desugarierung ist über die Android-Gradle-Version verfügbar.
Plug-ins 4.0.0 oder höher, wie im folgenden Abschnitt beschrieben.
Unterstützung für das API-Degugaring mit Java 8 und höher (Android-Gradle-Plug-in ab Version 4.0.0)
Wenn Sie Ihre App mit dem Android-Gradle-Plug-in ab Version 4.0.0 erstellen, erweitert die Unterstützung für die Verwendung einer Reihe von Java 8-Sprach-APIs ohne für Ihre App ein Mindest-API-Level erforderlich ist. Mit dem Android-Gradle-Plug-in 7.4.0 oder sind auch einige Java 11-Sprach-APIs verfügbar. Bibliothek 2.0.0 oder höher.
Diese zusätzliche Unterstützung für ältere Plattformversionen ist möglich,
Ab 4.0.0 wird die Desugaring-Engine auch auf die Java-Sprache Desugar erweitert.
APIs Sie können APIs für die Standardsprache hinzufügen, die bisher nur in folgenden Sprachen verfügbar waren:
neuere Android-Releases (z. B. java.util.streams
) in Apps, die ältere
Versionen von Android.
Die folgenden APIs werden beim Erstellen Ihrer App mit Android unterstützt Gradle-Plug-in ab Version 4.0.0:
- Sequenzielle Streams (
java.util.stream
) - Eine Teilmenge von
java.time
java.util.function
- Kürzlich hinzugefügte Elemente in
java.util.{Map,Collection,Comparator}
- Optionale (
java.util.Optional
,java.util.OptionalInt
undjava.util.OptionalDouble
) und einige neue Kurse - Einige Ergänzungen zu
java.util.concurrent.atomic
(neue Methoden zuAtomicInteger
,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. eine Teilmenge des java.nio.file
-Pakets.
Eine vollständige Liste der unterstützten APIs finden Sie unter APIs für Java ab Version 8, die durch Desugaring verfügbar sind und Über die Desugaring-Funktion verfügbare Java 11+ APIs
Zur Unterstützung dieser Sprach-APIs kompiliert das Plug-in eine separate DEX-Datei die eine Implementierung der fehlenden APIs enthält und sie in Ihre App einbindet. Bei der Desugarierung wird der Code Ihrer App so umgeschrieben, dass diese Bibliothek stattdessen unter Laufzeit.
Um die Unterstützung dieser Sprach-APIs auf allen Android-Versionen zu aktivieren Plattform:
- Android-Gradle-Plug-in aktualisieren bis 4.0.0 (oder höher).
- Nehmen Sie Folgendes in Ihr App-Modul auf:
Datei
build.gradle
oderbuild.gradle.kts
:
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") }
Cool
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 auch das vorherige Code-Snippet in eine Bibliothek einfügen.
build.gradle
- oder build.gradle.kts
-Datei des Moduls, wenn:
Die instrumentierten Tests des Bibliotheksmoduls verwenden diese Sprach-APIs (entweder direkt oder über das Bibliotheksmodul oder dessen Abhängigkeiten). Dadurch wird Die fehlenden APIs werden für das instrumentierte Test-APK bereitgestellt.
Sie möchten Lint isoliert für das Bibliotheksmodul ausführen. Dies soll helfen, „Lint“ erkennt gültige Nutzungen der Sprach-APIs und verhindert, dass falsche Angaben gemacht werden Warnungen.
Beachten Sie außerdem, dass die API-Entugarierung mit der Verkleinerung kombiniert werden kann, mit dem R8-Schrumpfer.
Versionen
In der folgenden Tabelle sind die Versionen der API-Bibliothek für Java 8+ und der Mindestversion des Android-Gradle-Plug-ins, die die einzelnen Versionen unterstützt:
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+ finden Sie in der
Datei CHANGELOG.md
im GitHub-Repository desugar_jdk_libs
.