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


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プレビューを使用していますが、それが理由かもしれません。IntellIJ IDEA 13を使用すると、「Gradle sync」で動かなくなる

私も持っているcompile fileTree(dir: 'libs', include: ['*.jar'])ので、コンパイルファイルは役に立たないかもしれません


こんにちは私は同様の問題を抱えていますが、プロジェクトコンパイラを1.7に設定しても役に立たないので、見てください。 stackoverflow.com/questions/29098038/...
Csabi

それは多くの問題になる可能性がある問題です
。Java1.7

こんにちは私はそれが役に立たない1.6に入れられたプロジェクト全体を試してみました、私は以前にそのライブラリを使用していました、私は新しいバージョンで.jarファイルを更新しました、それはそれがより高いJavaでコンパイルされているという問題かもしれませんか?
Csabi 2015年

この問題を修正する長い道のりをたどったところ、インポートしているライブラリでコンパイルエラーが発生していることに気付きました。ローカルIDEコンパイラーの設定を変更しても、インポートされているものは修正されないため、これは重要な違いです。
Shadoninja

回答:


95

私のJAVA_HOME変数は、Java 1.8に変更し、私のアンドロイドプロジェクトの依存関係として、純粋なJavaのモジュールをコンパイルするとき、私は、このエラーメッセージが表示されました。

Javaモジュールのbuild.gradle

apply plugin: 'java'

解決策#1:ダーティーを早める

JAVA_HOME1.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 }
スティーブン・カイザー

Android StudioがsourceCompatibilityとtargetCompatibilityに灰色の下線を引いて「割り当ては使用されない」と述べていても、ソリューション2はうまくいきました
CodyF

39

わかりました。

プロジェクトSDKセクションで、を追加するAndroid SDKときに提供する必要がJava SDKあります。すべてのAndroid SDKはSDKとしてJava 8を使用しているため、プロジェクトレベルが間違っていても、誤ったバージョンのクラスファイルが作成されます。1.7(私はなぜ、私はなって知りませんすべてがプロジェクトレベルで選択されていること)。

SDKを変更しました(java version "1.x.0"一部)。

ここに画像の説明を入力してください

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

今日の前に働いていた理由は、私のSDKがあったためだった1.8とはありませんAndroid API x


同じ問題があります。これをどこに変更すればよいですか。ありがとう
rupesh

1
Android SDKを追加するときは、参照するSDKを指定する必要があります...(この場合、このバージョンを使用していたのでJava 7を選択しました)しかし、それはあなたのケースにも依存します。同じ名前の他のエラーをオンラインで検索すると、多くの情報が見つかります
Marco Acierno '19年

設定画面について話していますか?
ルピーシュ、2015年

3
「プロジェクト構造」ウィンドウを開く>「プロジェクトSDK」メッセージで選択する場所は、必要なSDK(コードまたは外部libのコンパイルに使用されるSDKのバージョン)を選択します。同じ問題が発生する場合は、Android SDKの行を確認して[編集]をクリックしてください。Java SDKがある別のパネルに移動します
。1.7

2
モジュール設定に移動し、JDKの場所をJava 7 jreがインストールされているホームディレクトリに編集することで、同じ状況を修正しました
zztonedefzz

27

@Marco Aciernoの答えが少し不明瞭であると人々が気付いた場合の解決策は、より高いバージョンではなく、Java 7でビルドしていることを確認することです。

Android Studioの場合は、に変更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アシエルノ2015年

15
なぜJava 8を使用できないのですか?
Sujay


3

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

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

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

そしてJavaで

sourceCompatibility= 1.7
targetCompatibility= 1.7

これは私がする必要がある唯一のことでした。ありがとう
Chisko 16

2

この問題は、 .jar、Java 6以降の機能を使用していないが、Java 6以降ファイル。

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

詳細


私の場合は.aarファイルです。私は何をすべきか?
GvSharma 2017

1

同様の問題がありましたが、プロガードをアップグレードすることで解決しました。このコマンドで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に設定すると、問題が解決しました。

Androidスタジオ:

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

ネットビーンズ:

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

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


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.