Właśnie przełączyłem się na Android Studio 2.1 i ten błąd pojawił się podczas próby skompilowania aplikacji, która wcześniej działała:
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.
Zaktualizowałem już plik gradle.build głównego projektu, aby wymusić generowanie kodu 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
}
}
Zaktualizowałem również moduł gradle.build w następujący sposób, aby ustawić wersję 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
}
}
Podmoduł budowany z Maven. W pliku pom.xml próbowałem też wymusić generowanie kodu 1.7.
Rozumiem, że używam artefaktu zespołu, który zawiera moduły podrzędne, ale nie zmieniłem żadnego z modułów podrzędnych, a wynikowy plik .jar modułu działał poprawnie podczas ostatniej kompilacji.
<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>
Moje pytanie: 1) Czy jest to problem z Androidem Studio 2.1? Czy inni to widzieli? 2) Zakładając, że to mój błąd i ponieważ komunikat o błędzie nie pomaga w znalezieniu złego modułu, czy są jakieś zalecenia dotyczące znalezienia kodu V52? Nie mogę po prostu pominąć bibliotek bez zrywania dużej ilości kodu. Czy można przejrzeć plik .jar, aby znaleźć wersję kodu? Z góry dziękuję. -Hefajstos