Fix crashed apps user id mismatch problem in FrameworkHooker, AppErrorsInfoBean

This commit is contained in:
2023-01-15 04:12:50 +08:00
parent a214f5773f
commit 3798479c23
2 changed files with 8 additions and 10 deletions

View File

@@ -72,16 +72,16 @@ data class AppErrorsInfoBean(
/** /**
* 从 [ApplicationErrorReport.CrashInfo] 克隆 * 从 [ApplicationErrorReport.CrashInfo] 克隆
* @param pid APP 进程 ID * @param pid APP 进程 ID
* @param packageName APP 包名
* @param userId APP 用户 ID * @param userId APP 用户 ID
* @param packageName APP 包名
* @param crashInfo [ApplicationErrorReport.CrashInfo] * @param crashInfo [ApplicationErrorReport.CrashInfo]
* @return [AppErrorsInfoBean] * @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 -> (crashInfo?.exceptionClassName?.lowercase() == "native crash").let { isNativeCrash ->
AppErrorsInfoBean( AppErrorsInfoBean(
pid = pid, pid = pid,
userId = userId ?: 0, userId = userId,
packageName = packageName ?: "unknown", packageName = packageName ?: "unknown",
isNativeCrash = isNativeCrash, isNativeCrash = isNativeCrash,
exceptionClassName = crashInfo?.exceptionClassName ?: "unknown", exceptionClassName = crashInfo?.exceptionClassName ?: "unknown",

View File

@@ -79,9 +79,6 @@ object FrameworkHooker : YukiBaseHooker() {
"com.android.server.am.ErrorDialogController" "com.android.server.am.ErrorDialogController"
) )
/** 已记录的 APP 用户 ID */
private var appUserIdRecords = HashMap<Int, Int>()
/** 已忽略错误的 APP 数组 - 直到重新解锁 */ /** 已忽略错误的 APP 数组 - 直到重新解锁 */
private var mutedErrorsIfUnlockApps = HashSet<String>() private var mutedErrorsIfUnlockApps = HashSet<String>()
@@ -301,8 +298,6 @@ object FrameworkHooker : YukiBaseHooker() {
/** 崩溃标题 */ /** 崩溃标题 */
val errorTitle = if (isRepeating) LocaleString.aerrRepeatedTitle(appName) else LocaleString.aerrTitle(appName) val errorTitle = if (isRepeating) LocaleString.aerrRepeatedTitle(appName) else LocaleString.aerrTitle(appName)
/** 写入到用户 ID 记录 */
appUserIdRecords[pid] = userId
/** 打印错误日志 */ /** 打印错误日志 */
if (isApp) loggerE( if (isApp) loggerE(
msg = "Application \"$packageName\" ${if (isRepeating) "keeps stopping" else "has stopped"}" + msg = "Application \"$packageName\" ${if (isRepeating) "keeps stopping" else "has stopped"}" +
@@ -371,11 +366,14 @@ object FrameworkHooker : YukiBaseHooker() {
/** 当前 pid 信息 */ /** 当前 pid 信息 */
val pid = ProcessRecordClass.toClass().field { name { it == "mPid" || it == "pid" } }.get(proc).int() 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 信息 */ /** 当前 APP 信息 */
val appInfo = ProcessRecordClass.toClass().field { name = "info" }.get(proc).cast<ApplicationInfo>() val appInfo = ProcessRecordClass.toClass().field { name = "info" }.get(proc).cast<ApplicationInfo>()
/** 添加当前异常信息到第一位 */ /** 添加当前异常信息到第一位 */
appErrorsRecords.add(0, AppErrorsInfoBean.clone(pid, appInfo?.packageName, appUserIdRecords[pid], args(index = 1).cast())) appErrorsRecords.add(0, AppErrorsInfoBean.clone(pid, userId, appInfo?.packageName, args(index = 1).cast()))
loggerI(msg = "Received crash application data --pid $pid") loggerI(msg = "Received crash application data${if (userId != 0) " --user $userId" else ""} --pid $pid")
/** 保存异常记录到本地 */ /** 保存异常记录到本地 */
saveAllAppErrorsRecords() saveAllAppErrorsRecords()
} }