Firebase Crashlytics SDK 導入時にあった Gradle エラー


firebase crashlytics SDK の導入時に以下のようなエラーがありました。

```
> Task :app:compileDebugKotlin FAILED
e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
    class com.google.android.gms.location.LocationResult, unresolved supertypes: com.google.android.gms.internal.zzbej


e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:

```

`com.google.android.gms.location.LocationResult` クラスの継承元の `com.google.android.gms.internal.zzbej` クラス が見つからないようです。


# gradle ファイル

build.gradle ファイル

```
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    
    // 移行中のため古い環境です
    //ext.kotlin_version = "1.4.0"
    ext.kotlin_version = "1.3.10"
    repositories {
        google()
        jcenter()
    }
    dependencies {

        // 移行中のため古い環境です
        //classpath "com.android.tools.build:gradle:4.0.1"
        classpath "com.android.tools.build:gradle:3.5.0"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        classpath 'com.google.gms:google-services:4.3.4'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
```

app/build.gradle ファイル

```
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.example.gradleerrorsample"
        minSdkVersion 28
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            firebaseCrashlytics {
                mappingFileUploadEnabled false
            }
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    implementation 'com.google.android.gms:play-services-location:11.6.2'

    implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
}
```



# 調査

## (1) 

android studio から LocationResult クラスを参照してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16480/c4923795-8897-a17b-9b4f-c5b5c6718617.png)

確かに zzbej クラスは見つかりません。


## (2)

ビルドが通る状態まで戻しました (`implementation 'com.google.firebase:firebase-crashlytics:17.2.2'` をコメントアウト)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16480/25cea18a-7bda-c05d-76fd-cf2ea92f6b59.png)

zzbej クラスは、`com.google.android.gms:play-services-basement:11.6.2` で定義されているようです。



## (3) 

(2) のコメントアウトを解除後、`gradle app:dependencies` を実行し、ライブラリの依存関係を出力しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16480/b80aebbb-5447-ca0a-9105-194b3da05c6f.png)

262 - 271行は、`play-services-location` の依存関係です。
`play-services-basement` (264行など) や `playservices-tasks` (268行など)  が 11.6.2 から 17.0.0 に変更されています。


272行からは、`com.google.firebase:firebase-crashlytics` の依存関係です。
以下の依存関係があるようです。

* 288行より `play-services-tasks` の 17.0.0 
* 290行より `play-services-basement` の 17.0.0


`play-services-location` の同名のライブラリは、推移的な依存関係の解決により、新しいバージョンが使用されます。


# 対応

`play-services-location` を 17.0.0 に変更することで、ビルド自体はできるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16480/dd736741-7205-b0ae-4ece-84f3dff66838.png)




# 参考

[気をつけたいGradleの推移的依存関係とその解決](https://qiita.com/tomoima525/items/6dd59830aa122e39520b)


# その他

(ライブラリの更新はまめにしましょう)


## 追記1

[Release Notes : June 17, 2009](https://developers.google.com/android/guides/releases#june_17_2019) では、破壊的な変更を含んでいる。このリリース以降と以前のライブラリは、共存できないのでは ?

Firebase Crashlytics 17.0.0 のリリースは [Release Notes : April 23,2020](https://developers.google.com/android/guides/releases#april_23_2020) なので、その他の google play services なライブラリも、移行が必要だったのでは。


(11.6.2 は古すぎだが)