2016-05-01 5 views
2

Я работаю над проектом Android, где модель написана только в java и зависит от остальной части проекта (view, controller), написанной на "android-java ».
Недавно я переключился с android studio 1.3 на 2.1 и начал использовать java 8 в модели. Он отлично компилируется, поскольку восстановление проекта не вызывает ошибок.
(Иногда я получаю «Лямбда-выражения не поддерживаются на этом уровне языка», но это можно решить, нажав на красную лампочку, которая предлагает установить уровень языка на 8)
Теперь, когда я запускаю приложение, Я получаю ~ 40 ошибок, которые выглядят как эта (с другим файлом класс каждого):Как включить подпроект java 8 в проект Android

...while parsing /foo/ba/xy.class 
Error:Error converting bytecode to dex: 
Cause: Dex cannot parse version 52 byte code. 
This is caused by library dependencies that have been compiled using Java 8 or above. 
If you are using the 'java' gradle plugin in a library submodule add 
targetCompatibility = '1.7' 
sourceCompatibility = '1.7' 
to that submodule's build.gradle file. 

This вопрос очень похож, но я могу указать, что источник моих ошибок не содержит андроиду определенного кода (и имею, таким образом, no android-block, в моем файле gradle).
Очевидный выбор теперь добавить

targetCompatibility = '1.7' 
sourceCompatibility = '1.7' 

в файл build.gradle этого подмодуль в.
Это вызывает первый вопрос: почему sourceCompatibility = '1.7'? Я хочу использовать java 8!
Но, несмотря на это, я не знаю, как добавить эти 2 строки файла build.gradle. Файл в вопросе выглядит следующим образом:

apply plugin: 'java' 

dependencies { 
    testCompile 'junit:junit:4.7' 
    testCompile 'org.apache.directory.studio:org.apache.commons.io:2.4' 
    testCompile 'org.kie.modules:org-apache-commons-lang3:6.3.0.CR1' 
} 

Покушение 1: добавить обе линии непосредственно в строке 2
получить «лямбда-выражения не поддерживается на этом уровне языка» снова, нажмите красную лампу снова, 1.7 является изменен на 1.8 в обеих строках.
восстановление успешно, попробуйте бежать.
получить 107 ошибок, как указано выше, и установить как 1.7.
Установите targetCompatibility в 1.7 и sourceCompatibility к 1.8, потому что кажется логичным: получить

Error:Execution failed for task ':xxxxmodel:compileJava'. 
> Compilation failed; see the compiler error output for details. 

окно Gradle говорит

javacTask: target release 1.7 conflicts with default source release 1.8 

Я не могу найти выход ошибки компилятора однако.

Попытка 2: добавить

apply plugin: 'com.android.application' 

android { 
    targetCompatibility = '1.7' 
    sourceCompatibility = '1.7' 
} 

Получить Error:Cause: buildToolsVersion is not specified.

+0

The Android SDK не может скомпилировать Java 8 код. Это просто –

+0

Пожалуйста, разместите свой код. – Lampard

+0

@ cricket_007 Я знаю, что я не могу использовать java 8 в самом андроиде, но при использовании библиотеки не имеет значения, в какую версию Java она написана, верно? – peer

ответ

0

Я столкнулся с аналогичной проблемой.

В build.gradle файле, где

apply plugin: 'java' 

написано, просто заменить то же самое с

allprojects { 
apply plugin: 'java' 
sourceCompatibility = 1.7 
targetCompatibility = 1.7 
} 
Смежные вопросы