diff --git a/app/src/main/java/com/idormy/sms/forwarder/App.kt b/app/src/main/java/com/idormy/sms/forwarder/App.kt index 7f3483ea..e729ca9d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/App.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/App.kt @@ -41,7 +41,10 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import kotlinx.coroutines.* +import java.io.BufferedWriter import java.io.File +import java.io.FileWriter +import java.io.IOException import java.text.SimpleDateFormat import java.util.* import java.util.concurrent.TimeUnit @@ -100,11 +103,28 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { override fun onCreate() { super.onCreate() - Thread.setDefaultUncaughtExceptionHandler { _, e -> - isDebug = true - e.printStackTrace() - Log.e(TAG, "onCreate: $e") + + // 设置全局异常捕获 + val defaultHandler = Thread.getDefaultUncaughtExceptionHandler() + Thread.setDefaultUncaughtExceptionHandler { thread, throwable -> + throwable.printStackTrace() + try { + val logPath = this.cacheDir.absolutePath + "/logs" + val logDir = File(logPath) + if (!logDir.exists()) logDir.mkdirs() + val dateFormat = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()) + val currentDateTime = dateFormat.format(Date()) + val logFile = File(logPath, "crash_$currentDateTime.txt") + BufferedWriter(FileWriter(logFile, true)).use { writer -> + writer.append("$throwable\n") + } + } catch (ex: IOException) { + ex.printStackTrace() + } + //使用默认的处理方式让APP停止运行 + defaultHandler?.uncaughtException(thread, throwable) } + try { context = applicationContext initLibs()