From 3798479c2336b107ba0e89779ca8158635cee1b1 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sun, 15 Jan 2023 04:12:50 +0800 Subject: [PATCH] Fix crashed apps user id mismatch problem in FrameworkHooker, AppErrorsInfoBean --- .../apperrorstracking/bean/AppErrorsInfoBean.kt | 6 +++--- .../apperrorstracking/hook/entity/FrameworkHooker.kt | 12 +++++------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsInfoBean.kt b/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsInfoBean.kt index eca27c9..fd5c1ab 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsInfoBean.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsInfoBean.kt @@ -72,16 +72,16 @@ data class AppErrorsInfoBean( /** * 从 [ApplicationErrorReport.CrashInfo] 克隆 * @param pid APP 进程 ID - * @param packageName APP 包名 * @param userId APP 用户 ID + * @param packageName APP 包名 * @param crashInfo [ApplicationErrorReport.CrashInfo] * @return [AppErrorsInfoBean] */ - fun clone(pid: Int, packageName: String?, userId: Int?, crashInfo: ApplicationErrorReport.CrashInfo?) = + fun clone(pid: Int, userId: Int, packageName: String?, crashInfo: ApplicationErrorReport.CrashInfo?) = (crashInfo?.exceptionClassName?.lowercase() == "native crash").let { isNativeCrash -> AppErrorsInfoBean( pid = pid, - userId = userId ?: 0, + userId = userId, packageName = packageName ?: "unknown", isNativeCrash = isNativeCrash, exceptionClassName = crashInfo?.exceptionClassName ?: "unknown", 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 ca276e9..09f2cc9 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 @@ -79,9 +79,6 @@ object FrameworkHooker : YukiBaseHooker() { "com.android.server.am.ErrorDialogController" ) - /** 已记录的 APP 用户 ID */ - private var appUserIdRecords = HashMap() - /** 已忽略错误的 APP 数组 - 直到重新解锁 */ private var mutedErrorsIfUnlockApps = HashSet() @@ -301,8 +298,6 @@ object FrameworkHooker : YukiBaseHooker() { /** 崩溃标题 */ val errorTitle = if (isRepeating) LocaleString.aerrRepeatedTitle(appName) else LocaleString.aerrTitle(appName) - /** 写入到用户 ID 记录 */ - appUserIdRecords[pid] = userId /** 打印错误日志 */ if (isApp) loggerE( msg = "Application \"$packageName\" ${if (isRepeating) "keeps stopping" else "has stopped"}" + @@ -371,11 +366,14 @@ object FrameworkHooker : YukiBaseHooker() { /** 当前 pid 信息 */ val pid = ProcessRecordClass.toClass().field { name { it == "mPid" || it == "pid" } }.get(proc).int() + /** 当前用户 ID 信息 */ + val userId = ProcessRecordClass.toClass().field { name = "userId" }.get(proc).int() + /** 当前 APP 信息 */ val appInfo = ProcessRecordClass.toClass().field { name = "info" }.get(proc).cast() /** 添加当前异常信息到第一位 */ - appErrorsRecords.add(0, AppErrorsInfoBean.clone(pid, appInfo?.packageName, appUserIdRecords[pid], args(index = 1).cast())) - loggerI(msg = "Received crash application data --pid $pid") + appErrorsRecords.add(0, AppErrorsInfoBean.clone(pid, userId, appInfo?.packageName, args(index = 1).cast())) + loggerI(msg = "Received crash application data${if (userId != 0) " --user $userId" else ""} --pid $pid") /** 保存异常记录到本地 */ saveAllAppErrorsRecords() }