Javaがゼロ以外の終了値2で終了しました-Android Gradle


135

Androidアプリの実行中にこのエラーが発生します(それをクリーンアップしてからビルドしましたが、エラーはまだ存在しています)

  • 同期:OK
  • プロジェクトを作成:OK
  • クリーン:OK
  • 実行:エラー

エラー:タスク ':app:dexDebug'の実行に失敗しました.com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process 'command' C:\ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe ''がゼロ以外の終了値2で終了しました

私のgradleファイル:

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
    applicationId "com.rzr.rzevallosr.miappdepruebas"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

// This library handles authentication and authorization
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
// This library handles music playback
compile 'com.spotify.sdk:spotify-player:1.0.0-beta9@aar'

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.+'

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

compile files('libs/spotify-web-api-android-master-0.1.0.jar')
compile files('libs/okio-1.3.0.jar')
}

編集:「compile fileTree(dir: 'libs'、include:['* .jar'])」が表示されなかったため、ライブラリを2回コンパイルしていたので、コメントするだけです。

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

そしてそれはうまく働きます。


2
@JaredBurrows私の場合の問題は、アプリがライブラリを2回コンパイルしていたことです。
Maverick.pe

回答を投稿して、正しいとマークしていただけますか?
Jared Burrows 2015

@JaredBurrows完了。ありがとう
Maverick.pe

ここに私の記事をチェックしてみてくださいstackoverflow.com/a/33387368/740372を
サンジョイサハ

私は同じエラーを抱えていますが、gradleファイルにはそれほど多くのコンパイルがありません。助けてください。私はこの質問を投稿しました: stackoverflow.com/questions/34558251/… 私はアンドロイド開発に完全に新しいです。
アユッシュ、2016年

回答:


205

この問題は、Androidによって課された65Kメソッドのdex制限を超えたことが原因と考えられます。この問題は、プロジェクトを清掃し、build.gradleに依存関係から、いくつかの未使用のライブラリや方法を除去することにより、いずれかを解決することができるOR multidexサポートを追加することによって。

したがって、ライブラリとメソッドを保持する必要がある場合は、gradle構成で宣言することにより、マルチdexサポートを有効にできます。

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

multidexサポートの詳細と、65Kを超えるメソッドを使用したアプリの開発については、こちらをご覧ください


それがうれしい、それはあなたを助けました。@David
minhazur

2
ありがとうございました
Aayushi

4
その後、スタートアップクラスのメソッドをオーバーライドします。@Override protected void attachBaseContext(Context base){super.attachBaseContext(base); MultiDex.install(this); }
ゲントベラニ2015年

うわー、それは素晴らしい働きをします。これが問題であるとは思わなかった。
Neela

エラーの原因を正確に確認したい場合は、このように、gradleターミナルからプロジェクトをビルドしてみてください./gradlew assembleDebug --stacktrace --debug。私の場合、このエラーを見ましたcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

私にとっての問題は、私がbuild.gradleに不要なcomplieライブラリコードを入れていたことです

dependencies {
    compile 'com.google.android.gms:play-services:7.5.0'
}

これは65k以上のメソッドを引き起こしていたため、削除し、gradle syncを実行し、プロジェクトをクリーンアップしてから、再度実行すると、このエラーは停止しました。マップとgcmだけが必要だったので、これらの行と同期されたプロジェクトを配置しました

compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

こんにちは私は再びこの問題に遭遇しましたが、今回はビルドツールのバージョンを変更したためであり、multidex ..を有効にする必要が本当にありました。

defaultConfig {
    applicationId "com.am.android"
    minSdkVersion 13
    targetSdkVersion 23
    // Enabling multidex support.
    multiDexEnabled true
}

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:1.0.1'
}

そして、Applicationクラスを拡張するクラスを作成し、このメソッドをクラス内に含めます。

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

OnCreateメソッドにも含める

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

