잘못된 클래스 파일 매직 또는 버전


101

나는 이미 자주 묻는 질문과 답변을 알고 있지만 내가 찾은 답변 중 어느 것도 내 문제를 해결하지 못했습니다.

오류입니다.

Error:Gradle: Execution failed for task ':ffcommunity:preDexDebug'.
 com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:\Android SDK\sdk\build-tools\20.0.0\dx.bat --dex --output D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\build\intermediates\pre-dexed\debug\bananaquery-2ee85432877a057e7414910b8127805535139d5d.jar D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\libs\bananaquery.jar
Error Code:
    1
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
        at com.android.dx.command.dexer.Main.processClass(Main.java:665)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
        at com.android.dx.command.dexer.Main.access$600(Main.java:78)
        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
        at com.android.dx.command.dexer.Main.processOne(Main.java:596)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)
    ...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
    1 error; aborting

오류는 bad class file magic (cafebabe) or version (0034.0000)입니다.

나는 같은 날에 여러 번 문제없이 응용 프로그램을 빌드하고 실행했지만 이제는이 메시지와 함께 매번 실패합니다.


프로젝트 SDK는 Android API 19 Platform이고 프로젝트 수준은 1.7.

CompileSDK는 19이고 buildToolsVersion은 '20.0.0'입니다.

컴파일 옵션 :

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

그리고 dependencies내가 가지고있다 :

compile files('libs/bananaquery.jar')

라이브러리는 Android API 19 Platform프로젝트 수준의 SDK 로 빌드 됩니다 1.7.

.jar파일은 libs/폴더 안에 있습니다.

IntelliJ IDEA 14 Preview를 사용하는데 그 이유가 될 수 있습니까? IntellIJ IDEA 13을 사용하면 "Gradle 동기화"상태가 유지됩니다.

내가 compile fileTree(dir: 'libs', include: ['*.jar'])너무 가지고 있기 때문에 컴파일 파일은 쓸모가 없을 수 있습니다.


안녕하세요 비슷한 문제가 있지만 프로젝트 컴파일러를 1.7로 설정해도 도움이되지 않습니다. 살펴볼 수 있습니까? stackoverflow.com/questions/29098038/...
Csabi

문제는 그 많은 것들을 할 수있는, 내가 자바 1.7를 사용했기 때문에 1.6로 변경합니다 1.7을 사용
마르코 Acierno

안녕하세요 저는 전체 프로젝트를 1.6에 올려 놓았습니다. 도움이되지 않습니다. 이전에 해당 라이브러리를 사용하고 있었으며 방금 .jar 파일을 최신 버전으로 업데이트했습니다. 더 높은 Java로 컴파일되는 문제가 될 수 있습니까?
Csabi

이 문제를 해결하는 긴 길을 갔고 내가 가져온 라이브러리에서 컴파일 오류가 발생한다는 것을 깨달았습니다. 로컬 IDE 컴파일러 설정 변경으로 인해 가져 오는 항목이 수정되지 않기 때문에 이것은 중요한 차이점입니다.
Shadoninja

답변:


95

JAVA_HOME변수가 Java 1.8로 변경되었고 순수한 Java 모듈을 내 Android 프로젝트의 종속성으로 컴파일 할 때이 오류 메시지가 나타납니다.

java 모듈의 build.gradle

apply plugin: 'java'

솔루션 # 1 : 더러움을 빠르게

JAVA_HOME등을 1.7 로 설정하여 수정했습니다 .

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

솔루션 # 2 : 컴파일러 버전 변경 :

build.gradle에서이 특정 모듈에 대해 다시 1.7로 변경합니다.

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7

4
Gradle의 실험적 버전에서 구문은 다음과 같습니다.compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 }
Stephen Kaiser

Android Studio가 "Assignment is not used"라는 sourceCompatibility 및 targetCompatibility에 회색 밑줄을 쳤지 만 솔루션 2는 저에게
효과적이었습니다

39

좋아, 내 잘못이야.

프로젝트 SDK 섹션에서를 추가 할 때를 Android SDK제공해야 Java SDK하며 모든 Android SDK는 Java 8 을 SDK로 사용하므로 프로젝트 수준이 1.7(이유를 모르겠습니다. 모든 것이 프로젝트 수준에서 선택되었습니다.)

이제 SDK ( java version "1.x.0"부분)를 변경했습니다 .

여기에 이미지 설명 입력

잘 컴파일되는 것 같습니다.

오늘 전에 일을하는 이유는 내 SDK 이었기 때문에이었다 1.8하지Android API x


나는 같은 문제가 있습니다. 이걸 어디에서 바꿔야하나요. 감사합니다
rupesh

1
Android SDK를 추가 할 때 참조 할 SDK를 지정해야합니다. (제 경우에는이 버전을 사용하고 있었기 때문에 Java 7을 선택했습니다)하지만 귀하의 경우에도 다릅니다. 같은 이름을 가진 다른 오류에 대한 온라인 검색, 당신은 많은 정보를 찾을 수 있습니다
마르코 Acierno

