3

今天我遇到了一个大规模的错误,不允许我在手机上运行示例项目。Android Studio意外的顶级例外:

当Android的工作室正在建设的项目,它首先说明了以下目标为UP-TO-DATE

.... 
:demoproject:processDebugResources UP-TO-DATE 
:demoproject:generateDebugSources UP-TO-DATE 
:demoproject:compileDebugJava UP-TO-DATE 
:demoproject:proguardDebug UP-TO-DATE 
.... 

有几十个在生成过程中这些UP-TO-DATE日志报表。然而,他们总是停在:demoproject:dexDebug。对于dexDebug,我似乎从未得到UP-TO-DATE日志语句。

相反,dexDebug后跟此错误:

:demoproject:dexDebug 
warning: Ignoring InnerClasses attribute for an anonymous inner class 
(com.xyz.corp.sample.project.demo.a) that doesn't come with an 
associated EnclosingMethod attribute. This class was probably produced by a 
compiler that did not target the modern .class file format. The recommended 
solution is to recompile the class from source, using an up-to-date compiler 
and without specifying any "-target" type options. The consequence of ignoring 
this warning is that reflective operations on this class will incorrectly 
indicate that it is *not* an inner class. 

现在有几十个,这些Ignoring InnerClasses attribute错误。它们甚至发生在v4支持库中的类中,这真是令人困惑。

最后,这些错误有一个新的语句结尾:

UNEXPECTED TOP-LEVEL EXCEPTION: 
at com.android.dx.command.dexer.Main.access$300(Main.java:83) 
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472) 
at com.android.dx.command.dexer.Main.main(Main.java:215) 
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280) 
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) 
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602) 
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 
at com.android.dx.command.dexer.Main.run(Main.java:246) 
at com.android.dx.command.dexer.Main.processOne(Main.java:632) 
at com.android.dx.command.Main.main(Main.java:106) 
...while parsing com/xyz/corp/sdk/AbcSDKConfig.class 
1 error; aborting 
Error:Execution failed for task ':demoproject:dexDebug'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_40\bin\java.exe'' finished with non-zero exit value 1 
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) 
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673) 
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) 
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510) 
...while parsing com/xyz/corp/sdk/AbcSDKConfig.class 
1 error; aborting 
at com.android.dx.command.dexer.Main.processClass(Main.java:704) 
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) 

我已经咨询了以下链接:

Gradle finished with non-zero exit value 1

2.What is the “Ignoring InnerClasses attribute” warning output during compilation?

我不确定它们是否适用于我的情况。我甚至没有能够运行该项目。我已将我的IDE更新到SDK Tools 22.0.1,并在我的build.gradle文件中修改了buildToolsVersion标记,但无济于事。有人可以指导我如何处理这个错误?所有的帮助将不胜感激。

哦,这里是我的build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion '22.0.1' 

    packagingOptions { 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE' 
    } 

    defaultConfig { 
     applicationId "com.xyz.corp.demo.project" 
     minSdkVersion 10 
     targetSdkVersion 22 

     versionCode 2060200 
     versionName '2.6.02.00' 
    } 

    buildTypes { 
     debug { 

      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 

     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

      applicationVariants.all { variant -> 
       variant.outputs.each { output -> 
        def file = output.outputFile 
        output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk")) 
       } 
      } 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.1.0' 

    compile project(':xyzSDK') 
} 

帮助!

+0

你能重新启动你的工作室/机器,并重建你的项目 – Sree

+0

什么是你的Java版本? 1.8?如果是这样,请回滚到1.7 – Nizam

+0

@NoName:我在错误之前描述了日志:很多很多'UP-TO-DATE'语句。 'dexDebug'检查没有得到'UP-TO-DATE'语句;它接着是上面的日志。这对你来说够了吗?不,我还没有检查multidex问题呢... –

回答

1

因为这是报告:bad class file magic (cafebabe) or version (0034.0000)您应该检查您是否正在使用与您尝试在运行时使用相同的Java版本进行编译。 如果您正在使用gradle这个你应该在你的build.gradle文件中使用以下或类似的条目:

apply plugin: 'java' 
sourceCompatibility = 1.7 
targetCompatibility = 1.7 

使用此link更多细节的gradle。

在Android Studio中,从File -> Project Structure -> SDK Location -> JDK Location开始,您应该使用jdk 1.7而不是在Project level设置上继电器。请参阅link以了解类似的Android Studio问题。

+0

有趣。谢谢你的答案。让我试试看,回到你身边...... :) –

+0

在此期间,我有一个问题。我必须将这个SDK集成到使用Java 1.8的主项目中,并且我宁愿保持这种状态。我有没有办法用1.8编译这个项目? –

+0

您应该能够使用1.8进行编译,但targetCompatibility应该设置为1.7。这样的二进制文件将是1.7兼容。 – dan

0

看来你文件夹&库项目xyzSDK包含相同的库,这是造成问题,同时转换为DEX

你可以尝试找出这样的库,并从一个地方将其删除。 或排除像这样

compile project(':xyzSDK'){ 
     exclude module: 'support-v4' 
    } 

我已经采取了例如支持-V4的,因为我已经遇到了类似的问题,因为这个以前。

+0

谢谢你的答案。这确实是问题所在。你是否因为我得到了完全相同的错误? –

+0

是的..意外的顶级例外: – Akhil

1

UNEXPECTED TOP-LEVEL EXCEPTION意味着您将收到两次任何.jar

由于@Akhil说你应该排除support-v4,因为我猜这是主要问题,但是如果@Akhil答案不能帮助你尝试这种方法。

compile (':xyzSDK') { 
    exclude group: 'com.android.support', module: 'support-v4' 
} 

您是否尝试删除此行?

compile 'com.android.support:appcompat-v7:22.1.0' 

也许:xyzSDK媒体链接有appcompat-v7:22+ ..

我给你那里good answer by @CommonsWare做出gradle这个报告,看看有什么问题。

我正在为您的答案工作,所以如果我找到interessant,我会更新我的答案。

一旦你做到了这一点,你必须Build -> Rebuild project

而且我在@丹回答看见......我让你有可能answer

而不是1.7丹说尝试:

compileOptions { 

    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} 

否则,你可以检查一下手动去File > Project Structure按Ctrl + Alt键 + + 小号,然后在JDK location看看你在用什么,如果你正在使用1.8更改到你的1.7 SDK路径

而btw我认为我读过,你问过你是否可以使用JAVA 8代替Android,而不是JAVA 7,如果我没有错误的话......和是的,你可以使用​​,但前提是你也使用gradle-retrolamba就像在这个question上说的那样。

+0

我现在接受这个答案,但我还没有完成它。我需要重新检查这个问题并做更多的研究...... :) –

相关问题