2016-05-01 4 views
2

Ich arbeite an einem Android-Projekt, wo das Modell in Java allein geschrieben ist und eine Abhängigkeit für den Rest des Projekts (view, controller), geschrieben in "android-java ".
Ich habe vor kurzem von Android Studio 1.3 auf 2.1 umgestellt und begonnen, Java 8 im Modell zu verwenden. Es kompiliert insofern, als das erneute Erstellen des Projekts keine Fehler verursacht.
(Ich bekomme gelegentlich "Lambda-Ausdrücke werden nicht auf dieser Sprach-Ebene unterstützt", aber das kann durch Klicken auf die rote Glühbirne gelöst werden, die bietet die Sprachlevel auf 8)
Jetzt, wenn ich die App laufen, ich erhalte ~ 40 Fehler, die wie dies aussehen (mit einer anderen Klasse Datei jeder):Wie man ein Java 8 Teilprojekt in ein Android Projekt einbaut

...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 Frage ist sehr ähnlich, jedoch kann ich angeben, dass die Quelle meines Fehlers enthält keinen android-spezifischen Code (und habe somit kein Android-Block, in meiner Gradle-Datei).
Eine offensichtliche Wahl ist jetzt

targetCompatibility = '1.7' 
sourceCompatibility = '1.7' 

Zu diesem Submodul der build.gradle Datei hinzuzufügen.
Dies beginnt die erste Frage: Warum sourceCompatibility = '1.7'? Ich möchte Java 8 benutzen!
Aber unabhängig davon, ich weiß nicht, wie diese 2 Zeilen die build.gradle-Datei hinzufügen. Die betreffende Datei sieht wie folgt aus:

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' 
} 

Versuch 1: beide Linien in Zeile direkt hinzufügen 2
mal wieder „Lambda-Ausdrücke sind nicht in dieser Sprache Ebene unterstützt“, wieder rote Birne klicken, 1.7 ist geändert in 1.8 in beiden Zeilen.
Neuerstellung gelingt, versuche zu laufen.
bekomme 107 Fehler wie oben vorgeschlagen, ich setze beide auf 1.7.
Set targetCompatibility-1.7 und sourceCompatibility zu 1.8, weil es logisch erscheint:

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

Gradle Fenster bekommen, sagt

javacTask: target release 1.7 conflicts with default source release 1.8 

ich nicht den Compiler Fehlerausgang jedoch finden.

Versuch 2:

hinzufügen
apply plugin: 'com.android.application' 

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

Get Error:Cause: buildToolsVersion is not specified.

+0

Das Android SDK kann nicht Java-8 Code kompilieren. So einfach –

+0

Bitte poste deinen Code. – Lampard

+0

@ cricket_007 Ich weiß, dass ich Java 8 nicht in Android selbst verwenden kann, aber wenn Sie eine Bibliothek verwenden, sollte es egal sein, welche Java-Version es in geschrieben wurde, richtig? – peer

Antwort

0

ich das ähnliche Problem konfrontiert war.

In build.gradle Datei, in

apply plugin: 'java' 

geschrieben wird, ersetzt nur das gleiche mit

allprojects { 
apply plugin: 'java' 
sourceCompatibility = 1.7 
targetCompatibility = 1.7 
} 
Verwandte Themen