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-файл, чтобы найти ревизия кода?
Спасибо заранее.
- Гефест
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 }до
defaultConfigin .вы можете следовать рекомендациям для 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. Проблема была из-за depenecyio.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, а затем он хорошо работает, не сталкиваясь с этой проблемой снова.
Если это возможно для вас:
- обновление android tools до: classpath ' com.андроид.инструменты.сборка: gradle: 3.0.0'
- buildToolsVersion "26.0.2"
Это должно заботиться о проблеме.
Ссылка:https://developer.android.com/studio/write/java8-support
Comments