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 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
Ответы
Ответ 1
просто используйте 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
}
}
Ответ 2
Если у вас есть модуль с 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
}
Ответ 3
Если вы используете org.jetbrains:annotation:15
и retrolambda плагин, тогда удалите строку compile org.jetbrains:annotations:15.0
из build.gradle
, и ошибка исчезнет. Это работает для меня.
Ответ 4
Возможно, некоторые из ваших зависимостей были скомпилированы с Java 8, а не для Android. Попробуйте переключить эти зависимости на более раннюю версию. Я точно не знаю, какую библиотеку вы должны понизить, потому что вы не привязали список зависимостей вашего основного модуля.
Например: у меня была такая же проблема. После нескольких часов поиска я обнаружил, что для библиотеки org.codehaus.httpcache4j.uribuilder:2.0.0
требуется Java 8, начиная с github. Итак, когда я переключился на 1.1.0
, проект был успешно создан и развернут.
Ответ 5
У меня была такая же проблема с зависимостью greendao-generator. Я ошибочно добавил, что зависимость от моего build.gradle(compile 'org.greenrobot:greendao-generator:3.1.0'
) и AndroidStudio показала мне то же сообщение об ошибке.
Возможно, это потому, что этот модуль был скомпилирован с Java 8.
Итак, я удалил эту зависимость из моего build.gradle и все скомпилировано счастливо:)
Ответ 6
Попробуйте добавить в main build.gradle в разделе allprojects
tasks.withType(JavaCompile) {
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
}
или добавить это в зависимости
sourceCompatibility = 1.7
targetCompatibility = 1.7
в все модули вручную
Ответ 7
Мне удалось решить эту проблему, добавив следующие строки:
jackOptions {
enabled true
}
to defaultConfig
в файле build.gradle
.
Вы можете следовать рекомендациям для Java 8 по ссылке -
https://developer.android.com/guide/platform/j8-jack.html
Ответ 8
Я решил эту проблему как ниже:
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Ответ 9
Отключение Instant Run в Android Studio 2.2 с помощью Gradle плагина 2.2.2 исправлено для меня. Переход на более раннюю версию плагина Gradle (например, 2.2.0) также исправил его, но это менее желательно imho.
Ответ 10
Это случилось со мной с Android Studio 2.3.3. Решение, которое я нашел, это удалить папку сборки, а затем Перестроить проект. Это было так просто.
Ответ 11
Я также столкнулся с такой же ошибкой в Android 2.3.3
, добавив несколько JAR-зависимостей. Проблема возникла из-за depenecy 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'
Ответ 12
Я столкнулся с этой проблемой при попытке перейти на автоматическое значение v 1.5 в Android Studio v 2.3.3. Auto-value 1.5 предположительно будет совместим с AS 3 (для этого требуется обновленный java-компилятор)
В настоящее время работает автоматическое значение 1.4.1.
Ответ 13
Я столкнулся с той же проблемой, что и Библиотека API активных реактивных локаций для Android и RxJava 2. Простое обновление build.gradle до 3.0.1 и сокращение Библиотека адаптивных локальных API-интерфейсов для Android и RxJava 2 с версии 1.0.4 до 1.0.3
Он отлично работает в моем случае.