Wiem już, że pytanie było już zadawane bardzo często i odpowiedzi, ale żadna z odpowiedzi, które znalazłem, nie rozwiązała mojego problemu.
To jest błąd:
Error:Gradle: Execution failed for task ':ffcommunity:preDexDebug'.
com.android.ide.common.internal.LoggedErrorException: Failed to run command:
D:\Android SDK\sdk\build-tools\20.0.0\dx.bat --dex --output D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\build\intermediates\pre-dexed\debug\bananaquery-2ee85432877a057e7414910b8127805535139d5d.jar D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\libs\bananaquery.jar
Error Code:
1
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.processClass(Main.java:665)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
at com.android.dx.command.dexer.Main.access$600(Main.java:78)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:596)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
1 error; aborting
Błąd jest bad class file magic (cafebabe) or version (0034.0000)
.
Zbudowałem i uruchomiłem aplikację bez problemów wiele razy w tym samym dniu, ale teraz kończy się to niepowodzeniem z tym komunikatem.
Projekt SDK jest, Android API 19 Platform
a poziom projektu to 1.7
.
CompileSDK to, 19
a buildToolsVersion to '20.0.0'
.
Opcje kompilacji:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
i dependencies
mam:
compile files('libs/bananaquery.jar')
Biblioteka jest budowana za pomocą SDK na Android API 19 Platform
poziomie projektu 1.7
.
Mój .jar
plik znajduje się w libs/
folderze.
Używam IntelliJ IDEA 14 Preview, to może być powód? Dzięki IntellIJ IDEA 13 utknął w „synchronizacji Gradle”
Pliki kompilacji mogą być bezużyteczne, ponieważ ja compile fileTree(dir: 'libs', include: ['*.jar'])
też
źródło
Odpowiedzi:
moja
JAVA_HOME
zmienna została zmieniona na Java 1.8 i otrzymałem ten komunikat o błędzie podczas kompilowania czystego modułu Java jako zależność mojego projektu na Androida.build.gradle modułu java
Rozwiązanie 1: Szybko i brudno
Naprawiłem to, ustawiając
JAVA_HOME
plecy na 1.7:Rozwiązanie nr 2: Zmień wersję kompilatora:
Zmień z powrotem na 1.7 dla tego konkretnego modułu w jego build.gradle
źródło
compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 }
Ok, moja wina.
W sekcji Project SDK, kiedy dodajesz a
Android SDK
, powinieneś podać,Java SDK
a wszystkie moje Android SDK używają Java 8 jako SDK, więc tworzy pliki klas z niewłaściwą wersją, nawet jeśli poziom projektu to1.7
(nie wiem dlaczego, przypuszczałem że wszystko zostało wybrane na poziomie projektu).Teraz zmieniłem SDK (
java version "1.x.0"
część.)i wydaje się, że kompiluje się dobrze.
Powodem, który działał wcześniej, było to, że mój SDK był
1.8
i nieAndroid API x
źródło
Jeśli ludzie uznają odpowiedź @Marco Acierno za nieco niejasną, rozwiązaniem jest upewnienie się, że tworzysz w Javie 7, a nie w wyższej wersji.
W przypadku Android Studio zmień
File -> Project Structure -> SDK Location -> JDK Location
najdk1.7.x
. W przypadku wiersza poleceń upewnij się, że danejava -version
wyjściowejava version "1.7.x"
.źródło
Ustawienie JAVA_HOME z powrotem na 1.7 działało dla mnie.
źródło
zmień wszystkie wersje swojego modułu java na java 1.7 w każdym pliku build.grade.
we wtyczce będącej biblioteką i aplikacją
i java
źródło
Ten problem występuje, gdy używany jest
.jar
plik, który nie korzysta z żadnej funkcji języka Java 6 lub nowszej, ale został utworzony przy użyciu języka Java 6 lub nowszego.Jeśli utworzyłeś ten
.jar
plik, nie musisz niczego zmieniać wGradle
lubProGuard
lubCompiler Version
. Rozwiązanie jest bardzo proste, po prostu zbuduj ten.jar
plik ponownie, ale używając Java 5 lub mniej .Więcej szczegółów .
źródło
Miałem podobny problem, rozwiązałem go poprzez aktualizację mojego proguarda. pobierz swoją wersję proguard za pomocą tego polecenia
pobierz najnowszy plik progaurd.jar stąd ( http://proguard.sourceforge.net )
zastąp istniejący android-sdks / tools / proguard / lib / proguard.jar nowym plikiem .jar.
Mam nadzieję, że to powinno ci pomóc. Jeśli używasz java 8, powinieneś zaktualizować do proguard 5.x coz proguard 4.x nie obsługuje java 8.
źródło
miał podobny problem, gdy próbowałem dodać samodzielnie utworzoną bibliotekę z netbeans do studia Android. Ustawienie kompatybilności źródła i celu w Android Studio oraz formatu źródłowego / binarnego w netbeans (oba!) na java 1.7 rozwiązało problem.
w Android Studio:
Struktura projektu -> Moduły / aplikacja -> Właściwości -> Źródło i cel do wersji 1.7
w netbeans:
Plik -> Właściwości projektu -> Źródła -> Źródło / Format binarny do wersji 1.7
następnie wyczyść i stwórz swój projekt netbeans i skopiuj .jar z „NBProj / dist” do „app / libs”
źródło
udostępnij rozwiązanie przypadku, jeśli zainstalowana jest tylko Java8, po prostu ustaw poziom kompilatora Java na 1.7, a następnie przebuduj projekt powinien być OK.
źródło
Wystąpił błąd podczas korzystania z biblioteki innej firmy. Zgodnie z powyższym pytaniem konieczna była wymiana biblioteki zgodnie z powyższym komunikatem śledzenia stosu:
z odpowiednią wersją.
Odpowiadając na pytanie,
bananaquery.jar
ma zostać zastąpiona wersją kompatybilną z Javą.źródło