Beschreibendes Bild für Seite: Java 8 APIs für die Android Entwicklung nutzen

Java 8 APIs für die Android Entwicklung nutzen

Wie oft erhalten wir Android-Entwickler eine Warnung wie: “Aufruf erfordert Api-Level 26 (aktuelles Minimum ist 21)” ? Eigentlich ziemlich oft. Das Problem bei Android ist, dass alte Geräte mit einer Dalvik Virtual Machine ausgeliefert wurden, die neuere Sprachfunktionen und APIs nicht unterstützt. Das kann von Zeit zu Zeit sehr frustrierend sein, denn neuere APIs sind in der Regel einfacher zu benutzen oder bieten nette Ergänzungen.

Zum Glück gibt es eine Lösung, wie wir bestimmte einschränkungen umgehen können: Desugaring.

Desugaring

Das Desugaring erfolgt über die neue D8/R8-Toolchain. Die Compilerchain wendet Transformationen auf den Bytecode an und schreibt ihn so um, dass die neuen Funktionen, die wir nutzen wollen, zurückportiert werden.

Weitere Informationen zu den R8/R8-Compilern findest du hier:

Verwendung der Java 8 Sprachfunktionen

Eine Voraussetzung für die Nutzung neuerer Sprachfunktionen ist die Verwendung des Android Gradle Plugins 3.0.0 oder höher.

Der erste Schritt besteht darin, Gradle mitzuteilen, dass wir die Java 8-Kompatibilität nutzen wollen:

android {
  ...
  // Needed for Java 8 compatibility (in Java AND Kotlin projects)
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // Apply Java 8 compatibility for kotlin
  kotlinOptions {
    jvmTarget = "1.8"
  }
  ...
}

Damit haben Sie bereits Zugriff auf:

  • Lamda-Ausdrücke
  • Methodenreferenzen
  • Wiederholende Annotationen
  • Statische und Default Methoden für Interfaces
  • Typ-Annotationen
  • Try-with-resources

Verwendung der Funktionen von Java 8-Klassen und APIs

Die Verwendung neuerer Klassen und APIs ist im obigen Ansatz nicht enthalten. Um weitere Unterstützung zu aktivieren, muss dein Projekt mit Android Gradle Plugin 4.0.0 oder höher laufen.

Das Aktivieren der Unterstützung ist dabei sehr einfach. Es müssen lediglich zwei Zeilen zur App-level build.gradle Datei hinzugefügt werden:

android {
  ...
  compileOptions {
      ...
      coreLibraryDesugaringEnabled true
      ...
  }
  ...
}

dependencies {
  ...
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:x.x.x'
  ...
}

Damit erhälst du nun Unterstützung für viele java.time.-Klassen, java.util.stream.-Klassen und -Funktionen und mehr. Eine vollständige Liste findest du hier.

Zusätzliche Ressourcen zu Desugaring

Mehr Beiträge