Android

Android: Dex cannot parse version 52 byte code

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

Переведено автоматически
Ответ 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, проект был успешно собран и развернут.

java android android-studio