Gradle Android Project с модулем Java 8

Как я уже видел в этой статье , Java 8 официально не поддерживается Android прямо сейчас. Поэтому мне интересно, если можно построить Android модуль с Java 7 и Java модулем (как зависимость) с Java 8 .

Например, я пытаюсь создать проект Gradle который будет содержать один модуль Android и один Java модуль в качестве зависимости. При использовании следующих compileOptions установленных для обоих модулей, все работает нормально.

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } 

Но если я попытаюсь изменить compileOptions для моего модуля Java чтобы

 compileJava { sourceCompatibility = 1.8 targetCompatibility = 1.8 } 

Я получаю следующую ошибку:

 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 

Итак, вопрос в том, что на самом деле возможно, что модуль Android скомпилирован с 1.7 версией и зависимым модулем Java составленным с 1.8 ? А если нет, то почему?

ОБНОВИТЬ:

Retrolamba для Gradle (упоминается @Saeed) хорош, однако они поддерживают только lambdas, поэтому не имеют доступа к Stream API , DateTime API и другим функциям. Представьте, если у нас есть файл *.jar построенный с помощью Java 8 (без кода Android ). Я думаю, что мы не можем использовать такой файл *.jar в качестве зависимости для модуля Android , потому что это байт-код не поддерживается ART или Dalvik , а только JVM для Java 8 .

Solutions Collecting From Web of "Gradle Android Project с модулем Java 8"

Android может поддерживать java 1.7 с API 19 (как вы видите в этом документе нет упоминания о java 1.8), а также он не использует JVM и не использует ART или Dalvik, поэтому он генерирует байт-код Dalvik .

Я думаю, что если мы хотим использовать java 1.8 как compileOptions возможно, время выполнения android не может понять некоторые новые функции в java 8, например lambda, поэтому gradle не позволяет вам скомпилировать ваш код, и вы получили это исключение.

Поэтому вам нужен трансформатор байт-кода для использования

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 

Прочтите этот учебник. Он преобразует ваши байт-коды для совместимости с java 7. Я тестировал это раньше, и он работает для меня.

Обновление 2016

Android N вводит поддержку функций языка Java 8 .