AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

UIテストを実行しようとしたらエラー・・・

f:id:phicdy:20180206222343p:plain

ひとまずRun with --stacktraceを押してみる。

...
Caused by: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
    at com.android.dx.merge.DexMerger$8.updateIndex(DexMerger.java:565)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276)
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:574)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:166)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
    at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
    ... 1 more

これはいわゆる65536メソッド問題のようです。

UIテスト周りのbuild.gradleを見直したところ以下は消せそうだったので消し、hamcrest-libraryのメソッドはorg.hamcrest.CoreMatchersのメソッドに置き換えました。

testImplementation 'org.hamcrest:hamcrest-library:1.3'
uiTestImplementation 'com.android.support:support-annotations:25.3.1'
uiTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'

これでメソッド数が減ってUIテストが実行できるようになりました(なんでExpressoのテストないのに入れてたんだろ)