ライブラリAとライブラリBを使おうとして、AとBの両方が、同じライブラリCを使う時に、AとBが指定したライブラリCのバージョンがそれぞれ違うときに複数のDEXファイルが存在してしまうようです。
自分のハマった具体的なケースを書いておきます。
NEND SDKとFirebaseは内部でplay-servicesを使っていますが、それぞれが依存するplay-servicesのバージョンが違っていました。
自分が使いたいライブラリが依存しているライブラリとそのバージョンを調べるには、ターミナルを開いて
cd app
../gradlew dependencies
と書いて出てきたものをみればわかると思います。
そこで a.b.c -> x.y.z のようになっている部分があったらそこがバージョンのずれのために別々のDEXファイルが存在する原因になっているので、それを解消してあげましょう。
↓
NEND SDKが新しくなってそれだけ新しくしたり、逆にFirebase等で新しいのを使っているのに、NEND SDKの更新が追いついていないときに出るということもありました。
ちゃんと理解してれば基本的なことなのかもしれませんが…
(調べ方忘れて二日くらいつぶしたのでした)