Я работаю над проектом 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.
The Android SDK не может скомпилировать Java 8 код. Это просто –
Пожалуйста, разместите свой код. – Lampard
@ cricket_007 Я знаю, что я не могу использовать java 8 в самом андроиде, но при использовании библиотеки не имеет значения, в какую версию Java она написана, верно? – peer