少し前に仕事でSDKの組み込み対応を行ったのですが、過去に導入されたライブラリと今回いれたSDKでGoogleライブラリ系の競合が発生してしまいかなり苦労しました。
今回は今後の為に「Androidアプリのライブラリ依存関係を調査する方法」についてまとめておきたいと思います。
Androidアプリのライブラリ依存関係を調査する方法
Macの場合はまずターミナルを立ち上げて、Androidのappディレクトリまで移動します。(Windowsの場合はコマンドプロンプト)
cd /"Androidプロジェクトまでのパス"/app
次に以下のコマンドを入力すると、
./../gradlew dependencies
Androidプロジェクトで導入しているライブラリの依存関係を確認できます。
gradleで依存関係を解決する方法
「gradlew dependencies」で依存関係を調査した結果、ライブラリ同士の競合が発生していた場合はプロジェクトのapp直下の「build.gradle」に以下のような設定を行って競合を解決して行きます。
1. resolutionStrategy 特定のライブラリに対してバージョンを強制的に適用する
configurations.all { resolutionStrategy { force 'com.google.firebase:firebase-iid:17.0.4' } }
2. transitive = false 推移的依存関係を無効化する
(推移的依存関係は依存関係のライブラリが依存するライブラリを依存関係にするもの)dependencies { implementation ('com.google.firebase:firebase-common:16.0.3'){ transitive = false } }
3. exclude group ライブラリから特定のパッケージを除外する
dependencies { compile ('com.google.firebase:firebase-core:16.0.6'){ exclude group: 'com.google.android.gms' exclude group: 'com.android.support' } }
依存関係を解決するための設定はこれ以外にもあるかもなので、見つけたら追記したいと思います。
参考:
気をつけたいGradleの推移的依存関係とその解決 - Qiita
第51章 依存関係の管理
Gradleで陥りやすい問題点の解決策TIPS集 - 猫好きモバイルアプリケーション開発者記録
GradleでServlet APIを除外設定する | DevelopersIO
Gradle の依存関係を使いこなしてみる - bluepapa32’s Java Blog