web-dev-qa-db-ja.com

不正なクラスファイルのマジックまたはバージョン

私はすでにその質問が非常に頻繁に尋ねられて答えていることを知っていますが、見つけた答えのどれも私の問題を解決しませんでした。

それはエラーです:

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 sync」でスタックしたままです。

compile fileTree(dir: 'libs', include: ['*.jar'])もあるので、コンパイルファイルは役に立たない可能性があります

100
Marco Acierno

わかった、悪い。

プロジェクトSDKセクションでは、Android SDKを追加するときにJava SDKを指定する必要があり、すべてのAndroid SDKはSDKとしてJava 8を使用して作成します。プロジェクトレベルが1.7であっても、間違ったバージョンのクラスファイル(理由がわかりません。すべてがプロジェクトレベルで選択されたと思われます)。

ここで、SDK(Java version "1.x.0"部分)を変更しました。

enter image description here

そして、それはうまくコンパイルするようです。

今日以前に機能した理由は、私のSDKが1.8ではなくAndroid API xだったためです。

39
Marco Acierno

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
95
passsy

@Marco Aciernoの回答が少し不明瞭であると人々が感じる場合、解決策は、あなたがJava 7でビルドし、より高いバージョンではないようにすることです。

Android St​​udioの場合、File -> Project Structure -> SDK Location -> JDK Locationjdk1.7.xに変更します。コマンドラインでは、Java -versionJava version "1.7.x"を出力することを確認してください。

27
Chris Lacy

Java_HOMEを1.7に戻すとうまくいきました。

5
Vishal Singh

build.gradeファイルごとに、すべてのモジュールJavaバージョンをJava 1.7に変更します。

ライブラリとアプリケーションであるプラグインで

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

とJavaで

sourceCompatibility= 1.7
targetCompatibility= 1.7
3
baiiu

この問題は、Java 6以降の機能を使用していないが、Java 6以降を使用してビルドされた.jarファイルを使用する場合に発生します。

その.jarファイルをビルドした場合、GradleまたはProGuardまたはCompiler Versionで何も変更する必要はありません。解決策は非常に簡単です。.jarファイルを再度ビルドしますが、Java 5以下を使用します。

詳細

2
Bugs Happen

同様の問題がありましたが、プロガードをアップグレードして解決しました。このコマンドでプロガードバージョンを取得します

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にアップグレードする必要があります。cozproguard 4.xはJava 8をサポートしていません。

1
spaceMonkey

netbeansからAndroid studioに自作ライブラリを追加しようとしたときに、同様の問題が発生しました。ソースとターゲットの互換性をAndroid studioで、ソース/バイナリ形式をnetbeans(両方!)でJava 1.7に設定すると、問題が解決しました。

Androidスタジオで:

プロジェクト構造->モジュール/アプリ->プロパティ->ソースおよびターゲット1.7

netbeansの場合:

ファイル->プロジェクトのプロパティ->ソース->ソース/バイナリ形式1.7

次に、netbeansプロジェクトをクリーンおよびビルドし、.jarを「NBProj/dist」から「app/libs」にコピーします

1
RickPat

java8のみがインストールされている場合、ケースのソリューションを共有し、Javaコンパイラレベルを1.7に設定し、プロジェクトを再構築するだけで問題ありません。

0
suiwenfeng