2015-02-22 20 views
5

Mam własny framework, którego używam do zadań w klasie (klasa szkolna, nie klasa Java), i zrobiłem to w pliku .jar, tak że za każdym razem, gdy wprowadzam zmiany w ramy, mogę po prostu przeciągnąć i upuścić go do Android Studio. Wszystko działało dobrze dla ostatnich 5 lub więcej zadań klasowych, a teraz nagle dostaję błąd preDexDebug failed podczas analizowania mojego .jar po kliknięciu przycisku Uruchom. Testowałem to na pustym projekcie. Projekt ma łącznie 2 .jar s: Gson i mój własny słoik. Wydaje się preDexDebug failed zaraz po tym, jak wyciągnę mój własny .jar ... Zmagałem się z tym przez dwie denerwujące godziny, i nie wiem, co mogę zrobić, aby to naprawić ...Android Studio preDexDebug Po dodaniu pliku JAR

Ja " ve próbował odbudować, wyczyścić, sprawdzić, czy nie ma duplikatów, replikować projekt wiele razy, a także wielokrotnie kompilować i kopiować .jar.

Ubuntu x64 z 64-bitową wersją Oracle JDK 1.8.0_31. Korzystanie Java w pakiecie z wyjściem JDK

Android Studio:

Configuration on demand is an incubating feature. 
:app:preBuild UP-TO-DATE 
:app:preDebugBuild UP-TO-DATE 
:app:compileDebugNdk UP-TO-DATE 
:app:checkDebugManifest 
:app:preReleaseBuild UP-TO-DATE 
:app:prepareComAndroidSupportAppcompatV72103Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportV42103Library UP-TO-DATE 
:app:prepareDebugDependencies 
:app:compileDebugAidl UP-TO-DATE 
:app:compileDebugRenderscript UP-TO-DATE 
:app:generateDebugBuildConfig UP-TO-DATE 
:app:generateDebugAssets UP-TO-DATE 
:app:mergeDebugAssets UP-TO-DATE 
:app:generateDebugResValues UP-TO-DATE 
:app:generateDebugResources UP-TO-DATE 
:app:mergeDebugResources UP-TO-DATE 
:app:processDebugManifest UP-TO-DATE 
:app:processDebugResources UP-TO-DATE 
:app:generateDebugSources UP-TO-DATE 
:app:compileDebugJava 
:app:preDexDebug 
AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"} 
AGPBI: {"kind":"SIMPLE","text":"com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)","position":{},"original":"com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processClass(Main.java:704)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processClass(Main.java:704)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.access$300(Main.java:83)","position":{},"original":"\tat com.android.dx.command.dexer.Main.access$300(Main.java:83)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)","position":{},"original":"\tat com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)","position":{},"original":"\tat com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)","position":{},"original":"\tat com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)","position":{},"original":"\tat com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processOne(Main.java:632)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processOne(Main.java:632)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)","position":{},"original":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)","position":{},"original":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)","position":{},"original":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.Main.main(Main.java:106)","position":{},"original":"\tat com.android.dx.command.Main.main(Main.java:106)"} 
AGPBI: {"kind":"SIMPLE","text":"...while parsing reactor/communications/ClientEndpointTCP.class","position":{},"original":"...while parsing reactor/communications/ClientEndpointTCP.class"} 
AGPBI: {"kind":"SIMPLE","text":"1 error; aborting","position":{},"original":"1 error; aborting"} 
+0

swój błąd na pewno sprawia, że ​​wyglądają jak można zmieniły coś w „reaktorze/Telekomunikacyjne/ClientEndpointTCP.class”, aby spowodować problem. To może być dobry czas, aby zacząć używać systemu kontroli wersji do śledzenia zmian w kodzie, dzięki czemu można z łatwością utworzyć kopię zapasową do znanej dobrej wersji i dowiedzieć się, jaka dokładna modyfikacja jest odpowiedzialna. –

+0

Właśnie zdałem sobie sprawę, że po raz pierwszy skompilowałem wszystko na moim pulpicie. To zawsze działało na moim laptopie, który ma OpenJDK 1.7, i jest jeszcze jedna osoba, która również miała tu błąd "zła magia". Zajrzałem do tego i wygląda na to, że Android SDK oficjalnie obsługuje tylko Java 7, więc teraz błąd ma sens. Mam zamiar spróbować skompilować na moim laptopie na chwilę – Alex

Odpowiedz

4

Okazuje się, Java 8 nie jest jeszcze obsługiwany przez Android SDK (lub coś wzdłuż tych linii). Instalowanie Oracle JDK 7 na moim komputerze i ponowna rekompilacja mojego .jar rozwiązała problem całkowicie.

Najważniejszą częścią był drugi wiersz wygenerowanego błędu: "bad class file magic (cafebabe) or version (0034.0000)". 0x34 jest hex do 52, co oznacza, że ​​pliki binarne są ukierunkowane na JRE, które obsługują Java 8, ale wymagania systemowe Android Studio stwierdzić, że JDK 7 jest wymagane

kroki, aby przejść do Oracle JDK 7:

  1. Pobierz JDK .tar ze strony Oracle
  2. rozpakuj zawartość do /opt/
  3. sudo update-alternatives --install /bin/java java /opt/jdk*version*/jre/bin/java 1023
  4. sudo update-alternatives --install /bin/javac javac /opt/jdk*version*/bin/javac 1023
  5. sudo update-alternatives --install /bin/jar jar /opt/jdk*version*/bin/jar 1023

https://askubuntu.com/questions/56104/how-can-i-install-sun-oracles-proprietary-java-jdk-6-7-8-or-jre

+0

Czy możesz podać link, jak przejść na Java 7? – matto1990

+0

Zaktualizowałem moją odpowiedź – Alex

Powiązane problemy