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.
Java 1.7 코드 생성을 강제하기 위해 기본 프로젝트의 gradle.build 파일을 이미 업데이트했습니다.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
}
또한 java 버전을 설정하기 위해 다음과 같이 gradle.build 모듈을 업데이트했습니다.
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>
My question: 1) Is this an Android Studio 2.1 problem? Have others seen it? 2) Assuming this is my error and since the error message gives no help in finding the bad module, are there any recommendations on finding the V52 code? I can't just omit the libraries without breaking large amount of code. Can one inspect a .jar file to find the code revision? Thanks in advance. -Hephaestus
just use java 1.8 with Android Studio 3.0+ and set following works for me: it seems need the latest build tools
classpath 'com.android.tools.build:gradle:3.0.0'
and
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
}
}
If you have a module with a java library that is not Android-specific, this should work: apply plugin:'java'
Put it at the top of the build.gradle file, then rebuild.
apply plugin: 'java'
apply plugin: 'jacoco'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.11'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
If you use org.jetbrains:annotation:15
and retrolambda plugin then remove line compile org.jetbrains:annotations:15.0
from your build.gradle
and the error will disappear. It works for me.
Possibly, some of your dependencies was compiled with Java 8, not for Android especially. Try to switch that dependencies to older version. I don't exactly know which library you should downgrade, because you haven't attached a list of dependencies of your main module.
For example: I had the same problem. After hours of searching, I've found that library org.codehaus.httpcache4j.uribuilder:2.0.0
requires Java 8, as of github. So, when i've switched to 1.1.0
, project has been successfully builded and deployed.
Try to add to main build.gradle in section allprojects
tasks.withType(JavaCompile) {
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
}
or add this in dependencies
sourceCompatibility = 1.7
targetCompatibility = 1.7
in all modules manually
I was able to solve this issue by adding the following lines:
jackOptions {
enabled true
}
to defaultConfig
in build.gradle
file.
You can follow the guidelines for Java 8 on the link - https://developer.android.com/guide/platform/j8-jack.html
I had the same problem with the greendao-generator dependency. I mistakenly added that dependency into my build.gradle (compile 'org.greenrobot:greendao-generator:3.1.0'
) and AndroidStudio showed me the same error message.
Probably it's because that module has been compiled with Java 8.
So I removed that dependency from my build.gradle and all compiled happily :)
I solved this problem as belowed :
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Switching off Instant Run in Android Studio 2.2 with Gradle plugin 2.2.2 fixed it for me. Switching back to an older version of the Gradle plugin (such as 2.2.0) also fixed it, but that's less desirable imho.
This happened to me with Android Studio 2.3.3. The solution I found was to delete the build folder and then Rebuild Project. It was as simple as that.
I also faced same error in Android 2.3.3
, after adding few JAR depencies. Problem was due to the depenecy io.netty:netty-all:4.1.16.Final
. This 4.1.16 version JAR was compiled with Java 1.8 and all others was generated with Java 1.7.
This get resolved, after including older version of netty
(which was generated with Java 1.7) in my build.gradle
file.
compile 'io.netty:netty-all:4.1.5.Final'
I have come across this issue when trying to upgrade to auto-value v 1.5 in Android Studio v 2.3.3. Auto-value 1.5 will presumably be compatible with AS 3 (It requires an updated java compiler)
For now auto-value 1.4.1 works.
I face the same issue with Reactive Location APIs Library for Android and RxJava 2.Just update build.gradle to 3.0.1 and reduce the Reactive Location APIs Library for Android and RxJava 2 library version from 1.0.4 to 1.0.3 It works fine in my case.
I have come across this issue when trying to import a jar compiled by jdk 1.8 in Android Studio 3.0. I tried all above solution, but none work. so, I asked the developer of that jar to re-compile it with jdk 1.7, and then it work well, not come across this issue again.
If possible for you:
- Upgrade android tools to: classpath 'com.android.tools.build:gradle:3.0.0'
- buildToolsVersion "26.0.2"
This should take care of the issue.
Reference: https://developer.android.com/studio/write/java8-support
참고URL : https://stackoverflow.com/questions/37020413/android-dex-cannot-parse-version-52-byte-code
'development' 카테고리의 다른 글
"원자로 프로젝트 목록에 SNAPSHOT 프로젝트가 없습니다." (0) | 2020.09.01 |
---|---|
JavaFX 씬 빌더는 어디로 갔습니까? (0) | 2020.09.01 |
$ (문서) .ready (function () {}); (0) | 2020.09.01 |
자동 열은 하나만있을 수 있습니다. (0) | 2020.09.01 |
Argparse : 'x'가있는 경우 필수 인수 'y' (0) | 2020.09.01 |