2
これは最良のソリューションです。実際に使用しているライブラリのみを含めてください。
Roisgoen 2015

2
私のために働く!「com'google.android.gms:play-services:7.5.0」をコンパイルして「com.google.android.gms:play-services-identity:8.1.0」をコンパイルするように「com.google.android。 gms:play-services-plus:8.1.0 "
オスカーカルデロン

1
いいですね、次も参照してください:developers.google.com/android/guides/setup-さまざまな個々のライブラリのリストを提供します。
Ed Manners

@ edsappfactory.com私はそれを参照し、使用し、変更しました。
Amit Tumkur

32

誰かがまだこれで苦労していて、なぜこれが起こっているのか、そしてどのように修正するのか手掛かりがない場合に備えて。実際、このエラーは

エラー:タスク ':app:dexDebug'の実行に失敗しました。> com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process 'command' C:\ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe ''で終了ゼロ以外の終了値2

多くの理由が考えられますが、JDKバージョンに関連するものではないので、時間を間違った方向に向けないでください。これが発生する主な理由は2つあります

  1. 同じライブラリまたはjarファイルにいくつかの場所が含まれていて、それらのいくつかは互いに競合しています。
  2. 65kメソッドの制限に近づいている、またはすでに超えています

最初のケースは次のように修正できます。複数回含めた依存関係を見つけます。これを行うには、Android Studioターミナルで次のコマンドを実行します

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

これはすべての依存関係を返しますが、libフォルダーからインクルードするjarファイルはアスタリスク(*)でマークされた重複を取り除こうとしますが、これが常に可能であるとは限りませんが、場合によっては、これを行うことができます。何度も含まれています、あなたはこのようにそれを行うことができます

compile ('com.facebook.android:facebook-android-sdk:4.0.1'){
    exclude module: 'support-v4'
}

2番目のケースでメソッドの制限を超えた場合は、含まれているライブラリを削除して最小化を試みることをお勧めします(最初の解決策のように聞こえる)、それを行う方法がない場合は、defaultConfigにmultiDexEnabled trueを追加します。

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

この増加方法の制限が、それは可能性があるため、パフォーマンスの問題を行うための最良のものではありません 。重要のみ追加multiDexEnabled trueするdefaultConfigことが予期しない動作になりますアンドロイド<5ロリポップを実行しているすべてのデバイス上で実際には十分ではありませんとNoClassDefFoundError。それを解決する方法はここに記載されています


18

それまでに」「fileTree(dir: 'libs'、include:['* .jar'])をコンパイルするとは知らなかったので、libsフォルダーにjar拡張子を持つものをすべてコンパイルするので、これをコメント(または削除)します行:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

そしてそれはうまく働きます。とにかくありがとう!私の悪い。


5
または逆にcompile fileTree(dir: 'libs', include: ['*.jar'])、gradleでコメントします。それは私を助けました。
Tomasz Mularczyk 2015年

この問題に関する他の解決策はありますか?各jarファイルをコンパイルせず、代わりにこの行を使用しましたcompile fileTree(dir: 'libs', include: ['*.jar'])が、それでも同じエラーが表示されます。
カイリサン2016

9

同じ問題があり、不要なライブラリの削除を修正しました

compile fileTree(dir: 'libs', include: ['*.jar'])

そのライブラリを削除したところ、問題なくプロジェクトを実行できました。


私はslidingMenuクラスを追加しようとしていて、これをメインのgradleから削除するとうまくいきました。ありがとう!:)
Lucas Senechal 16

6

私はデバッグビルドでmultiDexを有効にすることで解決しました。

defaultConfig {
multiDexEnabled true
}

6

埋め込みJDKは64ビットであるため、埋め込みJDK(32ビット)を拒否します

プロジェクトを右クリック-> モジュール設定を開く -> SDKの場所 ->埋め込みJDkを使用するのチェックを外し、例えばUbuntu / usr / lib / jvm / java-8-openjdk-i386で JDKパスを設定します


