コマンドラインから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を再実行すると常に表示されます。
Buildディレクトリの中でr7をgrepすると、ファイルの中でそれがわかります。
Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches
V13を含めないと、他のものはコンパイルされません。
しかし、v13にはv4サポートライブラリは含まれていませんか?
これはplay services AARバンドルとv13ライブラリの間の非互換性ですか?
Gradleplease.appspot.comからグラドルファイルを取得しました。
プレイサービスを削除しても問題は解決しません。同じエラーです。
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'
}
依存性レポートを生成するには、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
私は、Androidブロック内のbuild.gradleファイルに次のコードを追加することで、同様のエラーを解決しました。
Android {
dexOptions {
preDexLibraries = false
}
}
また、Android Studio Gradleビューに移動してターゲットの「androidDependencies」を選択することで、Androidの依存関係を確認できます。
もう1つのヒント:プロジェクトと私の関連するモジュール/ライブラリプロジェクトの両方のlibsフォルダからv4 support libを削除するまで、私はこの問題を抱えていました。
から絵は千語の価値がある
この作業を私のような初心者でも簡単かつ迅速に行えるようにするため。これは私のために働いた@ edsappfactory.comによって投稿された答えを示すスクリーンショットです:
最初にAndroidstudioの右側にあるGradleビューを開き、アプリの項目でTasks
、次にAndroid
に移動してからandroidDependencies
を右クリックし、Run
を選択します。
2番目あなたはこのような何かを見るでしょう:
私がこれを投稿した主な理由は、gradle
タスクや上記で投稿されたコマンドをどこで実行するかを知るのは容易ではなかったことです。だから、これも彼らを言い訳するところです。
そのため、gradleコマンドを実行します。
最初:
第二:
それは簡単です。
それでおしまい。
ありがとうございました。
ButterKnife 8.5.1にアップグレードすると、このエラーが発生し始めました。ここで他の答えのどれも私のために働きませんでした。
ツリーを見るためにgradle -q :app:dependencies
を使い、それから衝突が見つかるまでjarファイルを調べました。競合は、butterknifeの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サポートライブラリをバターナイフのものと一致するようにアップグレードすることでした:
compile('com.Android.support:appcompat-v7:25.2.0')
compile('com.Android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
誰かが CommonsWare からの答えがAndroidライブラリプロジェクトに適用できなかったことを知った場合、ここに修正するスニペットがあります
compile(project( ':yourAndroidLibrary')){除外モジュール: 'support-v13'}
あなたは問題を見つけるでしょう
サポートされていないGradle DSLメソッドが見つかりました: 'exclude()'
コンパイルプロジェクト( ':yourAndroidLibrary'){exclude module: 'support-v13'}を使用している場合
違いは、ブレスレット "("と ")"の前に "プロジェクト".
私は同じ問題を抱えていたし、それは私のアプリはライブラリのためにあまりにも多くのメソッドを持っていたようです: http://developer.Android.com/tools/building/multidex.html
でそれを解決しました:
Android {
defaultConfig {
...
multiDexEnabled = true
}
}
詳細はこちら エラー:タスク ':app:dexDebug'の実行に失敗しました。 >コマンドがゼロ以外の終了値2 で終了しました
exclude module: 'support-v4'
プロジェクトに依存している私にとってはうまくいきませんでしたが、それをうまく機能させるには、次の構文を使用するしかありませんでした。
configurations {
dependencies {
compile(project(':Android-SDK')) {
compile.exclude module: 'support-v4'
}
}
}
Android-SDKはあなたのプロジェクト名です。
私はこれと同じエラーがありましたが、それは私が最近v4からv13への使用を変更したからです。だから私がしなければならなかったのはプロジェクトをきれいにすることだけでした。
従来のプロジェクトでも同じエラーが発生しました。私の欠点は、サポートライブラリが2回含まれていたことです。
これは私がそれを修正した方法です:
悪い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'
}
誰かに役立つことを願っています:-)
私の場合、問題はバージョンの不一致が原因でした。
Build tools 25
compileSdk 24
targetSdk 24
Support library 24
解決策は簡単でした:すべてをバージョン25にする
同様の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')
私のgradleは次のようになります。
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ファイルを鋭く探してください。
そして冗長性を取り除きます。
これは私にとって役に立ちました。
これは厄介な問題で、根本的な問題を見つけるのに時間がかかることがあります。あなたが進むべき道は@ CommonsWare答えです。
私は最近この問題に直面し、解決するのが難しいと感じました。
私の問題は私がbuild.gradleに "+"バージョンでライブラリを含めていたことでした。最新版のライブラリには、以前のdexとbangのいずれかが含まれていました。
私は古いバージョンのライブラリに戻して解決しました。
AndroidDependenciesを実行して実際に何が起こっているのかを確認するのは良いことです。ビルドフォルダを検索するのも良いでしょう。
とりわけAndroid Studio 2.2はこの問題を追跡するためのビルド機能を提供します。
ハッピーコーディング人
Android Studioでbuild.gradle(プロジェクトとモジュールの両方のbuild.gradleファイルを確認してください)に移動し、重複した依存関係を検索します。
プロジェクトに必要のないものを削除します。
Gradleキャッシュからすべてのファイルを削除すると問題が解決しました。
linuxの場合
rm -rf ~/.gradle/caches/*
プロジェクトをEclipseからインポートした場合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スタジオにインポートした後に直面したシナリオ。
お役に立てれば..
私はcom.google.Android.gms:play-services-analytics:8.3.0
とAndroid-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')
}
依存関係の中のコンパイル 'com.Android.support:support-v4:18.0.+'を削除しました、そしてそれは働きます
私は同じ問題を抱えていました、そして私の解決策はサポートバージョン '27。+'(27.1.0)を '27 .0.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ファイルの最後
私のプロジェクトに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 (*)
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:+"
}
複数のエントリは大きな問題ではないようです、バージョンの不一致は
これをproject.propertiesに追加することで、私のすべての問題を解決しました。
cordova.system.library.7=com.Android.support:appcompat-v7:27.1.0
以下のエラーを受信しました
タスク ':app:transformDexArchiveWithDexMergerForDebug'の実行が失敗しました。
com.Android.build.api.transform.TransformException:com.Android.dex.DexException:複数のdexファイルがLandroid/support/constraint/ConstraintSetを定義しています$ 1
修正:[ビルド] - > [クリーンプロジェクト]に移動します
MinSdkVersionを21に増やし、マルチデックスを有効にすることでcompile file('...')
の衝突を解決しました。それが最善の解決策であるかどうかわからないが、私の場合にはそれがうまくいくようにすることができる唯一の方法です。
注:compile file('...')
の場合、exclude
句を記述できないため、このオプションは使用できませんでした。
最後に、モジュールのgradleファイルでこれらの属性を変更して解決しました