複数のdexファイルがLandroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompatを定義します


212

gradle assembleDebugコマンドラインから実行すると、突然このエラーが発生します。

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

v4のgrepを実行すると、ビルドフォルダー内に2つのファイルが表示されます。

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

私のgradleファイルにはこのサポートライブラリのみが含まれています:

compile 'com.android.support:support-v13:19.0.0'

どういうわけか、r7ライブラリがどのように含まれているかについて困惑しています。私は実行gradle cleanしましたが、assembleDebugを再実行すると常に表示されます。

ビルドディレクトリ内でr7をgrepすると、ファイル内に表示されます。

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

v13を含めないと、他のものがコンパイルされません。

しかし、v13にはv4サポートライブラリが含まれていませんか?

これはPlay Services AARバンドルとv13ライブラリの間の非互換性ですか?

gradleplease.appspot.comからGradleファイルを取得しました。

Playサービスを削除しても問題は解決しません。同じエラー。

build.gradle内の依存関係:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}

1
私はすべての解決策を試しました、そしてそれはそれらすべてがうまくいかなかったのに起こりました。同じ名前で新しいプロジェクトを作成し、古いプロジェクトからすべてのファイルをコピーしただけです。そして、それは今うまくいきます。それが役に立てば幸い。
Sam003

support-v13のコンポーネントでこの問題が発生しました。多くのデバッグを行い、すべての回答を無駄に試した後、既存のJavaプロジェクトであるプロジェクトにkotlinを統合しようとしたときに導入されたことがわかりました。Kotlin標準ライブラリと他のKotlinライブラリを削除したところ、問題はありませんでした。それでもkotlinで問題を解決しようとするでしょうが、今のところ、私は仕事をしなければなりません。どんな情報も助けになるでしょう、本当にコトリンが大好きです。
clementiano 2018年

回答:


304

実行gradle -q dependencies(またはgradle -q :projectName:dependencies)して、依存関係レポートを生成します。あなたはどこr7から来ているのかを見るはずです、例えば:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

次に、excludeディレクティブを使用してその依存関係をブロックします。私の場合、それは私のCWAC-Cameraライブラリからのものなので、以下を使用します。

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(2番目のcompileステートメントは、実際に必要なバージョンを示しています)

依存関係レポートを再度実行すると、次のように問題が解決するはずです。

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

3
Mavenで利用できない.jar依存関係からモジュールを検査/除外する方法はありますか?gradle dependencies追加された依存関係を報告しないようですcompile files('libs/example.jar')
dbro 2014年

