Fix crashlytics while using custom global exception handler (#338)

* Add crashlytics to standard builds

(cherry picked from commit 3c611b95fb79e5ac972019b76c7b24f46a3087fd)

* Testing crashlytics

* working

* cleanup

* Revert "Auxiliary commit to revert individual files from 84232c7fe229bf557680a787fa02c055ca18dc66"

This reverts commit 2c9b6277b276f108a25e90e6be9a227440136063.

* Revert "Auxiliary commit to revert individual files from cf3f5fe1586f40fabf5b75a649ab332282608a08"

This reverts commit 708f6b1d3803374b0440d163560a682f0cfc618e.

* Only send crashlytics on Standard & Release/Preview build

---------

Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
This commit is contained in:
Cuong-Tran 2024-09-05 15:29:28 +07:00 committed by GitHub
parent 6d4a7f02de
commit ffd5b4ebc1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 27 additions and 27 deletions

View file

@ -16,9 +16,10 @@ plugins {
} }
if (gradle.startParameter.taskRequests.toString().contains("Standard")) { if (gradle.startParameter.taskRequests.toString().contains("Standard")) {
pluginManager.apply(libs.plugins.google.services.get().pluginId) pluginManager.apply {
// Firebase Crashlytics apply(libs.plugins.google.services.get().pluginId)
apply(plugin = "com.google.firebase.crashlytics") apply(libs.plugins.firebase.crashlytics.get().pluginId)
}
} }
// shortcutHelper.setFilePath("./shortcuts.xml") // shortcutHelper.setFilePath("./shortcuts.xml")
@ -286,7 +287,9 @@ dependencies {
implementation(libs.logcat) implementation(libs.logcat)
// Crash reports/analytics // Crash reports/analytics
// "standardImplementation"(libs.firebase.analytics) implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
// Shizuku // Shizuku
implementation(libs.bundles.shizuku) implementation(libs.bundles.shizuku)
@ -304,10 +307,6 @@ dependencies {
// Text distance (EH) // Text distance (EH)
implementation(sylibs.simularity) implementation(sylibs.simularity)
// Firebase (EH)
implementation(sylibs.firebase.analytics)
implementation(sylibs.firebase.crashlytics.ktx)
// Better logging (EH) // Better logging (EH)
implementation(sylibs.xlog) implementation(sylibs.xlog)

View file

@ -167,6 +167,8 @@
-keepattributes SourceFile,LineNumberTable -keepattributes SourceFile,LineNumberTable
-keep class com.crashlytics.** { *; } -keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.** -dontwarn com.crashlytics.**
-keep class com.google.firebase.crashlytics.** { *; }
-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
# === Humanize + Guava: https://github.com/google/guava/wiki/UsingProGuardWithGuava # === Humanize + Guava: https://github.com/google/guava/wiki/UsingProGuardWithGuava
-dontwarn javax.lang.model.element.Modifier -dontwarn javax.lang.model.element.Modifier

View file

@ -28,9 +28,8 @@ import com.elvishew.xlog.printer.AndroidPrinter
import com.elvishew.xlog.printer.Printer import com.elvishew.xlog.printer.Printer
import com.elvishew.xlog.printer.file.backup.NeverBackupStrategy import com.elvishew.xlog.printer.file.backup.NeverBackupStrategy
import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator
import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.Firebase
import com.google.firebase.ktx.Firebase import com.google.firebase.crashlytics.crashlytics
import com.google.firebase.ktx.initialize
import eu.kanade.domain.DomainModule import eu.kanade.domain.DomainModule
import eu.kanade.domain.SYDomainModule import eu.kanade.domain.SYDomainModule
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
@ -102,7 +101,6 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
override fun onCreate() { override fun onCreate() {
super<Application>.onCreate() super<Application>.onCreate()
// KMK --> // KMK -->
Firebase.initialize(this)
if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree()) if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
// KMK <-- // KMK <--

View file

@ -2,8 +2,6 @@ package eu.kanade.tachiyomi.crash
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.ktx.Firebase
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
@ -35,8 +33,11 @@ class GlobalExceptionHandler private constructor(
override fun uncaughtException(thread: Thread, exception: Throwable) { override fun uncaughtException(thread: Thread, exception: Throwable) {
try { try {
logcat(priority = LogPriority.ERROR, throwable = exception) logcat(priority = LogPriority.ERROR, throwable = exception)
Firebase.crashlytics.recordException(exception)
launchActivity(applicationContext, activityToBeLaunched, exception) launchActivity(applicationContext, activityToBeLaunched, exception)
// KMK -->
// Pass the exception to Crashlytics
defaultHandler.uncaughtException(thread, exception)
// KMK <--
exitProcess(0) exitProcess(0)
} catch (_: Exception) { } catch (_: Exception) {
defaultHandler.uncaughtException(thread, exception) defaultHandler.uncaughtException(thread, exception)

View file

@ -47,8 +47,8 @@ import cafe.adriel.voyager.navigator.Navigator
import cafe.adriel.voyager.navigator.NavigatorDisposeBehavior import cafe.adriel.voyager.navigator.NavigatorDisposeBehavior
import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.currentOrThrow
import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.google.firebase.analytics.ktx.analytics import com.google.firebase.Firebase
import com.google.firebase.ktx.Firebase import com.google.firebase.analytics.analytics
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.sync.SyncPreferences import eu.kanade.domain.sync.SyncPreferences
import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.AppStateBanners

View file

@ -1,8 +1,8 @@
package exh.log package exh.log
import com.elvishew.xlog.printer.Printer import com.elvishew.xlog.printer.Printer
import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.Firebase
import com.google.firebase.ktx.Firebase import com.google.firebase.crashlytics.crashlytics
import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.BuildConfig
class CrashlyticsPrinter(private val logLevel: Int) : Printer { class CrashlyticsPrinter(private val logLevel: Int) : Printer {

View file

@ -1,14 +1,14 @@
buildscript { buildscript {
dependencies { dependencies {
// classpath(libs.android.shortcut.gradle) // classpath(libs.android.shortcut.gradle)
classpath(sylibs.firebase.crashlytics.gradle) classpath(sylibs.gradleversionsx)
classpath(sylibs.versionsx)
} }
} }
plugins { plugins {
alias(kotlinx.plugins.serialization) apply false alias(kotlinx.plugins.serialization) apply false
alias(libs.plugins.aboutLibraries) apply false alias(libs.plugins.aboutLibraries) apply false
alias(libs.plugins.firebase.crashlytics) apply false
alias(libs.plugins.google.services) apply false alias(libs.plugins.google.services) apply false
alias(libs.plugins.moko) apply false alias(libs.plugins.moko) apply false
alias(libs.plugins.sqldelight) apply false alias(libs.plugins.sqldelight) apply false

View file

@ -10,6 +10,7 @@ sqlite = "2.4.0"
voyager = "1.0.0" voyager = "1.0.0"
spotless = "6.25.0" spotless = "6.25.0"
ktlint-core = "1.3.1" ktlint-core = "1.3.1"
firebase-bom = "33.2.0"
[libraries] [libraries]
desugar = "com.android.tools:desugar_jdk_libs:2.1.2" desugar = "com.android.tools:desugar_jdk_libs:2.1.2"
@ -75,7 +76,9 @@ moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" }
timber = "com.jakewharton.timber:timber:5.0.1" timber = "com.jakewharton.timber:timber:5.0.1"
logcat = "com.squareup.logcat:logcat:0.1" logcat = "com.squareup.logcat:logcat:0.1"
firebase-analytics = "com.google.firebase:firebase-analytics:22.1.0" firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics" }
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" }
aboutLibraries-compose = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlib_version" } aboutLibraries-compose = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlib_version" }
@ -107,6 +110,7 @@ google-services = { id = "com.google.gms.google-services", version = "4.4.2" }
aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlib_version" } aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlib_version" }
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
moko = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" } moko = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" }
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.2" }
[bundles] [bundles]
okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"]

View file

@ -1,17 +1,13 @@
[versions] [versions]
[libraries] [libraries]
firebase-analytics = "com.google.firebase:firebase-analytics:22.1.0"
firebase-crashlytics-ktx = "com.google.firebase:firebase-crashlytics:19.0.3"
firebase-crashlytics-gradle = "com.google.firebase:firebase-crashlytics-gradle:3.0.2"
simularity = "info.debatty:java-string-similarity:2.0.0" simularity = "info.debatty:java-string-similarity:2.0.0"
xlog = "com.elvishew:xlog:1.11.1" xlog = "com.elvishew:xlog:1.11.1"
ratingbar = "me.zhanghai.android.materialratingbar:library:1.4.0" ratingbar = "me.zhanghai.android.materialratingbar:library:1.4.0"
composeRatingbar = "com.github.a914-gowtham:compose-ratingbar:1.3.12" composeRatingbar = "com.github.a914-gowtham:compose-ratingbar:1.3.12"
versionsx = "com.github.ben-manes:gradle-versions-plugin:0.51.0" gradleversionsx = "com.github.ben-manes:gradle-versions-plugin:0.51.0"
sqlcipher = "net.zetetic:sqlcipher-android:4.6.1" sqlcipher = "net.zetetic:sqlcipher-android:4.6.1"