From 447793cc7aee85cdd13f9e79123f62e78e4bf610 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 27 Jun 2022 17:31:48 +0800 Subject: [PATCH] Fix System native apps errors dialog cannot closed when Android API lower 30 --- .../hook/entity/FrameworkHooker.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) 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 65ae943..5eb5ed1 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 @@ -23,10 +23,12 @@ package com.fankes.apperrorstracking.hook.entity +import android.app.Dialog import android.content.Context import android.content.Intent import android.content.pm.ApplicationInfo import android.content.pm.PackageManager +import android.os.Build import android.os.Message import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.toBitmap @@ -51,6 +53,7 @@ import com.highcapable.yukihookapi.hook.factory.field import com.highcapable.yukihookapi.hook.factory.hasMethod import com.highcapable.yukihookapi.hook.factory.method import com.highcapable.yukihookapi.hook.log.loggerE +import com.highcapable.yukihookapi.hook.type.android.BundleClass import com.highcapable.yukihookapi.hook.type.android.MessageClass object FrameworkHooker : YukiBaseHooker() { @@ -58,8 +61,10 @@ object FrameworkHooker : YukiBaseHooker() { private const val ActivityManagerServiceClass = "com.android.server.am.ActivityManagerService" private const val UserControllerClass = "com.android.server.am.UserController" private const val AppErrorsClass = "com.android.server.am.AppErrors" + private const val AppErrorDialogClass = "com.android.server.am.AppErrorDialog" private const val AppErrorDialog_DataClass = "com.android.server.am.AppErrorDialog\$Data" private const val ProcessRecordClass = "com.android.server.am.ProcessRecord" + private const val ActivityTaskManagerService_LocalServiceClass = "com.android.server.wm.ActivityTaskManagerService\$LocalService" private val PackageListClass = VariousClass( "com.android.server.am.ProcessRecord\$PackageList", @@ -150,6 +155,26 @@ object FrameworkHooker : YukiBaseHooker() { } intercept() } + }.ignoredHookClassNotFoundFailure() + /** 干掉原生错误对话框 - API 30 以下 */ + ActivityTaskManagerService_LocalServiceClass.hook { + injectMember { + method { + name = "canShowErrorDialogs" + emptyParam() + } + replaceToFalse() + } + }.by { Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q } + /** 干掉原生错误对话框 - 如果上述方法全部失效则直接结束对话框 */ + AppErrorDialogClass.hook { + injectMember { + method { + name = "onCreate" + param(BundleClass) + } + afterHook { instance().cancel() } + } } /** 注入自定义错误对话框 */ AppErrorsClass.hook {