From b173d3bfede4b07ad0deea1f5f9b30c80132e72d Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 3 Oct 2022 02:41:32 +0800 Subject: [PATCH] Modify make app errors records data to persistent storage --- .../apperrorstracking/data/ConfigData.kt | 3 +++ .../hook/entity/FrameworkHooker.kt | 21 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt b/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt index 1fc9f1d..fb14acb 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt @@ -38,6 +38,9 @@ import com.highcapable.yukihookapi.hook.xposed.prefs.data.PrefsData */ object ConfigData { + /** 存取全部应用异常数据的键值名称 */ + const val APP_ERRORS_DATA = "app_errors_data" + /** 显示开发者提示 */ val SHOW_DEVELOPER_NOTICE = PrefsData("_show_developer_notice", true) diff --git a/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index 26a101e..a8fe285 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -81,8 +81,8 @@ object FrameworkHooker : YukiBaseHooker() { /** 已忽略错误的 APP 数组 - 直到重新启动 */ private var mutedErrorsIfRestartApps = HashSet() - /** 已记录的 APP 异常信息数组 - 直到重新启动 */ - private val appErrorsRecords = ArrayList() + /** 已记录的 APP 异常信息数组 */ + private var appErrorsRecords = ArrayList() /** 注册生命周期 */ private fun registerLifecycle() { @@ -91,12 +91,20 @@ object FrameworkHooker : YukiBaseHooker() { registerReceiver(Intent.ACTION_USER_PRESENT) { _, _ -> mutedErrorsIfUnlockApps.clear() } /** 刷新模块 Resources 缓存 */ registerReceiver(Intent.ACTION_LOCALE_CHANGED) { _, _ -> refreshModuleAppResources() } + /** 启动时从本地获取异常记录 */ + onCreate { appErrorsRecords = ConfigData.getResolverString(ConfigData.APP_ERRORS_DATA).toEntity() ?: arrayListOf() } } FrameworkTool.Host.with(instance = this) { onOpenAppUsedFramework { appContext?.openApp(it) } onPushAppErrorsInfoData { appErrorsRecords } - onRemoveAppErrorsInfoData { appErrorsRecords.remove(it) } - onClearAppErrorsInfoData { appErrorsRecords.clear() } + onRemoveAppErrorsInfoData { + appErrorsRecords.remove(it) + saveAllAppErrorsRecords() + } + onClearAppErrorsInfoData { + appErrorsRecords.clear() + saveAllAppErrorsRecords() + } onMutedErrorsIfUnlock { mutedErrorsIfUnlockApps.add(it) } onMutedErrorsIfRestart { mutedErrorsIfRestartApps.add(it) } onPushMutedErrorsAppsData { @@ -138,6 +146,9 @@ object FrameworkHooker : YukiBaseHooker() { } } + /** 保存异常记录到本地 */ + private fun saveAllAppErrorsRecords() = newThread { ConfigData.putResolverString(ConfigData.APP_ERRORS_DATA, appErrorsRecords.toJson()) } + override fun onHook() { /** 注册生命周期 */ registerLifecycle() @@ -301,6 +312,8 @@ object FrameworkHooker : YukiBaseHooker() { val appInfo = ProcessRecordClass.toClass().field { name = "info" }.get(args().first().any()).cast() /** 添加当前异常信息到第一位 */ appErrorsRecords.add(0, AppErrorsInfoBean.clone(appInfo?.packageName, args().last().cast())) + /** 保存异常记录到本地 */ + saveAllAppErrorsRecords() } } }