MAMORIO SDKとFirebaseを組み合わせて嵌まった！

# MAMORIO SDKとFirebaseを組み合わせて嵌まった！

**2017/10/21現在 MAMORIO SDK 7.3では、必要とするplay-services-locationのバージョンが11.0.4を指定しており、下記の問題は発生しなくなりました。**

前回の記事 (https://qiita.com/KazuyukiEguchi/items/9ea711463f54d19c5daf) のアプリをベースにFirebaseを加えると言う話です。

教訓：build.gradleにちょっと記述すると、SDKを簡単に組み込めるが、そこには落とし穴が！

## 動作環境(2017/10/19現在）
Android Studio 2.3.3
MAMORIO SDK Version 7.1 (https://github.com/otoshimono/mamorio-sdk-android-bin)
UQ AQUOS U SHV37 (Android 6.0.1)

## 背景
付近のMAMORIOの情報が取得出来るようになったので、ログをデータベースに格納したいと、FirebaseのRealtime databaseに格納しようと、Firebaseのセットアップして、ビルドもOKで動くようになったぞと思っていたら、MAMORIOのサービスが落ちるようになってしまった。

```text:AndroidMonitorの出力
10-19 13:02:52.960 16160-16160/.mamorio E/AndroidRuntime: FATAL EXCEPTION: main
                                                          Process: .mamorio, PID: 16160
                                                          java.lang.LinkageError: com.google.android.gms.common.GoogleApiAvailability
                                                              at com.google.android.gms.common.api.GoogleApiClient$Builder.<init>(Unknown Source)
                                                              at otoshimono.com.lost.mamorio.sdk.BackgroundRangingService.initGoogleAPI(BackgroundRangingService.java:1638)
                                                              at otoshimono.com.lost.mamorio.sdk.BackgroundRangingService.beginRanging(BackgroundRangingService.java:1499)
                                                              at otoshimono.com.lost.mamorio.sdk.BackgroundRangingService.onStartCommand(BackgroundRangingService.java:561)
                                                              at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3178)
                                                              at android.app.ActivityThread.access$2400(ActivityThread.java:173)
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1534)
                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                              at android.os.Looper.loop(Looper.java:148)
                                                              at android.app.ActivityThread.main(ActivityThread.java:5639)
                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:727)
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)

```

およ！？MAMORIO Serviceがどうやら、Google Service(GMS)のLocationサービスを使って位置情報を取得しているようだが、Exceptionが発生しているようだ！

## 原因

Android StudioのProjectでExternal Libraryの様子を見たところ

Firebaseを加える前の状態

![171019-0001.png](https://qiita-image-store.s3.amazonaws.com/0/33220/3d86427d-dc3f-c4b3-df82-9d0d61f4e4c9.png)

play-serviceのライブラリのバージョンが10.2.6を取り込んでいるのが分かります。

Firebaseのライブラリ(11.0.4)が加えると

![171019-0002.png](https://qiita-image-store.s3.amazonaws.com/0/33220/cf224724-dbf9-50c7-c118-d48c1d20f398.png)

なんと！
play-serviceのライブラリのバージョンが、10.2.6と11.0.4が混在する状況になってしまいます。
この混在するのが、災いして、Exeptionを吐いていたと思われます。

## 対策

build.gradle(Modile:App)に
compile 'com.google.android.gms:play-services-location:11.0.4'
を追加することで、バージョンが11.0.4に統一されました。

```text:build.gradle(Modile:app)
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "jp.eguchi.android.mamoriosample2"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    compile 'jp.mamorio:mamorioSDK:7.1'

    compile 'com.google.android.gms:play-services-location:11.0.4'
    compile 'com.google.firebase:firebase-core:11.0.4'
}

apply plugin: 'com.google.gms.google-services'
```

![171019-0003.png](https://qiita-image-store.s3.amazonaws.com/0/33220/c770d3a8-c040-7224-560b-94ec2044bfe0.png)

以上、異なるバージョンが混在することがあるという教訓でした。