From 0fc9716f068bf6a2724fbb58ebb509e8be2c799b Mon Sep 17 00:00:00 2001 From: Matthias Urhahn Date: Wed, 1 Feb 2023 11:17:50 +0100 Subject: [PATCH 1/2] Only apply Bugsnag to gplay build flavor (#88) * wip * Setup bugsnag only in gplay builds. * Bugsnag does not support uploading mapping files or build information from library modules. This should be done from the application module which produces your APK instead. * Only apply Bugsnag plugin for the right flavors. * Run unit tests in debug, otherwise we run issues requiring api keys in the env --- app-common/build.gradle.kts | 7 ++++- app-common/src/foss/AndroidManifest.xml | 4 +++ .../debug/autoreport/AutoReportingModule.kt | 17 ++++++++++ .../debug/autoreport/FossAutoReporting.kt | 17 ++++++++++ app-common/src/gplay/AndroidManifest.xml | 10 ++++++ .../debug/autoreport/AutoReportingModule.kt | 16 ++++++++++ .../debug/autoreport}/BugsnagErrorHandler.kt | 4 +-- .../capod/debug/autoreport}/BugsnagLogger.kt | 2 +- .../debug/autoreport/GplayAutoReporting.kt} | 28 ++++++++++++----- .../autoreport}/NOPBugsnagErrorHandler.kt | 2 +- .../capod/common/bluetooth/FakeBleData.kt | 2 +- .../java/eu/darken/capod/common/debug/Bugs.kt | 8 ++--- .../debug/{autoreport => }/DebugSettings.kt | 2 +- .../debug/autoreport/AutomaticBugReporter.kt | 10 ++++++ .../darken/capod/main/core/GeneralSettings.kt | 2 +- .../darken/capod/monitor/core/PodMonitor.kt | 2 +- app-wear/build.gradle.kts | 14 ++++----- app-wear/src/main/AndroidManifest.xml | 4 --- app-wear/src/main/java/eu/darken/capod/App.kt | 11 ++----- .../wear/ui/overview/OverviewFragmentVM.kt | 2 +- app/build.gradle.kts | 14 ++++----- app/src/main/AndroidManifest.xml | 4 --- app/src/main/java/eu/darken/capod/App.kt | 11 ++----- .../main/ui/overview/OverviewFragmentVM.kt | 2 +- .../general/debug/DebugSettingsFragment.kt | 2 +- .../general/debug/DebugSettingsFragmentVM.kt | 2 +- .../reaction/ui/popup/PopUpPodViewFactory.kt | 2 +- buildSrc/src/main/java/ProjectConfig.kt | 31 ++++++++++++++++++- 28 files changed, 164 insertions(+), 68 deletions(-) create mode 100644 app-common/src/foss/AndroidManifest.xml create mode 100644 app-common/src/foss/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt create mode 100644 app-common/src/foss/java/eu/darken/capod/debug/autoreport/FossAutoReporting.kt create mode 100644 app-common/src/gplay/AndroidManifest.xml create mode 100644 app-common/src/gplay/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt rename app-common/src/{main/java/eu/darken/capod/common/debug/autoreport/bugsnag => gplay/java/eu/darken/capod/debug/autoreport}/BugsnagErrorHandler.kt (94%) rename app-common/src/{main/java/eu/darken/capod/common/debug/autoreport/bugsnag => gplay/java/eu/darken/capod/debug/autoreport}/BugsnagLogger.kt (96%) rename app-common/src/{main/java/eu/darken/capod/common/debug/autoreport/AutoReporting.kt => gplay/java/eu/darken/capod/debug/autoreport/GplayAutoReporting.kt} (75%) rename app-common/src/{main/java/eu/darken/capod/common/debug/autoreport/bugsnag => gplay/java/eu/darken/capod/debug/autoreport}/NOPBugsnagErrorHandler.kt (90%) rename app-common/src/main/java/eu/darken/capod/common/debug/{autoreport => }/DebugSettings.kt (96%) create mode 100644 app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutomaticBugReporter.kt diff --git a/app-common/build.gradle.kts b/app-common/build.gradle.kts index 81a32cd5..6a901b09 100644 --- a/app-common/build.gradle.kts +++ b/app-common/build.gradle.kts @@ -21,6 +21,10 @@ android { buildConfigField("String", "APPLICATION_ID", "\"${ProjectConfig.packageName}\"") buildConfigField("String", "GITSHA", "\"${lastCommitHash()}\"") buildConfigField("String", "BUILDTIME", "\"${buildTime()}\"") + + manifestPlaceholders["bugsnagApiKey"] = getBugSnagApiKey( + File(System.getProperty("user.home"), ".appconfig/${ProjectConfig.packageName}/bugsnag.properties") + ) ?: "bugsnag_apikey_placeholder" } buildFeatures { @@ -95,6 +99,7 @@ dependencies { addTesting() - implementation("com.bugsnag:bugsnag-android:5.9.2") + "gplayImplementation"("com.bugsnag:bugsnag-android:5.9.2") + "gplayImplementation"("com.getkeepsafe.relinker:relinker:1.4.3") } \ No newline at end of file diff --git a/app-common/src/foss/AndroidManifest.xml b/app-common/src/foss/AndroidManifest.xml new file mode 100644 index 00000000..44008a43 --- /dev/null +++ b/app-common/src/foss/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app-common/src/foss/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt b/app-common/src/foss/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt new file mode 100644 index 00000000..9d5f695c --- /dev/null +++ b/app-common/src/foss/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt @@ -0,0 +1,17 @@ +package eu.darken.capod.debug.autoreport + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter +import eu.darken.capod.debug.autoreport.FossAutoReporting +import javax.inject.Singleton + +@InstallIn(SingletonComponent::class) +@Module +abstract class AutoReportingModule { + @Binds + @Singleton + abstract fun autoreporting(foss: FossAutoReporting): AutomaticBugReporter +} \ No newline at end of file diff --git a/app-common/src/foss/java/eu/darken/capod/debug/autoreport/FossAutoReporting.kt b/app-common/src/foss/java/eu/darken/capod/debug/autoreport/FossAutoReporting.kt new file mode 100644 index 00000000..fa2387f5 --- /dev/null +++ b/app-common/src/foss/java/eu/darken/capod/debug/autoreport/FossAutoReporting.kt @@ -0,0 +1,17 @@ +package eu.darken.capod.debug.autoreport + +import android.app.Application +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class FossAutoReporting @Inject constructor() : AutomaticBugReporter { + override fun setup(application: Application) { + // NOOP + } + + override fun notify(throwable: Throwable) { + throw IllegalStateException("Who initliazed this? Without setup no calls to here!") + } +} \ No newline at end of file diff --git a/app-common/src/gplay/AndroidManifest.xml b/app-common/src/gplay/AndroidManifest.xml new file mode 100644 index 00000000..c3f9dea0 --- /dev/null +++ b/app-common/src/gplay/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt new file mode 100644 index 00000000..772715e1 --- /dev/null +++ b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/AutoReportingModule.kt @@ -0,0 +1,16 @@ +package eu.darken.capod.debug.autoreport + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter +import javax.inject.Singleton + +@InstallIn(SingletonComponent::class) +@Module +abstract class AutoReportingModule { + @Binds + @Singleton + abstract fun autoreporting(foss: GplayAutoReporting): AutomaticBugReporter +} \ No newline at end of file diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/BugsnagErrorHandler.kt b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/BugsnagErrorHandler.kt similarity index 94% rename from app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/BugsnagErrorHandler.kt rename to app-common/src/gplay/java/eu/darken/capod/debug/autoreport/BugsnagErrorHandler.kt index 8c803728..82bf717a 100644 --- a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/BugsnagErrorHandler.kt +++ b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/BugsnagErrorHandler.kt @@ -1,4 +1,4 @@ -package eu.darken.capod.common.debug.autoreport.bugsnag +package eu.darken.capod.debug.autoreport import android.annotation.SuppressLint import android.content.Context @@ -7,7 +7,7 @@ import com.bugsnag.android.Event import com.bugsnag.android.OnErrorCallback import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.common.BuildConfigWrap -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.debug.logging.Logging.Priority.WARN import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/BugsnagLogger.kt b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/BugsnagLogger.kt similarity index 96% rename from app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/BugsnagLogger.kt rename to app-common/src/gplay/java/eu/darken/capod/debug/autoreport/BugsnagLogger.kt index d80b70cf..3577a1bc 100644 --- a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/BugsnagLogger.kt +++ b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/BugsnagLogger.kt @@ -1,4 +1,4 @@ -package eu.darken.capod.common.debug.autoreport.bugsnag +package eu.darken.capod.debug.autoreport import com.bugsnag.android.Event import eu.darken.capod.common.debug.logging.Logging diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutoReporting.kt b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/GplayAutoReporting.kt similarity index 75% rename from app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutoReporting.kt rename to app-common/src/gplay/java/eu/darken/capod/debug/autoreport/GplayAutoReporting.kt index 4238b1e8..f9026225 100644 --- a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutoReporting.kt +++ b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/GplayAutoReporting.kt @@ -1,15 +1,16 @@ -package eu.darken.capod.common.debug.autoreport +package eu.darken.capod.debug.autoreport +import android.app.Application import android.content.Context import com.bugsnag.android.Bugsnag import com.bugsnag.android.Configuration +import com.getkeepsafe.relinker.ReLinker import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.common.BuildConfigWrap import eu.darken.capod.common.InstallId import eu.darken.capod.common.debug.Bugs -import eu.darken.capod.common.debug.autoreport.bugsnag.BugsnagErrorHandler -import eu.darken.capod.common.debug.autoreport.bugsnag.BugsnagLogger -import eu.darken.capod.common.debug.autoreport.bugsnag.NOPBugsnagErrorHandler +import eu.darken.capod.common.debug.DebugSettings +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter import eu.darken.capod.common.debug.logging.Logging import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag @@ -18,19 +19,25 @@ import javax.inject.Provider import javax.inject.Singleton @Singleton -class AutoReporting @Inject constructor( +class GplayAutoReporting @Inject constructor( @ApplicationContext private val context: Context, private val debugSettings: DebugSettings, private val installId: InstallId, private val bugsnagLogger: Provider, private val bugsnagErrorHandler: Provider, private val nopBugsnagErrorHandler: Provider, -) { +) : AutomaticBugReporter { - fun setup() { + override fun setup(application: Application) { val isEnabled = debugSettings.isAutoReportingEnabled.value log(TAG) { "setup(): isEnabled=$isEnabled" } + if (!isEnabled) return + + ReLinker + .log { message -> log(TAG) { "ReLinker: $message" } } + .loadLibrary(application, "bugsnag-plugin-android-anr") + try { val bugsnagConfig = Configuration.load(context).apply { if (debugSettings.isAutoReportingEnabled.value) { @@ -48,13 +55,18 @@ class AutoReporting @Inject constructor( } Bugsnag.start(context, bugsnagConfig) - Bugs.ready = true + Bugs.reporter = this } catch (e: IllegalStateException) { log(TAG) { "Bugsnag API Key not configured." } } } + override fun notify(throwable: Throwable) { + Bugsnag.notify(throwable) + } + companion object { private val TAG = logTag("Debug", "AutoReport") } + } \ No newline at end of file diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/NOPBugsnagErrorHandler.kt b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/NOPBugsnagErrorHandler.kt similarity index 90% rename from app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/NOPBugsnagErrorHandler.kt rename to app-common/src/gplay/java/eu/darken/capod/debug/autoreport/NOPBugsnagErrorHandler.kt index fa10e669..cec7bca2 100644 --- a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/bugsnag/NOPBugsnagErrorHandler.kt +++ b/app-common/src/gplay/java/eu/darken/capod/debug/autoreport/NOPBugsnagErrorHandler.kt @@ -1,4 +1,4 @@ -package eu.darken.capod.common.debug.autoreport.bugsnag +package eu.darken.capod.debug.autoreport import com.bugsnag.android.Event import com.bugsnag.android.OnErrorCallback diff --git a/app-common/src/main/java/eu/darken/capod/common/bluetooth/FakeBleData.kt b/app-common/src/main/java/eu/darken/capod/common/bluetooth/FakeBleData.kt index 00eef122..c9b8b704 100644 --- a/app-common/src/main/java/eu/darken/capod/common/bluetooth/FakeBleData.kt +++ b/app-common/src/main/java/eu/darken/capod/common/bluetooth/FakeBleData.kt @@ -2,7 +2,7 @@ package eu.darken.capod.common.bluetooth import dagger.Reusable import eu.darken.capod.common.SystemClockWrap -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import java.time.Instant import javax.inject.Inject import kotlin.random.Random diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/Bugs.kt b/app-common/src/main/java/eu/darken/capod/common/debug/Bugs.kt index 618036aa..343c66a1 100644 --- a/app-common/src/main/java/eu/darken/capod/common/debug/Bugs.kt +++ b/app-common/src/main/java/eu/darken/capod/common/debug/Bugs.kt @@ -1,13 +1,13 @@ package eu.darken.capod.common.debug -import com.bugsnag.android.Bugsnag +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter import eu.darken.capod.common.debug.logging.Logging.Priority.* import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag object Bugs { - var ready = false + var reporter: AutomaticBugReporter? = null fun report( tag: String, message: String, @@ -16,11 +16,9 @@ object Bugs { log(TAG, VERBOSE) { "Reporting $exception" } log(tag, ERROR) { "$message\n${exception.asLog()}" } - if (!ready) { + reporter?.notify(exception) ?: run { log(TAG, WARN) { "Bug tracking not initialized yet." } - return } - Bugsnag.notify(exception) } private val TAG = logTag("Bugs") diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/DebugSettings.kt b/app-common/src/main/java/eu/darken/capod/common/debug/DebugSettings.kt similarity index 96% rename from app-common/src/main/java/eu/darken/capod/common/debug/autoreport/DebugSettings.kt rename to app-common/src/main/java/eu/darken/capod/common/debug/DebugSettings.kt index 9e6735d3..33f822bb 100644 --- a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/DebugSettings.kt +++ b/app-common/src/main/java/eu/darken/capod/common/debug/DebugSettings.kt @@ -1,4 +1,4 @@ -package eu.darken.capod.common.debug.autoreport +package eu.darken.capod.common.debug import android.content.Context import android.content.SharedPreferences diff --git a/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutomaticBugReporter.kt b/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutomaticBugReporter.kt new file mode 100644 index 00000000..c0da4259 --- /dev/null +++ b/app-common/src/main/java/eu/darken/capod/common/debug/autoreport/AutomaticBugReporter.kt @@ -0,0 +1,10 @@ +package eu.darken.capod.common.debug.autoreport + +import android.app.Application + +interface AutomaticBugReporter { + + fun setup(application: Application) + + fun notify(throwable: Throwable) +} \ No newline at end of file diff --git a/app-common/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt b/app-common/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt index 65fb36c2..84b5dde6 100644 --- a/app-common/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt +++ b/app-common/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt @@ -6,7 +6,7 @@ import androidx.preference.PreferenceDataStore import com.squareup.moshi.Moshi import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.common.bluetooth.ScannerMode -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.preferences.PreferenceStoreMapper import eu.darken.capod.common.preferences.Settings import eu.darken.capod.common.preferences.createFlowPreference diff --git a/app-common/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt b/app-common/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt index 0dcf32d6..e8be00dd 100644 --- a/app-common/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt +++ b/app-common/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt @@ -6,7 +6,7 @@ import eu.darken.capod.common.bluetooth.BleScanner import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.bluetooth.ScannerMode import eu.darken.capod.common.coroutine.AppScope -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.Logging.Priority.WARN import eu.darken.capod.common.debug.logging.asLog diff --git a/app-wear/build.gradle.kts b/app-wear/build.gradle.kts index 68f07f6d..d8bef482 100644 --- a/app-wear/build.gradle.kts +++ b/app-wear/build.gradle.kts @@ -6,7 +6,6 @@ plugins { } apply(plugin = "dagger.hilt.android.plugin") apply(plugin = "androidx.navigation.safeargs.kotlin") -apply(plugin = "com.bugsnag.android.gradle") android { compileSdk = ProjectConfig.compileSdk @@ -24,10 +23,6 @@ android { buildConfigField("String", "GITSHA", "\"${lastCommitHash()}\"") buildConfigField("String", "BUILDTIME", "\"${buildTime()}\"") - - manifestPlaceholders["bugsnagApiKey"] = getBugSnagApiKey( - File(System.getProperty("user.home"), ".appconfig/${ProjectConfig.packageName}/bugsnag.properties") - ) ?: "fake" } signingConfigs { @@ -49,9 +44,12 @@ android { create("gplay") { dimension = "version" signingConfig = signingConfigs["releaseGplay"] + extra["useBugsnag"] = true } } + setupBugsnagPlugin() + buildTypes { val customProguardRules = fileTree(File("../proguard")) { include("*.pro") @@ -138,9 +136,9 @@ dependencies { addTesting() - implementation("com.bugsnag:bugsnag-android:5.9.2") - implementation("com.getkeepsafe.relinker:relinker:1.4.3") - implementation("androidx.wear:wear:1.2.0") implementation("androidx.wear.tiles:tiles-material:1.1.0") + + "gplayImplementation"("com.bugsnag:bugsnag-android:5.9.2") + "gplayImplementation"("com.getkeepsafe.relinker:relinker:1.4.3") } \ No newline at end of file diff --git a/app-wear/src/main/AndroidManifest.xml b/app-wear/src/main/AndroidManifest.xml index 5e71dbb5..9d8cd239 100644 --- a/app-wear/src/main/AndroidManifest.xml +++ b/app-wear/src/main/AndroidManifest.xml @@ -39,10 +39,6 @@ android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" /> - - \ No newline at end of file diff --git a/app-wear/src/main/java/eu/darken/capod/App.kt b/app-wear/src/main/java/eu/darken/capod/App.kt index ba4300e6..da1ab41d 100644 --- a/app-wear/src/main/java/eu/darken/capod/App.kt +++ b/app-wear/src/main/java/eu/darken/capod/App.kt @@ -3,11 +3,10 @@ package eu.darken.capod import android.app.Application import androidx.hilt.work.HiltWorkerFactory import androidx.work.* -import com.getkeepsafe.relinker.ReLinker import dagger.hilt.android.HiltAndroidApp import eu.darken.capod.common.BuildConfigWrap import eu.darken.capod.common.coroutine.AppScope -import eu.darken.capod.common.debug.autoreport.AutoReporting +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter import eu.darken.capod.common.debug.logging.* import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.main.core.GeneralSettings @@ -20,7 +19,7 @@ import javax.inject.Inject open class App : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory - @Inject lateinit var autoReporting: AutoReporting + @Inject lateinit var autoReporting: AutomaticBugReporter @Inject lateinit var generalSettings: GeneralSettings @Inject lateinit var workManager: WorkManager @Inject @AppScope lateinit var appScope: CoroutineScope @@ -29,11 +28,7 @@ open class App : Application(), Configuration.Provider { super.onCreate() if (BuildConfig.DEBUG) Logging.install(LogCatLogger()) - ReLinker - .log { message -> log(TAG) { "ReLinker: $message" } } - .loadLibrary(this, "bugsnag-plugin-android-anr") - - autoReporting.setup() + autoReporting.setup(this) setupWorker() diff --git a/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt b/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt index 9b9c8ac3..a6a7577e 100644 --- a/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt +++ b/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.SavedStateHandle import dagger.hilt.android.lifecycle.HiltViewModel import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.coroutine.DispatcherProvider -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.flow.combine diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a1997f6f..0b86cc0f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,7 +6,6 @@ plugins { } apply(plugin = "dagger.hilt.android.plugin") apply(plugin = "androidx.navigation.safeargs.kotlin") -apply(plugin = "com.bugsnag.android.gradle") android { @@ -22,10 +21,6 @@ android { versionName = ProjectConfig.Version.name testInstrumentationRunner = "eu.darken.capod.HiltTestRunner" - - manifestPlaceholders["bugsnagApiKey"] = getBugSnagApiKey( - File(System.getProperty("user.home"), ".appconfig/${ProjectConfig.packageName}/bugsnag.properties") - ) ?: "fake" } signingConfigs { @@ -47,9 +42,12 @@ android { create("gplay") { dimension = "version" signingConfig = signingConfigs["releaseGplay"] + extra["useBugsnag"] = true } } + setupBugsnagPlugin() + buildTypes { val customProguardRules = fileTree(File(projectDir, "proguard")) { include("*.pro") @@ -148,8 +146,8 @@ dependencies { addTesting() - implementation("com.bugsnag:bugsnag-android:5.9.2") - implementation("com.getkeepsafe.relinker:relinker:1.4.3") - "gplayImplementation"("com.android.billingclient:billing:4.0.0") + + "gplayImplementation"("com.bugsnag:bugsnag-android:5.9.2") + "gplayImplementation"("com.getkeepsafe.relinker:relinker:1.4.3") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed49b121..52fa8a7a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,10 +86,6 @@ android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" /> - - \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/App.kt b/app/src/main/java/eu/darken/capod/App.kt index 2217d66a..ca5ff277 100644 --- a/app/src/main/java/eu/darken/capod/App.kt +++ b/app/src/main/java/eu/darken/capod/App.kt @@ -3,10 +3,9 @@ package eu.darken.capod import android.app.Application import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration -import com.getkeepsafe.relinker.ReLinker import dagger.hilt.android.HiltAndroidApp import eu.darken.capod.common.coroutine.AppScope -import eu.darken.capod.common.debug.autoreport.AutoReporting +import eu.darken.capod.common.debug.autoreport.AutomaticBugReporter import eu.darken.capod.common.debug.logging.* import eu.darken.capod.common.flow.throttleLatest import eu.darken.capod.common.upgrade.UpgradeRepo @@ -25,7 +24,7 @@ import javax.inject.Inject open class App : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory - @Inject lateinit var autoReporting: AutoReporting + @Inject lateinit var autoReporting: AutomaticBugReporter @Inject lateinit var monitorControl: MonitorControl @Inject lateinit var podMonitor: PodMonitor @Inject lateinit var widgetManager: WidgetManager @@ -36,11 +35,7 @@ open class App : Application(), Configuration.Provider { super.onCreate() if (BuildConfig.DEBUG) Logging.install(LogCatLogger()) - ReLinker - .log { message -> log(TAG) { "ReLinker: $message" } } - .loadLibrary(this, "bugsnag-plugin-android-anr") - - autoReporting.setup() + autoReporting.setup(this) log(TAG) { "onCreate() done! ${Exception().asLog()}" } diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt index 77ffc54d..10c65aaa 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.SavedStateHandle import dagger.hilt.android.lifecycle.HiltViewModel import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.coroutine.DispatcherProvider -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.flow.combine import eu.darken.capod.common.flow.throttleLatest diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragment.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragment.kt index f37d013b..2e28a0b8 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragment.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragment.kt @@ -7,7 +7,7 @@ import androidx.fragment.app.viewModels import androidx.preference.Preference import dagger.hilt.android.AndroidEntryPoint import eu.darken.capod.R -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.observe2 import eu.darken.capod.common.uix.PreferenceFragment3 import javax.inject.Inject diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragmentVM.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragmentVM.kt index b2b77010..9588287c 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragmentVM.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/debug/DebugSettingsFragmentVM.kt @@ -3,7 +3,7 @@ package eu.darken.capod.main.ui.settings.general.debug import androidx.lifecycle.SavedStateHandle import dagger.hilt.android.lifecycle.HiltViewModel import eu.darken.capod.common.coroutine.DispatcherProvider -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.debug.recording.core.RecorderModule diff --git a/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpPodViewFactory.kt b/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpPodViewFactory.kt index 034471b4..53805d0c 100644 --- a/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpPodViewFactory.kt +++ b/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpPodViewFactory.kt @@ -8,7 +8,7 @@ import androidx.appcompat.view.ContextThemeWrapper import androidx.core.view.isInvisible import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.R -import eu.darken.capod.common.debug.autoreport.DebugSettings +import eu.darken.capod.common.debug.DebugSettings import eu.darken.capod.databinding.PopupNotificationDualPodsBinding import eu.darken.capod.databinding.PopupNotificationSinglePodsBinding import eu.darken.capod.pods.core.* diff --git a/buildSrc/src/main/java/ProjectConfig.kt b/buildSrc/src/main/java/ProjectConfig.kt index 86e440f7..2cd90409 100644 --- a/buildSrc/src/main/java/ProjectConfig.kt +++ b/buildSrc/src/main/java/ProjectConfig.kt @@ -1,6 +1,9 @@ import com.android.build.gradle.LibraryExtension import org.gradle.api.Action import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.extra import java.io.File import java.io.FileInputStream import java.time.Instant @@ -122,4 +125,30 @@ fun getBugSnagApiKey( } return System.getenv("BUGSNAG_API_KEY") ?: bugsnagProps.getProperty("bugsnag.apikey") -} \ No newline at end of file +} + +/** + * Use extra["useBugsnag"] = true per flavor to enable + */ +fun T.setupBugsnagPlugin() where T : Project { + fun Project.`android`(configure: Action): Unit = + (this as org.gradle.api.plugins.ExtensionAware).extensions.configure("android", configure) + + val key = "useBugsnag" + + android { + productFlavors { + forEach { + val paramString = gradle.startParameter.taskRequests.toString().toLowerCase(Locale.ROOT) + val useBugsnag = if (it.extra.has(key)) it.extra[key] as Boolean else false + + if (paramString.contains(it.name) && useBugsnag) { + println("Bugsnag plugin (com.bugsnag.android.gradle) applied to ${it.name} ($paramString)") + apply(plugin = "com.bugsnag.android.gradle") + } else { + println("Bugsnag plugin (com.bugsnag.android.gradle) NOT applied to ${it.name} ($paramString)") + } + } + } + } +} From 5f00f10ae803eceef74cbaedf8624699741f7f2c Mon Sep 17 00:00:00 2001 From: Matthias Urhahn Date: Thu, 2 Feb 2023 08:38:22 +0100 Subject: [PATCH 2/2] Remove short hash from generated apk file names (#89) --- app-wear/build.gradle.kts | 2 +- app/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-wear/build.gradle.kts b/app-wear/build.gradle.kts index d8bef482..40996fe4 100644 --- a/app-wear/build.gradle.kts +++ b/app-wear/build.gradle.kts @@ -90,7 +90,7 @@ android { if (listOf("release", "beta").any { variantName.toLowerCase().contains(it) }) { val outputFileName = ProjectConfig.packageName + "-WEAROS" + "-v${defaultConfig.versionName}-${defaultConfig.versionCode}" + - "-${variantName.toUpperCase()}-${lastCommitHash()}.apk" + "-${variantName.toUpperCase()}.apk" variantOutputImpl.outputFileName = outputFileName } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0b86cc0f..b510b7d2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -88,7 +88,7 @@ android { if (listOf("release", "beta").any { variantName.toLowerCase().contains(it) }) { val outputFileName = ProjectConfig.packageName + "-v${defaultConfig.versionName}-${defaultConfig.versionCode}" + - "-${variantName.toUpperCase()}-${lastCommitHash()}.apk" + "-${variantName.toUpperCase()}.apk" variantOutputImpl.outputFileName = outputFileName }