LoginSignup
12
9

More than 5 years have passed since last update.

[Android] gradleビルド時に java.util.zip.ZipException: duplicate entry エラーが出た時に試すこと

Posted at

この記事について

Androidアプリをgradleプロジェクトとして開発している場合に、

java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex$V14.class

のような、ビルドエラーが出た時に解決に繋がったことを紹介します。

結論

この記事の結論は、以下の2点です。

  • Cmd + O で、duplicateとされているクラスを検索する。
  • ローカルに置いているjarライブラリと外部リポジトリから取得したライブラリの重複を疑う。

説明

エラーの意味

「duplicate」は「重複」と訳すことができます。つまり、

java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex$V14.class

とは、「MultiDexクラスが重複している」というビルドエラーです。

Cmd + O で、duplicateとされているクラスを検索

Android Studio でのクラス検索コマンド(Macの場合はCmd + O、Windowsはわかりません)を利用して、重複しているクラスを検索します。今回の場合は、MultiDexで検索をしました。すると、私の場合は以下のような選択肢が出ました。

MultiDexでクラス検索.png

クラス検索をかけたことで、実際に重複しているクラスを特定することができました。

ローカルのライブラリと外部取得したライブラリの重複を疑う

私の場合、クラスの重複が起きた理由は、

build.gradle
compile fileTree(dir: 'libs', include: ['*.jar'])

によって、ライブラリとして認識されていたapp/libディレクトリ内のandroid-support-multidex.jarが、build tool version のアップグレードでデフォルトで入るようになったmultidexのサポートライブラリと重複していたことが原因でした。

私の場合はbuild tool がデフォルトでいれたライブラリと重複しているという意味で、少し特殊な状況でしたが、ローカルに置いているjarライブラリとbuild.gradleで外部リポジトリからの取得を設定しているライブラリでクラスが重複していることを疑うのは一般的に通用する方法だと考えています。

おわりに

EclipseからAndroid Studioに移行したプロジェクトやAndroid Studio黎明期に始まったプロジェクトなどでは、ローカルにjarを置いている場合があるかと思います。duplicate entry エラーがでたら、何が重複しているかの特定を試みたり、jarとの重複を疑ったりしてみてください。

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9