1
埋め込みJDKが64ビットであるため、これは機能すると思います。32ビットマシンでも同じ問題が発生しました。
Lukas Novak

これにより、32ビットマシンの問題が修正されました。echo $JAVA_HOMEパスのために
SANBIは

はい、私はそれが私のマシンが32ビットであることと関係があることを知っていました。ありがとう、Zacharia-私の日を救った!
Ilonpilaaja 16

5

考えられる問題:dex 65kメソッドの制限を超えました。問題が発生する前にライブラリまたはいくつかのメソッドを追加した可能性がありますか?


1
いくつかではなく、いくつかの方法があります。
Maverick.pe

ええと、プロジェクトの以前のバージョンをビルドするか、可能であれば未使用のライブラリを削除して再ビルドしてください
Artem Zinnatullin

私もいくつかの方法を持っています
bowman han

3

SDKを既に更新していて、google-play-servicesも使用している場合は、依存関係に注意する必要があります。

以下に従ってください:コンパイル 'com.google.android.gms:play-services:+'コンパイル 'com.google.android.gms:play-services:6.5.87'に置き換えます

注:ここで「6.5.87」はgoogle-play-serviceバージョンです。お役に立てれば幸いです。


2

あなたのプロジェクトの.jarファイルの競合だと思います。

私はandroid-support-v4.jarをlibsフォルダーから削除しました!!!

プロジェクトでエラーが発生した場合は、build.gradleファイルをチェックインします

依存関係{

}


2

私の場合、問題は、追加した新しいライブラリ(gradle依存関係)が他の依存関係に依存しており、それらの基礎となる依存関係の2つが、ビルドスクリプト内の他のライブラリの依存関係/依存関係と競合/衝突していることでした。具体的には、Apache Commons Validator(メール検証用)を追加し、その2つの依存関係(Apache Commons LoggingとApache Commons Collections)がRobolectricで使用されているものと競合していました(同じライブラリの異なるバージョンがビルドパスに存在したため)。そのmodulesため、新しい依存関係()を追加するときに、競合する依存関係のバージョン()を除外しましたValidator

compile ('commons-validator:commons-validator:1.4.1') {
    exclude module: 'commons-logging'
    exclude module: 'commons-collections'
}

次のgradleコマンドを使用して、gradleモジュールの依存関係を確認できます(プロジェクトにモジュールが1つしかない場合があります)(Android Studio / Intellijでプロジェクトを作成した場合に作成されるgradleラッパーを使用しています)考え)。プロジェクトのルートディレクトリで次のコマンドを実行します。

./gradlew:YOUR-MODULE-NAME:dependencies

これらのexcludeディレクティブを追加して実行を再試行すると、LoggingやCollectionsなどの一部のApache Commonsライブラリで使用されるduplicate fileため、エラーが発生しましNOTICE.txtた。パッケージ化するときにそのテキストファイルを除外する必要がありました。私のbuild.gradleに、私は追加しました:

packagingOptions {
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/NOTICE.txt'
}

新しいライブラリ(Validator)は、依存関係/モジュールのわずかに古いバージョン(他のライブラリ(Robolectric)によって既にビルドパスにインポートされている)で動作することがわかりました。これはこの特定のライブラリの場合でしたが、他のライブラリが基礎となる依存関係の最新のAPIを使用している可能性があります(この場合、競合するモジュール/依存関係に依存する他のライブラリが、新しいバージョン(これらのライブラリのエントリの下にある古いバージョンのモジュール/依存関係を除外することにより))。


1

私の場合、2つ以上のライブラリが競合しているときに同じエラーが発生しました(同じライブラリですが、バージョンが異なります)。依存関係ブロックでアプリのbuild.gradleを確認してください。


1

確実に機能する2つの選択肢があります。

  1. プロジェクトをクリーンアップしてからビルドします。

