From 998d8af85dd273fb37627b7d8e9bc322bf0cd26e Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 25 Mar 2018 04:02:05 +0200 Subject: [PATCH] Improve crash reporting --- malheur/src/main/AndroidManifest.xml | 6 +---- .../java/de/kuschku/malheur/CrashHandler.kt | 27 ++++++++++++++++++- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/malheur/src/main/AndroidManifest.xml b/malheur/src/main/AndroidManifest.xml index 89c8fa0f2..8db59c9a9 100644 --- a/malheur/src/main/AndroidManifest.xml +++ b/malheur/src/main/AndroidManifest.xml @@ -1,6 +1,2 @@ <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="de.kuschku.malheur"> - - <uses-permission android:name="android.permission.READ_LOGS" /> -</manifest> +<manifest package="de.kuschku.malheur" /> diff --git a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt index 3e67a36a3..ed48026a2 100644 --- a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt +++ b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt @@ -1,9 +1,14 @@ package de.kuschku.malheur import android.app.Application +import android.os.Handler +import android.os.HandlerThread +import android.util.Log +import android.widget.Toast import com.google.gson.GsonBuilder import de.kuschku.malheur.collectors.ReportCollector import de.kuschku.malheur.config.ReportConfig +import java.io.File import java.util.* object CrashHandler { @@ -12,16 +17,26 @@ object CrashHandler { private val startTime = Date() private var originalHandler: Thread.UncaughtExceptionHandler? = null + private lateinit var handler: Handler + fun init(application: Application, config: ReportConfig = ReportConfig(), buildConfig: Class<*>?) { if (myHandler == null) { originalHandler = Thread.getDefaultUncaughtExceptionHandler() } + val handlerThread = HandlerThread("Malheur") + handlerThread.start() + handler = Handler(handlerThread.looper) + val reportCollector = ReportCollector(application) myHandler = Thread.UncaughtExceptionHandler { activeThread, throwable -> val crashTime = Date() val stackTraces = Thread.getAllStackTraces() + Log.e("Malheur", "Creating crash report") + handler.post { + Toast.makeText(application, "Creating crash report", Toast.LENGTH_LONG).show() + } Thread { try { val json = gson.toJson( @@ -38,7 +53,17 @@ object CrashHandler { ), config ) ) - // FIXME STOPSHIP Implement crash handling + val crashDirectory = File(application.cacheDir, "crashes") + crashDirectory.mkdirs() + val crashFile = File(crashDirectory, "${System.currentTimeMillis()}.json") + crashFile.createNewFile() + crashFile.writeText(json) + Log.e("Malheur", "Crash report saved: $crashFile") + handler.post { + Toast.makeText(application, + "Crash report saved: ${crashFile.name}", + Toast.LENGTH_LONG).show() + } } catch (e: Throwable) { e.printStackTrace() originalHandler?.uncaughtException(activeThread, throwable) -- GitLab