Я только что переключился на 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, чтобы найти версию кода? Заранее спасибо. -Гефест
источник
Ответы:
просто используйте 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 } }
источник
android.dexOptions.incremental
Свойство устарело и не влияет на процесс сборки».Если у вас есть модуль с 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 }
источник
Если вы используете
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
, проект был успешно собран и развернут.источник
Попробуйте добавить в основной build.gradle в раздел allprojects
tasks.withType(JavaCompile) { sourceCompatibility = "1.7" targetCompatibility = "1.7" }
или добавьте это в зависимости
sourceCompatibility = 1.7 targetCompatibility = 1.7
во всех модулях вручную
источник
Мне удалось решить эту проблему, добавив следующие строки:
jackOptions { enabled true }
чтобы
defaultConfig
вbuild.gradle
файле.Вы можете следовать рекомендациям для 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']) }
источник
Отключение Instant Run в Android Studio 2.2 с плагином Gradle 2.2.2 исправило эту проблему. Возврат к более старой версии плагина Gradle (например, 2.2.0) также исправил это, но это менее желательно, imho.
источник
Это случилось со мной с Android Studio 2.3.3. Решение, которое я нашел, заключалось в том, чтобы удалить папку сборки, а затем перестроить проект . Это было так просто.
источник
Я также столкнулся с такой же ошибкой
Android 2.3.3
после добавления нескольких зависимостей JAR. Проблема возникла из-за зависимостиio.netty:netty-all:4.1.16.Final
. Этот JAR-файл версии 4.1.16 был скомпилирован с помощью Java 1.8, а все остальные были созданы с помощью Java 1.7.Эта проблема решена после включения
netty
в мойbuild.gradle
файл более старой версии (которая была создана с помощью Java 1.7) .compile 'io.netty:netty-all:4.1.5.Final'
источник
Я столкнулся с этой проблемой при попытке перейти на автоматическое значение v 1.5 в Android Studio v 2.3.3. Предположительно автоматическое значение 1.5 будет совместимо с AS 3 (требуется обновленный компилятор java).
Пока работает авто-значение 1.4.1.
источник
У меня такая же проблема с библиотекой Reactive Location API для Android и RxJava 2. Просто обновите build.gradle до 3.0.1 и уменьшите версию библиотеки Reactive Location API для Android и RxJava 2 с 1.0.4 до 1.0.3. Работает нормально. в моем случае.
источник
Я столкнулся с этой проблемой при попытке импортировать банку, скомпилированную jdk 1.8 в Android Studio 3.0. Я пробовал все вышеперечисленные решения, но ни одно не помогло. Итак, я попросил разработчика этого jar-файла перекомпилировать его с помощью jdk 1.7, и тогда он работал хорошо, больше не сталкивался с этой проблемой.
источник
Если возможно для вас:
Это должно решить проблему.
Ссылка: https://developer.android.com/studio/write/java8-support
источник