上記の方法でうまくいかない場合は、次の方法を試してください。

  1. 次をアプリレベルでbuild.gradleファイルに追加します

    defaultConfig {   
    
    multiDexEnabled true
    
    }

両方を試しましたが、新しいエラーが発生Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.classしました。次に何をすればよいですか?
Kairi San


このエラーは、プロジェクト内の重複/同じパッケージが原因で発生しています
Udit Kapahi

1

最新バージョンに私のJava SDKを更新1.7.0_79し、更新SDK Locationの下では、Project Structure私のために問題を解決しました。


1

私の問題は、

com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process 'command' /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Contents / Home / bin / java ''がゼロ以外の終了値2で終了しました

私にもこの痕跡がありました:

キャッチされない翻訳エラー:java.lang.IllegalArgumentException:すでに追加されています:Lcom / mypackage / ClassX;

問題は、2つの異なるライブラリに同じクラスを追加していたことです。ライブラリの1つからクラス/ jarファイルを削除すると、プロジェクトは正しく実行されます


正確に、同じ問題、同じクラスシグネチャを取得しました。幸い、それは私のクラスでしたので、リファクタリングしました。私はここに答えを書きました:stackoverflow.com/a/35045501/3397345
Davideas

1

私にとってはプレイストアの依存関係全体を追加していました

「com.google.android.gms:play-services:8.4.0」をコンパイルします

しかし、私はグーグルマップのみを必要としていたので、私はそれをより具体的にし、エラーは解決しました。

「com.google.android.gms:play-services-maps:8.4.0」をコンパイルします


0

私の場合、問題はビルドツールのバージョン23.0.0 rc3で、22.0.1に変更して問題を修正しました。


0

低品質のケーブル/不良ケーブルを使用してデバイスをPCに接続している可能性があります。ケーブルを交換したところ問題なく動作しました。


0

このエラーは、より多くのライブラリーを使用していることが原因です。私の場合、「compile 'com.google.android.gms:play-services-9.4.0」がこのエラーの原因です。このエラーを回避するには、必要なライブラリーを使用してください。アプリでマップを使用するには、次にcompile 'com.google.android.gms:play-services-maps:9.4.0'を使用します。一方、Google Play Servicesの依存関係を追加しながら必要なライブラリのみを指定します。デフォルトでは、すべてのライブラリが含まれています。


0

あなたのgradle.buildファイルで、これを使用してください

"compile fileTree(dir: 'libs', include: ['*.jar'])"

そして、それはうまくいきます。


0

エラーの原因を正確に確認したい場合は、このように、gradleターミナルからプロジェクトをビルドしてみてください./gradlew assembleDebug --stacktrace --debug。私の場合、次のエラーが発生しましたcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

これは、Googleマップをプロジェクトに統合しようとしたときに発生しました。それを修正するために、私が含めていたライブラリを単にチェックしました

compile 'com.google.android.gms:play-services:9.8.0'

単にそれを

compile 'com.google.android.gms:play-services-maps:9.8.0'

そして問題はなくなった


0

プロジェクトをに変換した後も同じエラーが発生しましたKotlin。私の問題は、プロセス中にjreの場所が無効なパスに変更されたことでした(なぜこれが起こり得るのか...時間の無駄になってしまいました)。これを行うことで修正しました:

File > Project Structure > SDK Location 

Use embedded JDK古いJDKインストールを指しているオプションのチェックを外し、正しいオプションを選択しました。

/home/my_user/jdk1.8.0_101

これを変更した後、エラーは消えました


0

私のために働いた:)

私は以前にそれが7だったし、その後に行き、最新のバージョン8へのjavaをアップグレードしprojの上で右クリックを設定OPEN MODULE電気ショック療法とは/ usr / libに/ JVM / javaの-8-オラクルにJDKのパスを変更しインストールし、新しいJava 8を。そしてスタジオを再起動します

/ usr / lib / jvmでjava 8フォルダー名を確認します。

私はubuntuを使用していますここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.