Android アプリで Crashlytics を使ってクラッシュログを確認していたのですが、ある時から Crashlyitcs のコンソールに表示されるログが難読化されたままになってしまいました。
原因を調査したところ、Play Publisher Gradle Plugin という Gradle Plugin が原因だったのでそれについて共有したいと思います。
問題点
Android アプリの開発において Play Publisher Gradle Plugin を使うと、Gradle のタスクで Google Play Console へ APK や App Bundle をアップロードできるようになります。
Issue にもあるのですが、どうやらバージョン3.0 Crashlytics に mapping.txt がアップロードされない不具合があったようです。
(正確には、Crashlytics に mapping.txt をアップロードする Gradle タスクが実行されていない不具合)
こちらの不具合はバージョン3.1.0で修正されたようですが、私が確認している限りでは3.1.0と現在(2021/02/18 時点)の最新のバージョンである3.2.0ではまだ Crashltyics に mapping.txt はアップロードされませんでした。
対処方法
重要なのは Crashlytics へ mapping.txt をアップロードする Gradle タスクが実行されるかどうかです。
このタスクは uploadCrashlyticsMappingFileXXX
というタスク名になっています。
(XXX
にはビルドバリアントの名前が入ります)
Google Play Console へアプリをアップロードする Gradle タスクを実行したら、この名前のタスクが実行されているか確認した方がよいかと思います。
方法その1
Issue にも記載がありますが、簡単な方法としては APK or App Bundle をアップロードする前に一度ビルドする処理を実行することです。
- APK の場合
./gradlew assembleRelease publishRelease
- App Bundle の場合
./gradlew bundleRelease publishRelease
方法その2
もしくは少し冗長かもしれませんが app/build.gradle
に以下のような設定をして、Google Play Console へアプリをアップロードする Gradle タスクを実行する前に Crashlytics へ mapping.txt をアップロードするタスクを実行させることもできます。
(以下のコードは Android Gradle Plugin 4.1系に対応しています)
play {
...
}
android.onVariants { variant ->
def variantName = variant.name.capitalize()
afterEvaluate {
tasks.all {
switch (it.name) {
case "publish${variantName}Bundle":
it.dependsOn "uploadCrashlyticsMappingFile${variantName}"
break
}
}
}
}