Issue #267: Integrate lib-crash component and upload crash reports to sentry and socorro.
parent
e7ebd712c6
commit
d5515c9f6e
|
@ -45,6 +45,10 @@ android {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lintOptions {
|
||||||
|
lintConfig file("lint.xml")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
android.applicationVariants.all { variant ->
|
android.applicationVariants.all { variant ->
|
||||||
|
@ -93,6 +97,8 @@ dependencies {
|
||||||
implementation Deps.anko_appcompat
|
implementation Deps.anko_appcompat
|
||||||
implementation Deps.anko_constraintlayout
|
implementation Deps.anko_constraintlayout
|
||||||
|
|
||||||
|
implementation Deps.sentry
|
||||||
|
|
||||||
implementation Deps.mozilla_concept_engine
|
implementation Deps.mozilla_concept_engine
|
||||||
implementation Deps.mozilla_concept_storage
|
implementation Deps.mozilla_concept_storage
|
||||||
implementation Deps.mozilla_concept_toolbar
|
implementation Deps.mozilla_concept_toolbar
|
||||||
|
@ -110,8 +116,11 @@ dependencies {
|
||||||
implementation Deps.mozilla_feature_session
|
implementation Deps.mozilla_feature_session
|
||||||
implementation Deps.mozilla_feature_toolbar
|
implementation Deps.mozilla_feature_toolbar
|
||||||
implementation Deps.mozilla_feature_tabs
|
implementation Deps.mozilla_feature_tabs
|
||||||
|
|
||||||
implementation Deps.mozilla_support_ktx
|
implementation Deps.mozilla_support_ktx
|
||||||
|
|
||||||
|
implementation Deps.mozilla_lib_crash
|
||||||
|
|
||||||
testImplementation Deps.junit
|
testImplementation Deps.junit
|
||||||
androidTestImplementation Deps.tools_test_runner
|
androidTestImplementation Deps.tools_test_runner
|
||||||
androidTestImplementation Deps.tools_espresso_core
|
androidTestImplementation Deps.tools_espresso_core
|
||||||
|
@ -121,3 +130,21 @@ dependencies {
|
||||||
implementation Deps.androidx_legacy
|
implementation Deps.androidx_legacy
|
||||||
implementation Deps.android_arch_navigation
|
implementation Deps.android_arch_navigation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
android.applicationVariants.all { variant ->
|
||||||
|
// Reading sentry token from local file (if it exists). In a release task on taskcluster it will be available.
|
||||||
|
try {
|
||||||
|
def token = new File("${rootDir}/.sentry_token").text.trim()
|
||||||
|
buildConfigField 'String', 'SENTRY_TOKEN', '"' + token + '"'
|
||||||
|
} catch (FileNotFoundException ignored) {
|
||||||
|
buildConfigField 'String', 'SENTRY_TOKEN', 'null'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activating crash reporting only if command line parameter was provided (in automation)
|
||||||
|
if (project.hasProperty("crashReports") && project.property("crashReports") == "true") {
|
||||||
|
buildConfigField 'boolean', 'CRASH_REPORTING', 'true'
|
||||||
|
} else {
|
||||||
|
buildConfigField 'boolean', 'CRASH_REPORTING', 'false'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||||
|
<lint>
|
||||||
|
<issue id="InvalidPackage">
|
||||||
|
<!-- The Sentry SDK is compiled against parts of the Java SDK that are not available in the Android SDK.
|
||||||
|
Let's just ignore issues in the Sentry code since that is a third-party dependency anyways. -->
|
||||||
|
<ignore path="**/sentry*.jar" />
|
||||||
|
</issue>
|
||||||
|
</lint>
|
||||||
|
|
|
@ -9,4 +9,24 @@ import org.mozilla.fenix.components.Components
|
||||||
|
|
||||||
class FenixApplication : Application() {
|
class FenixApplication : Application() {
|
||||||
val components by lazy { Components(this) }
|
val components by lazy { Components(this) }
|
||||||
|
|
||||||
|
override fun onCreate() {
|
||||||
|
super.onCreate()
|
||||||
|
|
||||||
|
setupCrashReporting()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupCrashReporting() {
|
||||||
|
@Suppress("ConstantConditionIf")
|
||||||
|
if (!BuildConfig.CRASH_REPORTING || BuildConfig.BUILD_TYPE != "release") {
|
||||||
|
// Only enable crash reporting if this is a release build and if crash reporting was explicitly enabled
|
||||||
|
// via a Gradle command line flag.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
components
|
||||||
|
.analytics
|
||||||
|
.crashReporter
|
||||||
|
.install(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package org.mozilla.fenix.components
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import mozilla.components.lib.crash.CrashReporter
|
||||||
|
import mozilla.components.lib.crash.service.MozillaSocorroService
|
||||||
|
import mozilla.components.lib.crash.service.SentryService
|
||||||
|
import org.mozilla.fenix.BuildConfig
|
||||||
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID
|
||||||
|
import org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component group for all functionality related to analytics e.g. crash reporting and telemetry.
|
||||||
|
*/
|
||||||
|
class Analytics(
|
||||||
|
private val context: Context
|
||||||
|
) {
|
||||||
|
val crashReporter: CrashReporter by lazy {
|
||||||
|
val sentryService = SentryService(
|
||||||
|
context,
|
||||||
|
BuildConfig.SENTRY_TOKEN,
|
||||||
|
tags = mapOf("geckoview" to "$MOZ_APP_VERSION-$MOZ_APP_BUILDID"),
|
||||||
|
sendEventForNativeCrashes = true
|
||||||
|
)
|
||||||
|
|
||||||
|
val socorroService = MozillaSocorroService(context, "Fenix")
|
||||||
|
|
||||||
|
CrashReporter(
|
||||||
|
services = listOf(sentryService, socorroService),
|
||||||
|
shouldPrompt = CrashReporter.Prompt.ALWAYS,
|
||||||
|
promptConfiguration = CrashReporter.PromptConfiguration(
|
||||||
|
appName = context.getString(R.string.app_name),
|
||||||
|
organizationName = "Mozilla"
|
||||||
|
),
|
||||||
|
enabled = true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,4 +22,5 @@ class Components(private val context: Context) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val utils by lazy { Utilities(context, core.sessionManager, useCases.sessionUseCases, useCases.searchUseCases) }
|
val utils by lazy { Utilities(context, core.sessionManager, useCases.sessionUseCases, useCases.searchUseCases) }
|
||||||
}
|
val analytics by lazy { Analytics(context) }
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,9 @@ import mozilla.components.concept.engine.DefaultSettings
|
||||||
import mozilla.components.concept.engine.Engine
|
import mozilla.components.concept.engine.Engine
|
||||||
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
|
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
|
||||||
import mozilla.components.feature.session.HistoryDelegate
|
import mozilla.components.feature.session.HistoryDelegate
|
||||||
|
import mozilla.components.lib.crash.handler.CrashHandlerService
|
||||||
|
import org.mozilla.geckoview.GeckoRuntime
|
||||||
|
import org.mozilla.geckoview.GeckoRuntimeSettings
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +39,14 @@ class Core(private val context: Context) {
|
||||||
trackingProtectionPolicy = createTrackingProtectionPolicy(prefs),
|
trackingProtectionPolicy = createTrackingProtectionPolicy(prefs),
|
||||||
historyTrackingDelegate = HistoryDelegate(historyStorage)
|
historyTrackingDelegate = HistoryDelegate(historyStorage)
|
||||||
)
|
)
|
||||||
GeckoEngine(context, defaultSettings)
|
|
||||||
|
val runtimeSettings = GeckoRuntimeSettings.Builder()
|
||||||
|
.crashHandler(CrashHandlerService::class.java)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val runtime = GeckoRuntime.create(context, runtimeSettings)
|
||||||
|
|
||||||
|
GeckoEngine(context, defaultSettings, runtime)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,6 +9,7 @@ private object Versions {
|
||||||
const val rxAndroid = "2.1.0"
|
const val rxAndroid = "2.1.0"
|
||||||
const val rxKotlin = "2.3.0"
|
const val rxKotlin = "2.3.0"
|
||||||
const val anko = "0.10.8"
|
const val anko = "0.10.8"
|
||||||
|
const val sentry = "1.7.10"
|
||||||
|
|
||||||
const val androidx_appcompat = "1.0.2"
|
const val androidx_appcompat = "1.0.2"
|
||||||
const val androidx_constraint_layout = "2.0.0-alpha3"
|
const val androidx_constraint_layout = "2.0.0-alpha3"
|
||||||
|
@ -72,8 +73,12 @@ object Deps {
|
||||||
const val mozilla_feature_prompts = "org.mozilla.components:feature-prompts:${Versions.mozilla_android_components}"
|
const val mozilla_feature_prompts = "org.mozilla.components:feature-prompts:${Versions.mozilla_android_components}"
|
||||||
const val mozilla_feature_toolbar = "org.mozilla.components:feature-toolbar:${Versions.mozilla_android_components}"
|
const val mozilla_feature_toolbar = "org.mozilla.components:feature-toolbar:${Versions.mozilla_android_components}"
|
||||||
|
|
||||||
|
const val mozilla_lib_crash = "org.mozilla.components:lib-crash:${Versions.mozilla_android_components}"
|
||||||
|
|
||||||
const val mozilla_support_ktx = "org.mozilla.components:support-ktx:${Versions.mozilla_android_components}"
|
const val mozilla_support_ktx = "org.mozilla.components:support-ktx:${Versions.mozilla_android_components}"
|
||||||
|
|
||||||
|
const val sentry = "io.sentry:sentry-android:${Versions.sentry}"
|
||||||
|
|
||||||
const val junit = "junit:junit:${Versions.junit}"
|
const val junit = "junit:junit:${Versions.junit}"
|
||||||
const val tools_test_runner = "com.android.support.test:runner:${Versions.test_tools}"
|
const val tools_test_runner = "com.android.support.test:runner:${Versions.test_tools}"
|
||||||
const val tools_espresso_core = "com.android.support.test.espresso:espresso-core:${Versions.espresso_core}"
|
const val tools_espresso_core = "com.android.support.test.espresso:espresso-core:${Versions.espresso_core}"
|
||||||
|
|
Loading…
Reference in New Issue