Gradle Android Projekt mit Java 8 Modul

Wie ich in diesem Beitrag gesehen habe , wird Java 8 jetzt nicht offiziell von Android unterstützt. Also bin ich interessiert, wenn es möglich ist, Android Modul mit Java 7 und Java Modul (als Abhängigkeit) mit Java 8 .

Als Beispiel versuche ich, ein Gradle Projekt zu erstellen, das ein Android Modul und ein Java Modul als Abhängigkeit enthält. Mit den folgenden compileOptions für beide Module gesetzt, funktioniert alles gut.

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } 

Aber wenn ich versuche, compileOptions für mein Java Modul zu ändern

 compileJava { sourceCompatibility = 1.8 targetCompatibility = 1.8 } 

Ich bekomme folgende Fehlermeldung:

 Error:Execution failed for task ':fc-android:preDexFreeDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 1 

Also die Frage, ist das eigentlich möglich, Android Modul kompiliert mit 1.7 Version und abhängigen Java Modul mit 1.8 kompiliert? Und wenn nicht, warum also?

AKTUALISIEREN:

Retrolamba für Gradle (erwähnt von @Saeed) ist gut, aber sie haben nur Unterstützung von Lambdas, also nicht Zugriff auf Stream API , DateTime API und andere Features. Stellen Sie sich vor, wenn wir *.jar Datei mit Java 8 (kein Android Code) erstellt haben. Ich denke, dass wir diese *.jar Datei nicht als Abhängigkeit für das Android Modul verwenden können, da der Bytecode nicht von ART oder Dalvik , sondern nur von JVM für Java 8 .

  • Android N Java8 java.time
  • Wie Jack (Java Android Compiler Kit) wird Scala Entwickler beeinflussen
  • Fehler in Android Studio 2.1 mit Java 8 bekommen
  • Importieren Sie einen neuen Android-Modul-Fehler für das JellyRefreshLayout-Modul
  • Android Compilation Zeit mit Jack ist extrem langsam
  • Gibt es eine Möglichkeit, Java 8 Features mit Android-Bibliothek Projekt verwenden?
  • Wird android java unterstützen lambda ausdruck in java 8?
  • Maven: Mit Java 8 Bibliotheken in Anwendungen, die mit Retrolambda-Maven-Plugin und DEX-ed mit Android-Maven-Plugin instrumentiert sind
  • One Solution collect form web for “Gradle Android Projekt mit Java 8 Modul”

    Android kann Java 1.7 seit API 19 unterstützen (wie Sie in diesem Dokument sehen, gibt es keine Erwähnung von Java 1.8) und auch es verwendet nicht JVM und mit ART oder Dalvik stattdessen, so erzeugt es Dalvik Bytecode .

    Ich denke, wenn wir wollen, um Java 1.8 als compileOptions vielleicht Android Laufzeit kann nicht verstehen, einige neue Features in Java 8 wie Lambda so gradle nicht zulassen, dass Sie Ihren Code zu kompilieren und Sie haben diese Ausnahme.

    Sie benötigen also einen Bytecode-Transformator

     compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 

    Lesen Sie dieses Tutorial. Es konvertiert Ihre Bytecodes, um mit Java zu kompatibel zu sein. Ich habe das vorher getestet und es funktioniert für mich.

    Update 2016

    Android N bietet Unterstützung für Java 8 Sprachfunktionen .

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.