背景
Android のエミュレーターでは正常に動作するのに、実機で起動するとクラッシュするという事象が発生し原因を調査していました。
それの原因は別エントリーで書く予定ですが、今回はそれ以前の話として Crashlytics を導入することにしました。
手順
公式ドキュメントより
詳細は上記に記載されているので割愛しますが、簡略して書くと下記のとおりです。
1. build.gradle
(app じゃないほう)の dependency に以下を追加
buildscript {
...
dependencies {
...
classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.1.1'
}
}
2. build.gradle
(app のほう)に以下を追加
apply plugin: 'com.google.firebase.crashlytics'
dependencies {
...
implementation 'com.google.firebase:firebase-analytics-ktx:17.4.2'
implementation 'com.google.firebase:firebase-crashlytics:17.0.0'
...
}
3. 実行する
エミュレータ上ですが、問題なく実行できました。
実機の方は USB ケーブルが腐ってて端末を認識できず動作未確認ですが、今回の問題は別の話です。
署名付き APK を作成しようとする
Android Studio 上で
-
Build
>Generate Signed Bundle / APK
を選択して APK を作成します(Bundle にはまだ未対応)。
エラーその1
Could not resolve Firebase Google app ID, cannot upload mapping file
??
結論から言うと、さっきのドキュメントに以下のような記載があり
自分がやった手順では最後の
apply plugin: 'com.google.firebase.crashlytics'
しか追加してなかったのですが、その上の行に薄〜く書いてある
apply plugin: 'com.google.gms.google-services'
も追加する必要がありました。
エラーその1解決
build.gradle
に
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
がちゃんと全部あるかどうか確認。
それを追加して再度実行します。
エラーその2
今度は
Host name may not be empty
というのが出ました。一体何のことだ!?
これも結果だけ言うと、公式ドキュメントを読み進めて、別のページを参考にしました。
このエラーは、 proguard(難読化)を有効にしている場合に起きるようです。
実際、ステージング向けに minifyEnabled false
(proguard 無効)な環境では、この段階で署名付き APK の作成に成功しています。
今回失敗したのは proguard 有効な環境です。
エラーその2解決
minifyEnabled true
な環境では、以下の設定も一緒に追加する必要があるようです。
release {
...
minifyEnabled true
firebaseCrashlytics {
mappingFileUploadEnabled false
}
}
ここまでで、リリース版の署名付き APK の作成に成功しました。
今回は Crashlytics の導入までですが、この後に起きた問題はまた別件として記載していく予定です。