[英]Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code
[英]Android: Dex cannot parse version 52 byte code
我剛剛切換到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構建的。 在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)假設這是我的錯誤,並且由於錯誤消息沒有幫助找到壞模塊,是否有任何關於查找V52代碼的建議? 我不能在不破壞大量代碼的情況下省略庫。 可以檢查一個.jar文件來查找代碼修訂版嗎? 提前致謝。 -Hephaestus
只需使用帶有Android Studio 3.0+的java 1.8並為我設置以下作品:它似乎需要最新的構建工具
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文件的頂部,然后重建。
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
從您build.gradle
和錯誤將消失。 這個對我有用。
可能,您的一些依賴項是使用Java 8編譯的,而不是針對Android編譯的。 嘗試將該依賴項切換為舊版本。 我不確切地知道您應該降級哪個庫,因為您沒有附加主模塊的依賴項列表。
例如:我遇到了同樣的問題。 經過幾個小時的搜索,我發現庫org.codehaus.httpcache4j.uribuilder:2.0.0
需要Java 8,從github開始 。 因此,當我切換到1.1.0
,項目已成功構建和部署。
嘗試在allprojects部分中添加到main 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
我對greendao-generator依賴有同樣的問題。 我錯誤地將依賴添加到我的build.gradle( compile 'org.greenrobot:greendao-generator:3.1.0'
)和AndroidStudio向我顯示了相同的錯誤消息。
可能是因為該模塊已使用Java 8編譯。
所以我從build.gradle中刪除了這個依賴項,所有編譯都愉快地:)
我解決了這個問題如下:
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
使用Gradle插件2.2.2關閉Android Studio 2.2中的Instant Run,為我修復了它。 切換回Gradle插件的舊版本(例如2.2.0)也修復了它,但這不太合適。
Android Studio 2.3.3發生了這種情況。 我找到的解決方案是刪除build文件夾,然后刪除Rebuild Project 。 就這么簡單。
在添加幾個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生成)之后,這個build.gradle
。
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有效。
我面臨與Android和RxJava 2的Reactive Location API庫相同的問題。將build.gradle更新到3.0.1並將Android的反應位置API庫和RxJava 2庫版本從1.0.4減少到1.0.3它工作正常在我的情況下。
在嘗試導入由Android Studio 3.0中的jdk 1.8編譯的jar時,我遇到了這個問題。 我嘗試了所有上述解決方案,但沒有工作。 所以,我問那個jar的開發人員用jdk 1.7重新編譯它,然后它運行良好,沒有再遇到這個問題。
如果可能的話:
這應該解決這個問題。
參考: https : //developer.android.com/studio/write/java8-support
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.