3
libs/*.jarモジュールに共通の依存関係が2つあり、どちらもアーティファクトとして使用できないとします。同様の依存関係検査/クラスの除外を実行する方法はありますか?
dbro 2014年

2
@dbro:私が気づいているわけではありませんが、もう一度、この点については調査していません。私見では、共通のモジュールを独自のJARに組み入れる必要があるため、これらのJARファイルの一方または両方が誤ってパッケージ化されているように感じます。
CommonsWare 2014年

12
./gradlew -q:projectName:dependenciesが機能しました
Defuera '17 / 11/14

15
あなたは有効にする必要があります:モジュールの依存関係からモジュールをexlucing人のためのクイックヒントcompile project(':foo')にしcompile(project(':foo')) { exclude module: 'support-v4' }。括弧に注意してください。
espinchi 2014年

122

androidブロック内のbuild.gradleファイルに次のコードを追加して、同様のエラーを解決しました。

android {
    dexOptions {
        preDexLibraries = false
    }
}

4
私のために働いた!このようにすることの欠点はありますか?
Barrie Galitzky 14

@BarrieGalitzkyこれまでに問題に遭遇したことはありません
mike.tihonchik 2014

3
おかげで、これは問題を解決するために完全に機能しました!とにかく、それはいくつかの副作用があると思います。.assemblyDebugタスクは3倍遅くなりました!
Marino

dexOptionsが見つかりません。
Oliver Dixon

10
これを追加した後、「翻訳が中断されました」エラーが発生しました。CommonsWareメソッドを試してみるべきだと思います。
DroidHeaven 2017年

36

絵は千の言葉の価値があるので

私のような初心者がこのタスクを簡単かつ迅速に行えるようにするため。これは私のために働いた@ edsappfactory.comによって投稿された答えを示すスクリーンショットです:

最初にアプリの項目行くに、Androidstudioの右側にGradleのビューを開きTasks、次にAndroid右クリックしandroidDependencies、次に選択Run

ステップ1

次に、次のようなものが表示されます。

ステップ2

私がこれを投稿した主な理由は、gradleタスクや上記のコマンドを実行する場所を知るのが容易ではなかったということです。したがって、これはそれらを実行する場所でもあります。

SO、gradleコマンドを実行するには:

最初:

最初

第二:

二番目

簡単です。

それでおしまい。

ありがとうございました。


33

また、Android Studio Gradleビューに移動し、ターゲットの「androidDependencies」を選択すると、Androidの依存関係を確認できます。

もう1つのヒント:プロジェクトと関連するモジュール/ライブラリプロジェクトの両方のlibsフォルダーからv4サポートライブラリを削除するまで、この問題が発生していました。


3
より具体的な指示?「androidDependencies」が見つかりません。Thx
CopperCash 2014

Gradleビューに移動し、[すべてのタスク]という見出しを見つけ、アプリの名前をドリルダウンしてから、「:app」をドリルダウンすると、そこに「androidDependencies」が見つかります。
AutoM8R

2
Gradleビューはどこにありますか?
Paul Beusterien、2015

4
@PaulBeusterienウィンドウの右端を見ると、Gradleとマークされた横向きのタブがあります。それをクリックして、ピン留めされたビューを開きます。androidDependenciesは実際には
重要な

ありがとう、私は簡単にするためにあなたの答えを説明するスクリーンショットを投稿しました。
MBH 2016年

11

ButterKnife 8.5.1にアップグレードすると、このエラーが発生し始めました。ここでの他の答えはどれも私にとってうまくいきませんでした。

以前gradle -q :app:dependenciesはツリーを見ていて、競合が見つかるまでjarファイルを調べていました。競合は、バターナイフの依存関係にユーザー補助機能com.android.support:support-compat:25.1.0クラスのバージョンがcom.android.support:support-v4:23.1.1含まれており、そのクラスも含まれていることでした。

私はこれから私の依存関係を変更することで解決しました:

compile 'com.jakewharton:butterknife:8.5.1'

これに:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

これまでのところ、ButterKnifeの動作に影響はないようです。

編集:私のAndroidサポートライブラリをButterKnifeに一致するようにアップグレードするという、より良い解決策があります。

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'

サポートバージョンを同じに保つことは簡単な解決策であり、モジュールを除外することは私にとっては機能しません。
Jay

私も2番目の解決策で解決しました!同じ競合がバターナイフバージョン8.8.1と競合します
GFPF

9

CommonsWareからの回答がAndroidライブラリプロジェクトに適用できなかったことが誰かにわかった場合のために、ここに修正するスニペットがあります

コンパイル(project( ':yourAndroidLibrary')) {除外モジュール: 'support-v13'}

あなたは問題を見つけるでしょう

サポートされていないGradle DSLメソッドが見つかりました: 'exclude()'

compile project( ':yourAndroidLibrary') {exclude module: 'support-v13'} を使用する場合

違いは、「プロジェクト」の前のブレスレット「(」「)です。


ありがとう、二重括弧がありませんでした!
マルコ2015

8
exclude module: 'support-v4'

プロジェクトの依存関係では機能しませんが、機能させるには、次の構文を使用するしかありませんでした。

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

ここで、:Android-SDKはプロジェクト名です。


8

私は同じ問題を抱えていましたが、ライブラリのためにアプリにメソッドが多すぎるようです:http : //developer.android.com/tools/building/multidex.html

それを解決する:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

詳細はこちらError:Execution failed for task ':app:dexDebug'。>コマンドコマンドがゼロ以外の終了値2で終了しました


1
マルチデキシングはアプリの起動速度を遅くする可能性があります。本当に必要な場合にのみ使用してください。
James Goodwin

6

同じエラーが発生しましたが、最近v4からv13に変更したためです。だから私がしなければならなかったすべてはプロジェクトをきれいにすることでした。


1
intellijをアップグレードした後も同じエラーが発生し、プロジェクトをクリーンアップすると問題が修正されました。
Vlad Spreys 2014

5

レガシープロジェクトでも同じエラーが発生しました。私の欠点は、support-libraryが2回含まれていたことです。1つはgoogle-play-services lib内に、もう1つはスタンドアロンとして含まれていました。

これは私がそれを修正した方法です:

BAD build.gradle:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

良いbuild.gradle:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

それが誰かを助けることを願っています:-)


3

私は使用com.google.android.gms:play-services-analytics:8.3.0android-support-v13.jarていてexclude module: 'support-v4'、仕事に行くことができませんでした。

私にとってうまくいったのandroid-support-v13は、android-support-v13.jarファイルではなくアーティファクトを使用することでした。

すなわちの代わりに

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

使った

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}


3

私の場合、問題はバージョンの不整合が原因でした:

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

解決策は簡単でした:すべてをバージョン25にしてください


3

同様の DEXの問題解決方法

gradle.buildは含んでいました:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

削除すると問題は解決しました

compile files('libs/httpclient-4.2.1.jar') 

私のグラドルは次のようになります:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

JARファイルとコンパイルされたGradleプロジェクトに冗長性がありました

したがって、同じクラスを持つ依存関係とjarファイルを鋭く探してください。

そして冗長性を取り除きます。
これでうまくいきました。


2

Eclipseからプロジェクトをインポートした場合。

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

EclipseプロジェクトをAndroid Studioにインポートした後に直面したシナリオ。

お役に立てれば..


2

これは厄介な問題であり、根本的なケースを見つけるのに時間がかかる場合があります。続行する方法は@CommonsWareの回答です。

私は最近この問題に直面し、解決するのが難しいと感じました。

私の問題は、build.gradleに「+」バージョンのライブラリを含めることでした。ライブラリの最新バージョンには、古いdexとbangのいずれかが含まれていました。

古いバージョンのライブラリに戻して解決しました。

androidDependenciesを実行して、実際に何が起こっているかを確認することをお勧めします。ビルドフォルダーを検索するのも良い方法です。

とりわけAndroid Studio 2.2は、この問題を追跡するためのビルド機能を提供しています。

Happy Coding Guys


2

Android Studioで、build.gradleに移動し(プロジェクトとモジュールの両方のbuild.gradleファイルを確認)、重複する依存関係を検索します。

プロジェクトで不要なものを削除します。


2

Gradleキャッシュからすべてのファイルを削除すると、問題が解決しました。

Linuxの場合:

rm -rf ~/.gradle/caches/*

1

依存関係のコンパイル「com.android.support:support-v4:18.0.+」を削除しました、そしてそれは動作します


2
これはコメントでなければなりません。そうでなければ、より良い方法で説明する必要があります。
Anirudh Sharma

1

私は単に追加することで私の反応ネイティブプロジェクトの問題を解決することができました

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

私のandroid \ app \ build.gradleファイルの最後に


0

最後に、モジュールのgradleファイルでこれらの属性を変更して解決しました

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. 「com.android.support:appcompat-v7:+」をコンパイルします
  4. 「com.android.support:recyclerview-v7:+」をコンパイルします

0

react-native-paletteプロジェクトに追加するときに同じ問題が発生しました。依存関係ツリーは次のとおりです。

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

私は多くのsolutonsを試してみましたが、変更されるまで、それを修正することができませんでしたcom.android.support:appcompatでバージョンをandroid/app/build.gradle、私はこの缶の助けを望みます:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

複数のエントリは大きな問題ではないようです、バージョンの不一致は


0

compile file('...')minSdkVersionを21に増やし、multidexを有効にすることで、競合が発生した。それが最善の解決策であるかどうかはわかりませんが、私の場合、それを機能させる唯一の方法です。

注:句compile file('...')を入力できないexcludeため、オプションを使用できないようです。


0

同じ問題があり、私の解決策はサポートバージョン'27。+ '(27.1.0)を'27 .0.1'に変更することです


0

同じ問題が発生しました。私のプロジェクトでは、次の依存関係がありました:

  • appcompat-v7
  • android-support-v13

従来の理由により、appcompatはGoogle Mavenリポジトリからフェッチされましたが、android-supportはローカルの.jarでした。

これを理解し、このローカル参照をMaven参照に置き換えたところ、ビルドの問題が解決しました。

これが私のapp / build.gradleの差分です:

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


0

これをproject.propertiesに追加することですべての問題を解決しました

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0

0

次のエラーを受け取りました

タスク ':app:transformDexArchiveWithDexMergerForDebug'の実行に失敗しました。

com.android.build.api.transform.TransformException:com.android.dex.DexException:複数のdexファイルがLandroid / support / constraint / ConstraintSet $ 1を定義します

修正:ビルド->プロジェクトのクリーンアップ


こんにちは、Stack Overflowへようこそ。ただし、回答を繰り返さないでください。すでに24の回答があることを除けば、ashishduhから回答として既にクリーンな建物が提供されています。ありがとう!
Elletlar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.