1. ホーム
  2. アンドロイド

[解決済み】Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatを定義するdexファイルが複数存在する。

2022-04-10 23:23:24

質問

を実行すると 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対応ライブラリが含まれていないのでは?

プレイサービスのAARバンドルとv13のライブラリの非互換性ですか?

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

プレイサービスを削除しても直らず、同じエラーです。

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