Android Studio意外顶级例外:
今天我面临一个巨大的错误,不允许我在手机上运行示例项目。
当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的例子,因为我之前遇到了类似的问题。
- “清单合并失败意味着什么:uses-sdk:minSdkVersion 9不能小于版本14”
- 为什么编译时库模块中的包不存在,即使Android Studio在代码中没有显示错误?
- 创建一个gradle依赖项以从git导入
- 无法在Android Studio 2.1.1的gradle.properties文件中设置JVM参数gradle
- 由于Gradle失败,无法编译任何Android项目:找不到javax.xml.datatype.DatatypeFactory
- 无法为参数org.gradle.api.Project找到方法android()
- 在我的`gradle build`上遇到`org.gradle.api.ProjectConfigurationException`错误
- Android Studio:意想不到的顶级例外:
- Android Studio:com.android.ide.common.process.ProcessException: