Android:Dex无法parsing52版本的字节码

我刚刚切换到Android Studio 2.1,并试图编译以前的应用程序时出现此错误:

Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above. If you are using the 'java' gradle plugin in a library submodule add targetCompatibility = '1.7' sourceCompatibility = '1.7' to that submodule's build.gradle file. 

我已经更新了主项目的gradle.build文件来强制Java 1.7代码生成:

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' apply plugin: 'java' sourceCompatibility = 1.7 targetCompatibility = 1.7 } } 

我还更新了模块gradle.build,如下设置Java版本:

 android { compileSdkVersion 19 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.abc.def" minSdkVersion 19 targetSdkVersion 19 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } 

正在使用Maven构build的子模块。 在pom.xml文件中,我也试图强制1.7代码生成。
我知道我正在使用一个程序集工件,它包含了从属模块,但是我没有更改任何从属模块,并且上次编译时模块的结果.jar文件运行良好。

  <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <!-- maven-compiler-plugin --> <version>2.6</version> <configuration> <source>1.7</source> <target>1.7</target> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

我的问题:1)这是一个Android Studio 2.1的问题? 有别人看过吗? 2)假设这是我的错误,并且由于错误消息没有帮助find坏的模块,有什么build议findV52代码? 我不能在不破坏大量代码的情况下忽略这些库。 可以检查.jar文件来查找代码修订吗? 提前致谢。 -Hephaestus

只需使用Android 1.8以上版本的Java 1.8,并为我设置以下作品:似乎需要最新的构build工具

 classpath 'com.android.tools.build:gradle:3.0.0' 

 android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { ... //jackOptions { // DEPRECATED //enabled true //} } dexOptions { incremental true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } 

如果你有一个不是Android特定的java库的模块,这应该工作: apply plugin:'java'

把它放在build.gradle文件的顶部,然后重build。

  apply plugin: 'java' apply plugin: 'jacoco' dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.11' sourceCompatibility = 1.7 targetCompatibility = 1.7 } 

如果您使用org.jetbrains:annotation:15和retrolambda插件, compile org.jetbrains:annotations:15.0删除行compile org.jetbrains:annotations:15.0 ,错误将消失。 它适用于我。

可能的话,你的一些依赖关系是用Java 8编译的,而不是特别针对Android。 尝试将该依赖关系切换到旧版本。 我不完全知道你应该降级哪个库,因为你没有附加主模块的依赖列表。

例如:我有同样的问题。 经过几个小时的search,我发现库org.codehaus.httpcache4j.uribuilder:2.0.0需要Java 8,如github 。 所以,当我切换到1.1.0 ,项目已经成功build立和部署。

我有与greendao生成器依赖关系相同的问题。 我错误地将该依赖项添加到我的build.gradle( compile 'org.greenrobot:greendao-generator:3.1.0' )和AndroidStudio显示我相同的错误消息。

可能是因为这个模块已经用Java 8编译了。

所以我从我的build.gradle中删除了这个依赖项,所有编译都很开心:)

尝试添加到所有项目中的主build.gradle

 tasks.withType(JavaCompile) { sourceCompatibility = "1.7" targetCompatibility = "1.7" } 

或者添加这个依赖

  sourceCompatibility = 1.7 targetCompatibility = 1.7 

所有模块手动

我能够通过添加以下几行来解决这个问题:

 jackOptions { enabled true } 

build.gradle文件中的defaultConfig

您可以按照链接上的Java 8准则 – https://developer.android.com/guide/platform/j8-jack.html

我解决了这个问题,如下所示:

 apply plugin: 'java' sourceCompatibility = 1.7 targetCompatibility = 1.7 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) } 

在Android Studio 2.2中使用Gradle插件closures即时运行2.2.2为我解决了这个问题。 切换回较旧版本的Gradle插件(如2.2.0)也解决了这个问题,但这不太理想。

Android Studio 2.3.3发生在我身上。 我find的解决scheme是删除生成文件夹,然后重build项目 。 就这么简单。

在添加less量JAR依赖之后,我在Android 2.3.3也遇到同样的错误。 问题是由于依赖关系io.netty:netty-all:4.1.16.Final 。 这个4.1.16版本的JAR是用Java 1.8编译的,其他的都是用Java 1.7生成的。

在我的build.gradle文件中包含旧版本的netty (它是用Java 1.7生成的)之后,这个问题就解决了。

compile 'io.netty:netty-all:4.1.5.Final'

在Android Studio v 2.3.3中尝试升级到自动赋值v 1.5时遇到了这个问题。 自动值1.5大概会与AS 3兼容(它需要更新的java编译器)

现在自动值1.4.1的作品。