3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Android] FCMの GooglePlayService の依存関係を調べる

Posted at

#最初に
外部ライブラリを利用していると、依存関係がどうなってるのかとても気になることがありますよね。

そんな時、ビルド時の「依存関係」を調べると、
不整合がどこで起きているのか目安をつけることができます。

依存関係を調べる

今回のプロジェクトでは、下記環境で FCM(Firebase Console Massging) ライブラリを利用します。

android {
    compileSdkVersion 26
}
dependencies {
    implementation  "com.google.firebase:firebase-messaging:17.0.0"
    implementation 'com.google.firebase:firebase-core:16.0.3'
}

上記を利用している対象のプロジェクトに移動したら、
ターミナル から gradlew の dependencies を利用し、外部ファイルに出力させます。

[Win]
gradlew :app:dependencies > out.txt

[Mac]
./gradlew :app:dependencies > out.txt

コマンドを実行したら out.txt に「依存関係」が出力されるのでエディターで開きツリーの構成を確認します。

FCM ver17.0.0 の依存関係を表示

【抜粋】 
+--- com.google.firebase:firebase-messaging:17.0.0
|    +--- com.google.android.gms:play-services-basement:15.0.1
|    |    \--- com.android.support:support-v4:26.1.0
|    |         +--- com.android.support:support-compat:26.1.0
|    |         |    +--- com.android.support:support-annotations:26.1.0
|    +--- com.google.android.gms:play-services-tasks:15.0.1
|    |    \--- com.google.android.gms:play-services-basement:[15.0.1] -> 15.0.1 (*)
|    +--- com.google.firebase:firebase-common:16.0.0 -> 16.0.1
|    |    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    |    \--- com.google.android.gms:play-services-tasks:15.0.1 (*)
|    +--- com.google.firebase:firebase-iid:[16.0.0] -> 16.0.0
|    |    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    |    +--- com.google.android.gms:play-services-stats:15.0.1
|    |    |    \--- com.google.android.gms:play-services-basement:[15.0.1] -> 15.0.1 (*)
|    |    +--- com.google.android.gms:play-services-tasks:15.0.1 (*)
                                     ↓↓↓ (※1) 
|    \--- com.google.firebase:firebase-measurement-connector:16.0.0 -> 17.0.0
|         \--- com.google.android.gms:play-services-basement:15.0.1 (*)
#==============================================================#
+--- com.google.firebase:firebase-core:16.0.3
|    +--- com.google.firebase:firebase-analytics:16.0.3
|    |    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    |    +--- com.google.android.gms:play-services-measurement-api:[16.0.1] -> 16.0.1
|    |    |    +--- com.google.firebase:firebase-common:16.0.0 -> 16.0.1 (*)
|    |    |    \--- com.google.firebase:firebase-iid:16.0.0 (*)
|    \--- com.google.firebase:firebase-measurement-connector-impl:17.0.1
|         \--- com.google.firebase:firebase-measurement-connector:17.0.0 (*)

ツリーの見方として アロー演算子(->) となってる個所は、記載バージョンでリンクされたことを示します。

さて、ここでちょっと気になる所があります。

上記ツリーの messaging 内で 16.0.0 とリンクされるべき箇所で(※1)、
バージョン不整合を防ぐために core で利用されている 17.0.0 としてリンクされています。

また messaging/core どちらも GooglePlayService の基本コンポーネント である play-services-basement は 15.0.1 に依存していることがわかります。

Tips

GooglePlayService の基本コンポーネントである messaging/play-services-basement v15.0.1 は、support-v4 の下記バージョンと紐づいていました。

com.google.android.gms:play-services-basement:15.0.1    
|   \--- com.android.support:support-v4:26.1.0

これは compileSdkVersion のバージョンに依存しているようで 27 を利用すると appcompat-v7: 27.x を利用する必要があるため、下記のように 27系としてリンクされます。

| | --- com.android.support:support-v4:26.1.0 -> 27.0.0

FCM ver17.3.4 の依存関係を表示

この FCM バージョンでは

  • トークン受信サービス FirebaseInstanceIdService が deprecated 化
  • メッセージ受信時に ANR が発生した問題の改修
  • その他バグ改修/最適化

が行われてます。では、バージョンが変わると「依存関係」がどうなるか見てみましょう。

+--- com.google.firebase:firebase-messaging:17.3.4
|    +--- com.google.android.gms:play-services-basement:16.0.1
|    |    \--- com.android.support:support-v4:26.1.0
|    |         +--- com.android.support:support-compat:26.1.0
|    +--- com.google.android.gms:play-services-tasks:16.0.1
|    |    \--- com.google.android.gms:play-services-basement:16.0.1 (*)
|    +--- com.google.firebase:firebase-common:16.0.3
|    |    +--- com.google.android.gms:play-services-basement:16.0.1 (*)
|    |    \--- com.google.android.gms:play-services-tasks:16.0.1 (*)
|    +--- com.google.firebase:firebase-iid:[17.0.4] -> 17.0.4
|    |    +--- com.google.android.gms:play-services-basement:16.0.1 (*)
|    |    +--- com.google.android.gms:play-services-stats:16.0.1
|    |    |    \--- com.google.android.gms:play-services-basement:16.0.1 (*)
|    |    +--- com.google.android.gms:play-services-tasks:16.0.1 (*)
|    |    +--- com.google.firebase:firebase-common:16.0.3 (*)
|    |    \--- com.google.firebase:firebase-iid-interop:16.0.1
|    |         +--- com.google.android.gms:play-services-base:16.0.1
|    |         |    +--- com.google.android.gms:play-services-basement:16.0.1 (*)
|    |         |    \--- com.google.android.gms:play-services-tasks:16.0.1 (*)
|    |         \--- com.google.android.gms:play-services-basement:16.0.1 (*)
|    \--- com.google.firebase:firebase-measurement-connector:17.0.1
|         \--- com.google.android.gms:play-services-basement:16.0.1 (*)
#==============================================================#
+--- com.google.firebase:firebase-core:16.0.3
|    +--- com.google.firebase:firebase-analytics:16.0.3
|    |    +--- com.google.android.gms:play-services-basement:15.0.1 -> 16.0.1 (*)
|    |    +--- com.google.android.gms:play-services-measurement-api:[16.0.1] -> 16.0.1
|    |    |    |    +--- com.google.firebase:firebase-common:16.0.1 -> 16.0.3 (*)
|    |    |    |    \--- com.google.firebase:firebase-iid:16.0.0 -> 17.0.4 (*)
|    |    |    +--- com.google.firebase:firebase-common:16.0.0 -> 16.0.3 (*)
|    |    |    \--- com.google.firebase:firebase-iid:16.0.0 -> 17.0.4 (*)
|    \--- com.google.firebase:firebase-measurement-connector-impl:17.0.1
|         \--- com.google.firebase:firebase-measurement-connector:17.0.0 -> 17.0.1 (*)

messaging の play-services-basement は 16.0.1 にアップデートされています。
それに伴い core の play-services-basement は 15.0.1 ではなく 16.0.1 とリンクしている事が確認できます。

他では firebase-iid 16.0.0 => 17.0.4 となっていますね。

このようにバージョンが異なる状態でライブラリが混合したとき、低い方がアップグレードされます。
ダウングレードされることがあるかは現状不明ですが...

まとめ

いろんなライブラリを導入したときに、バージョン問題と思われる事象が起きたときには「依存関係」を調べることで解決の手助けになると思います。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?