異常Multiple dex files defineに遭遇した場合

1989 ワード

この間、Android AppはURLを通じてPDFをオンラインでプレビューする新しいニーズがありました.PdfViewPagerライブラリの使用と移入を選択すると、次の異常が表示されます.
jdmerchants:transformDexArchiveWithExternalLibsDexMergerForTestServerDebug

com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

Multiple dex files define Luk/co/senab/photoview/log/Logger


Multiple、dexの文字が現れて、直接考えたのは繰り返して依存して、それでは問題が来ました:
PdfViewPagerクラスライブラリをインポートするときに重複依存の問題が発生するのはなぜですか?PdfViewPagerクラスライブラリと私の既存の依存クラスライブラリのどのファイルが重複していますか?どのクラスライブラリのファイルとPdfViewPagerクラスライブラリが重複して依存しているかをどのように決定しますか?
問題の原因を特定
私が使っているのはMac下のAndroid Studio 3.1開発です
まず、現在のプロジェクト内のすべてのクラスライブラリ内の依存状況を知るためのツールまたはメソッドを見つける必要があります.ここでは、次のコマンドを入力する方法を示します.
./gradlew -q    :dependencies

コマンドラインウィンドウには、現在のモジュールのすべての依存状況がリストされます.私は今回の問題に関する内容を選び、以下のように示した.
\--- es.voghdev.pdfviewpager:library:1.0.3
 +--- com.android.support:appcompat-v7:25.4.0 (*)
 \--- com.commit451:PhotoView:1.2.4
      \--- com.android.support:support-v4:23.0.1 -> 25.4.0 (*)


\--- com.github.chrisbanes.photoview:library:1.2.4
 \--- com.android.support:support-v4:22.0.0 -> 25.4.0 (*)

新しく導入されたpdfviewpagerクラスライブラリはcom.comit 451:PhotoView:1.2.4を使用していることがわかります.com.github.chrisbanes.photoview:library:1.2.4クラスライブラリと重複しています
問題を解決する
問題:pdfviewpagerクラスライブラリはchrisbanes.photoviewクラスライブラリに依存しており、chrisbanes.photoviewクラスライブラリの再利用をもたらすため、pdfviewpagerを導入する際にcom.com.comit 451:PhotoView:1.2.4を排除すればよい
では、どのように排除しますか?Gradle構築プロジェクトは、サードパーティのクラスライブラリを導入する際に依存ライブラリを排除する場合の処理を考慮しているに違いありません.
compile ('es.voghdev.pdfviewpager:library:1.0.3'){
    exclude group: 'com.commit451', module:'PhotoView'
}

小結
前に出会ったことのない問題に出会って、この問題に必要な知識点はまた前に備蓄していない盲区で、この時googleは似たような問題の答えを探して類比と知識の延長をすることができて、ゆっくり考えて、有効に考えて、少し新しい結論を出して、それから思考を続けて、ますます問題を解決する成功の道に近づくことができます
参考資料
Gradle依存除外
Android Studioのパッケージの重複導入に関する問題と解決策
Gradle-5.3:依存-依存バージョンの管理