簡體   English   中英

Android Studio意外頂級例外:

[英]Android Studio UNEXPECTED TOP-LEVEL EXCEPTION:

今天我面臨一個巨大的錯誤,不允許我在手機上運行示例項目。

當Android Studio構建項目時,它首先將以下目標顯示為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)

我已經咨詢過以下鏈接:

1. Gradle以非零退出值1結束

2. 編譯期間“Ignoring InnerClasses屬性”警告輸出是什么?

我不確定它們適用於我的情況。 我甚至無法運行該項目。 我已將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')
}

幫忙!!!

因為它報告: bad class file magic (cafebabe) or version (0034.0000)您應該檢查您是否正在編譯與您嘗試在運行時使用的相同Java版本。 如果您使用的是gradle,則應在build.gradle文件中使用以下或類似的條目:

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

使用此鏈接可獲得更多gradle詳細信息。

在Android Studio中,從File -> Project Structure -> SDK Location -> JDK Location您應該使用jdk 1.7而不是在Project level設置中繼。 請參閱此鏈接以獲取類似的Android Studio問題。

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+ ..

我給你一個很好的答案@CommonsWare做一個gradle報告,看看有什么問題。

我正在為你的答案而努力,所以如果我找到了一些有關的東西,我會更新我的答案。

完成此操作后,您必須 Build -> Rebuild project

正如我在@dan上看到的答案......我告訴你一個可能的答案

而不是1.7如丹所說試着:

compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

否則,您可以手動檢查File > Project StructureCtrl + Alt + Shift + S然后在JDK location查看您正在使用的內容以及是否使用1.8更改為1.7 SDK路徑

順便說一下,我想我已經讀過你曾經問過你是否可以使用JAVA 8 for Android而不是JAVA 7如果我沒有錯誤......是的你可以使用JDK 8 ,但gradle-retrolamba是你也使用gradle-retrolamba喜歡在這個問題上說..

看來您的libs文件夾和庫項目xyzSDK包含相同的庫,這會在轉換為dex時導致問題

您可以嘗試識別此類庫並將其從一個位置刪除。 或者像這樣排除它

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

我已經采用了support-v4的例子,因為我之前遇到了類似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM