it-swarm.com.ru

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.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, чтобы найти редакцию кода? Заранее спасибо .- Гефест

89
Hephaestus

просто используйте 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
    }
}
84
foolcage

Если у вас есть модуль с библиотекой Java, который не специфичен для Android , это должно работать: 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
    }
16
nexDev

Если вы используете org.jetbrains:annotation:15 и плагин retrolambda, удалите строку compile org.jetbrains:annotations:15.0 из своего build.gradle, и ошибка исчезнет. Меня устраивает.

8
0wl

Попробуйте добавить в основной build.gradle в разделе все проекты

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

или добавьте это в dependencies

    sourceCompatibility = 1.7
    targetCompatibility = 1.7

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

7
vitalinvent

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

jackOptions {
    enabled true
}

в defaultConfig в файле build.gradle.

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

7
Faisal Ali

Возможно, некоторые ваши зависимости были скомпилированы с Java 8, особенно для Android. Попробуйте переключить эти зависимости на более старую версию. Я не знаю точно, какую библиотеку вы должны понизить, потому что вы не прикрепили список зависимостей вашего основного модуля.

Например: у меня была такая же проблема. После нескольких часов поиска я обнаружил, что для библиотеки org.codehaus.httpcache4j.uribuilder:2.0.0 требуется Java 8, начиная с github . Итак, когда я перешел на 1.1.0, проект был успешно собран и развернут.

7
fobo66

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

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

Поэтому я удалил эту зависимость из моего build.gradle и все скомпилировано счастливо :)

5
Riccardo Leschiutta

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

2
StephanBezoen

Я решил эту проблему, как показано ниже:

apply plugin: 'Java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

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

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

2
mp501

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

Эта проблема решена после включения более старой версии netty (которая была сгенерирована с помощью Java 1.7) в мой файл build.gradle

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

1
rashok

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

0
uncle long

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

  1. Обновите инструменты Android до: classpath 'com.Android.tools.build:gradle:3.0.0'
  2. buildToolsVersion "26.0.2"

Это должно решить проблему.

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

0
Kanika

Я столкнулся с той же проблемой с библиотекой Reactive Location APIs для Android и RxJava 2 . Просто обновите build.gradle до версии 3.0.1 и уменьшите версию библиотеки Reactive Location APIs для Android и RxJava 2 с версии 1.0. От 4 до 1.0.3 Это отлично работает в моем случае.

0
Divyam Khandelwal

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

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

0
Aleksander Niedziolko