[英]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 Structure
或Ctrl + 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.