私はすでにその質問が非常に頻繁に尋ねられて答えていることを知っていますが、見つけた答えのどれも私の問題を解決しませんでした。
それはエラーです:
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'])
もあるので、コンパイルファイルは役に立たない可能性があります
わかった、悪い。
プロジェクトSDKセクションでは、Android SDK
を追加するときにJava SDK
を指定する必要があり、すべてのAndroid SDKはSDKとしてJava 8を使用して作成します。プロジェクトレベルが1.7
であっても、間違ったバージョンのクラスファイル(理由がわかりません。すべてがプロジェクトレベルで選択されたと思われます)。
ここで、SDK(Java version "1.x.0"
部分)を変更しました。
そして、それはうまくコンパイルするようです。
今日以前に機能した理由は、私のSDKが1.8
ではなくAndroid API x
だったためです。
Java_HOME
変数がJava 1.8に変更され、Javaプロジェクトの依存関係として純粋なAndroidモジュールをコンパイルすると、このエラーメッセージが表示されました。
Javaモジュールのbuild.gradle
apply plugin: 'Java'
Java_HOME
を1.7に戻すことで修正しました:
export Java_HOME=`/usr/libexec/Java_home -v 1.7`
build.gradleでこの特定のモジュールの1.7に戻します
apply plugin: 'Java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
@Marco Aciernoの回答が少し不明瞭であると人々が感じる場合、解決策は、あなたがJava 7でビルドし、より高いバージョンではないようにすることです。
Android Studioの場合、File -> Project Structure -> SDK Location -> JDK Location
をjdk1.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
}
とJavaで
sourceCompatibility= 1.7
targetCompatibility= 1.7
この問題は、Java 6以降の機能を使用していないが、Java 6以降を使用してビルドされた.jar
ファイルを使用する場合に発生します。
その.jar
ファイルをビルドした場合、Gradle
またはProGuard
またはCompiler Version
で何も変更する必要はありません。解決策は非常に簡単です。.jar
ファイルを再度ビルドしますが、Java 5以下を使用します。
詳細 。
同様の問題がありましたが、プロガードをアップグレードして解決しました。このコマンドでプロガードバージョンを取得します
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をサポートしていません。
netbeansからAndroid studioに自作ライブラリを追加しようとしたときに、同様の問題が発生しました。ソースとターゲットの互換性をAndroid studioで、ソース/バイナリ形式をnetbeans(両方!)でJava 1.7に設定すると、問題が解決しました。
Androidスタジオで:
プロジェクト構造->モジュール/アプリ->プロパティ->ソースおよびターゲット1.7
netbeansの場合:
ファイル->プロジェクトのプロパティ->ソース->ソース/バイナリ形式1.7
次に、netbeansプロジェクトをクリーンおよびビルドし、.jarを「NBProj/dist」から「app/libs」にコピーします
java8のみがインストールされている場合、ケースのソリューションを共有し、Javaコンパイラレベルを1.7に設定し、プロジェクトを再構築するだけで問題ありません。