fixed native crash handle

This commit is contained in:
LagradOst 2023-08-23 23:57:54 +02:00
parent e2502de02c
commit 5bad6aca35
2 changed files with 18 additions and 4 deletions

View file

@ -104,13 +104,17 @@ class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)) :
}
class AcraApplication : Application() {
override fun onCreate() {
super.onCreate()
NativeCrashHandler.initCrashHandler()
Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler(filesDir.resolve("last_error")) {
ExceptionHandler(filesDir.resolve("last_error")) {
val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName)
startActivity(Intent.makeRestartActivityTask(intent!!.component))
})
}.also {
exceptionHandler = it
Thread.setDefaultUncaughtExceptionHandler(it)
}
}
override fun attachBaseContext(base: Context?) {
@ -138,6 +142,8 @@ class AcraApplication : Application() {
}
companion object {
var exceptionHandler: ExceptionHandler? = null
/** Use to get activity from Context */
tailrec fun Context.getActivity(): Activity? = this as? Activity
?: (this as? ContextWrapper)?.baseContext?.getActivity()
@ -212,6 +218,5 @@ class AcraApplication : Application() {
activity?.supportFragmentManager?.fragments?.lastOrNull()
)
}
}
}

View file

@ -14,6 +14,12 @@ object NativeCrashHandler {
private external fun getSignalStatus(): Int
private fun initSignalPolling() = CoroutineScope(Dispatchers.IO).launch {
//launch {
// delay(10000)
// triggerNativeCrash()
//}
while (true) {
delay(10_000)
val signal = getSignalStatus()
@ -24,7 +30,10 @@ object NativeCrashHandler {
if (lastError != null) continue
if (checkSafeModeFile()) continue
throw RuntimeException("Native crash with code: $signal. Try uninstalling extensions.\n")
AcraApplication.exceptionHandler?.uncaughtException(
Thread.currentThread(),
RuntimeException("Native crash with code: $signal. Try uninstalling extensions.\n")
)
}
}