Help us understand the problem. What is going on with this article?

Dependency Reportを出力してMultiple dex files defineを解決

More than 5 years have passed since last update.

Android開発において新規でライブラリを取り込む際にちょいちょい発生するMultiple dex files define
前から厄介なヤツだったんですが、Gradleを使い始めた頃に依存関係で悩まされることが多かったのでそんな時に僕がよくやっていたDependency Reportを使っての解決方法をメモ

Dependency Reportを出力してみる


やり方はコマンドラインから出力したいプロジェクト直下に行って以下のコマンドを叩くだけ
$ cd <プロジェクトのディレクトリ>
$ ./gradlew -q dependencies

コマンドを叩いてしばらくすると長ったらしいReportが出力されます
参照すると、各ライブラリが中で使用している別ライブラリを確認することができるので、重複しているライブラリを確認することができます

*_releaseApkの部分のみ抜粋

_releaseApk - ## Internal use, do not manually configure ##
+--- com.github.chrisbanes.actionbarpulltorefresh:library:+ -> 0.9.9
|    \--- com.github.castorflex.smoothprogressbar:library:0.4.+ -> 0.4.0
+--- com.squareup:otto:1.3.5
+--- com.jakewharton:butterknife:5.1.1
+--- com.github.chrisbanes.photoview:library:1.2.2
+--- com.android.support:appcompat-v7:19.+ -> 19.1.0
|    \--- com.android.support:support-v4:19.1.0
+--- com.google.android.gms:play-services:5.0.77
|    \--- com.android.support:support-v4:19.1.0
--- sample:facebook:unspecified

実際に取り込まれるバージョンも確認できるのでかなり便利

build.gradleを修正

上では割愛してますが、別プロジェクトにしているfacebook内でもsupport-v4を利用しているためappcompat-v7play-servicesでsupport-v4をexclude moduleの対応をすれば解決
*Before

dependencies {
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
    compile 'com.squareup:otto:1.3.5'
    compile 'com.jakewharton:butterknife:5.1.1'
    compile 'com.github.chrisbanes.photoview:library:1.2.2'
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'com.google.android.gms:play-services:5.0.77'
    compile project(':facebook') // この内部でもsupport-v4が使われている
}

*After
dependencies {
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
    compile 'com.squareup:otto:1.3.5'
    compile 'com.jakewharton:butterknife:5.1.1'
    compile 'com.github.chrisbanes.photoview:library:1.2.2'
    compile ('com.android.support:appcompat-v7:19.+') { exclude module: 'support-v4' }
    compile ('com.google.android.gms:play-services:5.0.77') { exclude module: 'support-v4' }
    compile project(':facebook') // この内部でもsupport-v4が使われている
}

再度Dependency Reportを出力すると_releaseApkの箇所は以下のように変化した
_releaseApk - ## Internal use, do not manually configure ##
+--- com.github.chrisbanes.actionbarpulltorefresh:library:+ -> 0.9.9
|    \--- com.github.castorflex.smoothprogressbar:library:0.4.+ -> 0.4.0
+--- com.squareup:otto:1.3.5
+--- com.jakewharton:butterknife:5.1.1
+--- com.github.chrisbanes.photoview:library:1.2.2
+--- com.android.support:appcompat-v7:19.+ -> 19.1.0
+--- com.google.android.gms:play-services:5.0.77
--- sample:facebook:unspecified

この状態でbuildしたらMultiple dex files defineが発生しなくなってビルドできるようになった
nissiy
Androidアプリ作ってます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away