Android: Dex не может разобрать версию 52 байт кода



Я просто переключился на 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 основного проекта.построить файл для принудительной генерации кода 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.построить следующим образом, чтобы установить версию 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. В ПОМ.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-файл, чтобы найти ревизия кода?
Спасибо заранее.
- Гефест

603   15  

15 ответов:

просто используйте java 1.8 с Android Studio 3.0+ и установите следующие работы для меня: кажется, нужны последние инструменты сборки

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
    }
}

Если у вас есть модуль с библиотекой java, которая не для Android-конкретных, это должно работать: apply plugin:'java'

положите его в верхней части сборки.файл 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, проект был успешно построен и развернут.

попробуйте добавить в основную сборку.Gradle в разделе allprojects

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

или добавить в зависимости

    sourceCompatibility = 1.7
    targetCompatibility = 1.7

на все модули вручную

я смог решить эту проблему, добавив следующие строки:

jackOptions {
    enabled true
}

до defaultConfig in .

вы можете следовать рекомендациям для Java 8 по ссылке - https://developer.android.com/guide/platform/j8-jack.html

У меня была такая же проблема с зависимостью greendao-генератора. Я ошибочно добавил эту зависимость в свою сборку.gradle (compile 'org.greenrobot:greendao-generator:3.1.0') и AndroidStudio показал мне то же сообщение об ошибке.

вероятно, это потому, что этот модуль был скомпилирован с Java 8.

поэтому я удалил эту зависимость из моей сборки.gradle и все скомпилировано радостно:)

Я решил эту проблему следующим образом:

apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

выключение мгновенного запуска в Android Studio 2.2 с помощью плагина Gradle 2.2.2 исправлено для меня. Переключение на более старую версию плагина Gradle (например, 2.2.0) также исправило его, но это менее желательно imho.

Это случилось со мной с Android Studio 2.3.3. Решение, которое я нашел, состояло в том, чтобы удалить папку сборки, а затем Перестроить Проект. Все было так просто.

Я также столкнулся с той же ошибкой в Android 2.3.3, после добавления нескольких банку depencies. Проблема была из-за depenecy io.netty:netty-all:4.1.16.Final. Эта 4.1.16 версия JAR была скомпилирована с Java 1.8, а все остальные были сгенерированы с Java 1.7.

это решается, после включения более старой версии netty(который был сгенерирован с Java 1.7) в моем .

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

Я столкнулся с этой проблемой при попытке обновления до автоматического значения v 1.5 В Android Studio v 2.3.3. Auto-value 1.5 предположительно будет совместим с AS 3 (для этого требуется обновленный компилятор java)

на данный момент авто-значение 1.4.1 работает.

Я сталкиваюсь с той же проблемой с библиотека API реактивного местоположения для Android и RxJava 2.Просто обновите сборку.gradle до 3.0.1 и уменьшить библиотека API реактивного местоположения для Android и RxJava 2 библиотека версия от 1.0.4 в 1.0.3 Это прекрасно работает в моем случае.

Я столкнулся с этой проблемой при попытке импортировать банку, скомпилированную jdk 1.8 В Android Studio 3.0. Я пробовал все выше решение, но никто не работает. Итак, я попросил разработчика этого jar повторно скомпилировать его с помощью jdk 1.7, а затем он хорошо работает, не сталкиваясь с этой проблемой снова.

Если это возможно для вас:

  1. обновление android tools до: classpath ' com.андроид.инструменты.сборка: gradle: 3.0.0'
  2. buildToolsVersion "26.0.2"

Это должно заботиться о проблеме.

Ссылка:https://developer.android.com/studio/write/java8-support

Comments

    Ничего не найдено.