添加jar文件后的Android Studio preDexDebug [英] Android Studio preDexDebug After Adding jar File
问题描述
我有一个自己的框架,我用于课堂上的任务(学校课程,而不是Java课程),我把它变成了 .jar
文件,所以每当我对框架进行更改时,我都可以将其拖放到Android Studio中。在过去的5个左右的课程任务中,一切都运行良好,现在突然间我在解析 .jar时遇到
。我在一个空白项目上测试了这个。该项目共有2个 preDexDebug失败
错误单击运行后 .jar
s:Gson和我自己的jar。在我拉入自己的 .jar
之后,它打印出 preDexDebug失败
...我已经为此摔跤了两个令人愤怒的时间,我不知道我能做些什么来解决这个问题...
I have a framework of my own that I use for in-class tasks (school class, not Java class), and I made it into a .jar
file so that whenever I make changes to the framework, I can just drag and drop it into Android Studio. Everything worked well for the past 5 or so class tasks, and now all of a sudden I'm getting a preDexDebug failed
error when parsing my .jar
after clicking run. I tested this on a blank project. The project has a total of 2 .jar
s: Gson, and my own jar. It prints out preDexDebug failed
right after I pull in my own .jar
... I've wrestled with this for two infuriating hours, and I don't know what I can do to fix this at all...
我尝试过重建,清洁,检查 gradle.build
表示重复项,多次复制项目,以及多次编译和复制 .jar
。
I've tried rebuilding, cleaning, checking gradle.build
for duplicates, replicating the project multiple times, and also compiling and copying the .jar
multiple times as well.
Ubuntu x64,64位Oracle JDK 1.8.0_31。使用与JDK捆绑在一起的Java
Ubuntu x64 with 64 bit Oracle JDK 1.8.0_31. Using Java bundled with the JDK
Android Studio输出:
Android Studio output:
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"}
推荐答案
原来不支持Java 8通过Android SDK(或类似的东西)。在我的桌面上安装Oracle JDK 7,并重新编译我的 .jar
完全解决了这个问题。
Turns out Java 8 is not yet supported by the Android SDK (Or something along those lines). Installing Oracle JDK 7 on my desktop, and recompiling my .jar
fixed the issue completely.
最重要的部分是产生错误的第二行:坏类文件魔术(cafebabe)或版本(0034.0000)
。对于52,0x34是十六进制,这意味着二进制文件的目标是支持Java 8的JRE,但Android Studio的系统要求表明需要JDK 7
The most important part was in the second line of the error produced: "bad class file magic (cafebabe) or version (0034.0000)
". 0x34 is hex for 52, which means that the binaries are targeted for JREs that support Java 8, but Android Studio's system requirements state that JDK 7 is required
切换到的步骤Oracle JDK 7:
Steps to switch to Oracle JDK 7:
- 从Oracle网站下载JDK
.tar
- 解压缩内容至
/ opt /
-
sudo update-alternatives --install / bin / java java / opt / jdk * version * / jre / bin / java 1023
-
sudo update-alternatives --install / bin / javac javac / opt / jdk * version * / bin / javac 1023
-
sudo update-alternatives --install / bin / jar jar / opt / jdk * version * / bin / jar 1023
- Download JDK
.tar
from Oracle's site - Untar contents to
/opt/
sudo update-alternatives --install /bin/java java /opt/jdk*version*/jre/bin/java 1023
sudo update-alternatives --install /bin/javac javac /opt/jdk*version*/bin/javac 1023
sudo update-alternatives --install /bin/jar jar /opt/jdk*version*/bin/jar 1023
这篇关于添加jar文件后的Android Studio preDexDebug的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!