CrashLogUtil.kt 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package eu.kanade.tachiyomi.util
  2. import android.content.Context
  3. import android.os.Build
  4. import eu.kanade.tachiyomi.BuildConfig
  5. import eu.kanade.tachiyomi.util.storage.getUriCompat
  6. import eu.kanade.tachiyomi.util.system.WebViewUtil
  7. import eu.kanade.tachiyomi.util.system.createFileInCacheDir
  8. import eu.kanade.tachiyomi.util.system.toShareIntent
  9. import eu.kanade.tachiyomi.util.system.toast
  10. import tachiyomi.core.util.lang.withNonCancellableContext
  11. import tachiyomi.core.util.lang.withUIContext
  12. class CrashLogUtil(private val context: Context) {
  13. suspend fun dumpLogs() = withNonCancellableContext {
  14. try {
  15. val file = context.createFileInCacheDir("tachiyomi_crash_logs.txt")
  16. Runtime.getRuntime().exec("logcat *:E -d -f ${file.absolutePath}").waitFor()
  17. file.appendText(getDebugInfo())
  18. val uri = file.getUriCompat(context)
  19. context.startActivity(uri.toShareIntent(context, "text/plain"))
  20. } catch (e: Throwable) {
  21. withUIContext { context.toast("Failed to get logs") }
  22. }
  23. }
  24. fun getDebugInfo(): String {
  25. return """
  26. App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}, ${BuildConfig.BUILD_TIME})
  27. Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT})
  28. Android build ID: ${Build.DISPLAY}
  29. Device brand: ${Build.BRAND}
  30. Device manufacturer: ${Build.MANUFACTURER}
  31. Device name: ${Build.DEVICE}
  32. Device model: ${Build.MODEL}
  33. Device product name: ${Build.PRODUCT}
  34. WebView: ${WebViewUtil.getVersion(context)}
  35. """.trimIndent()
  36. }
  37. }