환경 설정 화면에 대해 이야기하고 있습니까?
rupesh

3
Open Project structure window> Where is the select with the "Project SDK"message select the SDK you need (your code or the version of the SDK used to compile the external lib). 같은 문제가 있으면 Android SDK 라인을 확인하고 "Edit"를 클릭하십시오. Java SDK가있는 다른 패널로 이동합니다. 1.7 (또는 컴파일해야하는 버전)을 선택합니다.
Marco Acierno

2
모듈 설정에 가서 자바 7 JRE가 설치된 홈 디렉토리에 JDK 위치 편집하여 같은 상황을 고정
zztonedefzz

27

사람들이 @Marco Acierno의 대답이 약간 불분명하다고 생각하는 경우 해결책은 더 높은 버전이 아닌 Java 7로 빌드하는 것입니다.

안드로이드 스튜디오를 들어, 변경 File -> Project Structure -> SDK Location -> JDK Locationjdk1.7.x. 명령 줄의 경우 java -version출력을 확인 합니다 java version "1.7.x".


저는 IntelliJ IDEA를 사용하고 있었기 때문에 제 경우에는 Android SDK를 추가 할 때 올바른 Java SDK를 넣어야했습니다 ... (Android 모듈에서 Java 1.x를 선택할 수 없습니다. 그렇지 않으면 Android 클래스가 표시되지 않습니다)
Marco Acierno

15
Java 8을 사용할 수없는 이유는 무엇입니까?
Sujay

5

JAVA_HOME을 다시 1.7로 설정하면 저에게 효과적이었습니다.


3

모든 build.grade 파일에서 모든 모듈 Java 버전을 java 1.7로 변경하십시오.

라이브러리 및 응용 프로그램 인 플러그인에서

compileOptions{
    sourceCompatibility=JavaVersion.VERSION_1_7
    targetCompatibility=JavaVersion.VERSION_1_7
}

그리고 자바

sourceCompatibility= 1.7
targetCompatibility= 1.7

이것이 제가해야 할 유일한 일이었습니다. 감사합니다
Chisko 2016-08-08

2

이 문제 .jar는 Java 6 이상의 기능을 사용하지 않지만 Java 6 이상을 사용하여 빌드 된 파일을 사용할 때 발생합니다 .

해당 .jar파일을 빌드 한 경우 Gradle또는 ProGuard또는 에서 아무것도 변경할 필요가 없습니다 Compiler Version. 솔루션은 매우 간단합니다. 해당 .jar파일을 다시 빌드 하지만 Java 5 이하를 사용 합니다.

자세한 내용 .


제 경우에는 .aar 파일입니다. 어떻게해야합니까?
GvSharma

1

비슷한 문제가 있었는데 proguard를 업그레이드하여 해결했습니다. 이 명령으로 proguard 버전을 얻으십시오.

java -jar ~/android-sdks/tools/proguard/lib/proguard.jar 

여기에서 최신 progaurd.jar 파일을 가져옵니다 ( http://proguard.sourceforge.net ).

기존 android-sdks / tools / proguard / lib / proguard.jar을 새 .jar 파일로 바꿉니다.

도움이 되었기를 바랍니다. Java 8을 사용하는 경우 proguard 5.x로 업그레이드해야합니다. coz proguard 4.x는 Java 8을 지원하지 않습니다.


@RookieGuy는 Java 버전을 다시 1.7로 설정해 보았습니다.
spaceMonkey

힌트를 주셔서 감사합니다. 전 이적 종속성에 포함 된 라이브러리를 다시 컴파일해야했습니다. 버전이 상당히 변경 되었기 때문에 참조 용으로 여기에 uc-mobileapps.com/index.html%3Fp=509.html 을 작성했습니다
RookieGuy

1

netbeans에서 자체 제작 라이브러리를 android studio에 추가하려고 할 때 비슷한 문제가 발생했습니다. android studio의 소스 및 타겟 호환성과 netbeans의 소스 / 바이너리 형식 (둘 다!)을 java 1.7로 설정하면 문제가 해결되었습니다.

안드로이드 스튜디오에서 :

프로젝트 구조-> 모듈 / 앱-> Propreties-> Source- and Target to 1.7

netbeans :

파일-> 프로젝트 속성-> 소스-> 소스 / 바이너리 형식을 1.7로

그런 다음 netbeans projekt를 정리하고 빌드하고 "NBProj / dist"에서 "app / libs"로 .jar을 복사합니다.


0

Java8 만 설치된 경우의 솔루션을 공유하고 Java 컴파일러 수준을 1.7로 설정 한 다음 프로젝트를 다시 빌드하면 문제가 해결됩니다.


0

타사 라이브러리를 사용할 때 오류가 발생했습니다. 위에서 언급 한 질문에 따라 위의 스택 추적 메시지에 따라 라이브러리를 교체해야했습니다.

        ...
    ...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
    ...

적절한 버전으로.

질문에 해당 bananaquery.jar하는 것은 Java 호환 버전으로 대체됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.