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のサービスが落ちるようになってしまった。
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を加える前の状態
play-serviceのライブラリのバージョンが10.2.6を取り込んでいるのが分かります。
Firebaseのライブラリ(11.0.4)が加えると
なんと!
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に統一されました。
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'
以上、異なるバージョンが混在することがあるという教訓でした。