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

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

오류입니다.

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'])너무 가지고 있기 때문에 컴파일 파일은 쓸모가 없을 수 있습니다.



답변

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


답변

좋아, 내 잘못이야.

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

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

여기에 이미지 설명 입력

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

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


답변

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

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


답변

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


답변

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

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

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

그리고 자바

sourceCompatibility= 1.7
targetCompatibility= 1.7


답변

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

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

자세한 내용 .


답변

비슷한 문제가 있었는데 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을 지원하지 않습니다.