diff --git a/README.md b/README.md index 3567e72..89bfe8c 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,23 @@ Added more features to app's crash dialog, fixed custom rom deleted dialog, the - 异常历史记录功能,可通过通知栏磁贴“异常历史记录”进入和模块主界面进入(正在开发) +- 多进程 APP 的异常将会显示异常的进程名 + - 支持 Android 10 及以上系统的深色模式 ## Future 此项目依然在开发中,现在未解决的问题和包含的问题如下 -- 排除列表以及更多功能正在开发 +- 排除列表功能 -- 后台进程可能依然会弹出崩溃对话框且开发者选项里的设置无效,还在排查 +- 模块主界面进入“异常历史记录”功能 + +- 隐藏 APP 多进程和后台进程崩溃对话框功能 + +- 已忽略异常的 APP 查看功能 + +- 更多功能 ## License diff --git a/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsDisplayBean.kt b/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsDisplayBean.kt index 6858612..45edee2 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsDisplayBean.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/bean/AppErrorsDisplayBean.kt @@ -26,15 +26,19 @@ import java.io.Serializable /** * 应用异常信息显示 bean * @param packageName APP 包名 + * @param processName APP 进程名 * @param appName APP 名称 * @param title 标题 - * @param isApp 是否为 APP + * @param isShowAppInfoButton 是否显示应用信息按钮 + * @param isShowCloseAppButton 是否显示关闭应用按钮 * @param isShowReopenButton 是否显示重新打开按钮 */ data class AppErrorsDisplayBean( var packageName: String, + var processName: String, var appName: String, var title: String, - var isApp: Boolean, + var isShowAppInfoButton: Boolean, + var isShowCloseAppButton: Boolean, var isShowReopenButton: Boolean ) : Serializable \ No newline at end of file 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 a3a385f..92153b0 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 @@ -49,8 +49,6 @@ object FrameworkHooker : YukiBaseHooker() { private const val AppErrorsClass = "com.android.server.am.AppErrors" - private const val AppErrorResultClass = "com.android.server.am.AppErrorResult" - private const val AppErrorDialog_DataClass = "com.android.server.am.AppErrorDialog\$Data" private const val ProcessRecordClass = "com.android.server.am.ProcessRecord" @@ -126,12 +124,6 @@ object FrameworkHooker : YukiBaseHooker() { /** 错误数据 */ val errData = args().first().cast()?.obj - /** 错误结果 */ - val errResult = AppErrorResultClass.clazz.method { - name = "get" - emptyParam() - }.get(AppErrorDialog_DataClass.clazz.field { name = "result" }.get(errData).any()).int() - /** 当前进程信息 */ val proc = AppErrorDialog_DataClass.clazz.field { name = "proc" }.get(errData).any() @@ -173,19 +165,19 @@ object FrameworkHooker : YukiBaseHooker() { context.toast(msg = "AppErrorsTracking has crashed, please see the log in console") return@afterHook } - /** 判断是否被忽略 - 在后台就不显示对话框 */ - if (ignoredErrorsIfUnlockApps.contains(packageName) || ignoredErrorsIfRestartApps.contains(packageName) || errResult == -2) - return@afterHook /** 启动错误对话框显示窗口 */ - AppErrorsDisplayActivity.start( - context, AppErrorsDisplayBean( - packageName = packageName, - appName = appName, - title = if (isRepeating) LocaleString.aerrRepeatedTitle(appName) else LocaleString.aerrTitle(appName), - isApp = isApp, - isShowReopenButton = isRepeating.not() && context.isAppCanOpened(packageName) + if (ignoredErrorsIfUnlockApps.contains(packageName).not() && ignoredErrorsIfRestartApps.contains(packageName).not()) + AppErrorsDisplayActivity.start( + context, AppErrorsDisplayBean( + packageName = packageName, + processName = processName, + appName = appName, + title = if (isRepeating) LocaleString.aerrRepeatedTitle(appName) else LocaleString.aerrTitle(appName), + isShowAppInfoButton = isApp, + isShowReopenButton = isApp && isRepeating.not() && context.isAppCanOpened(packageName) && packageName == processName, + isShowCloseAppButton = isApp + ) ) - ) } } injectMember { diff --git a/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt b/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt index 1cf3bd9..8e692b9 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt @@ -328,4 +328,10 @@ object LocaleString { /** @string Automatic generated */ fun yearAgo(vararg objArrs: Any) = R.string.year_ago.bind(*objArrs) + + /** @string Automatic generated */ + val crashProcess get() = crashProcess() + + /** @string Automatic generated */ + fun crashProcess(vararg objArrs: Any) = R.string.crash_process.bind(*objArrs) } \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt index 06ffd7a..4fd50bb 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt @@ -62,9 +62,11 @@ class AppErrorsDisplayActivity : BaseActivity() showDialog { title = appErrorsDisplay.title bind().apply { - appInfoItem.isVisible = appErrorsDisplay.isApp + processNameText.isVisible = appErrorsDisplay.packageName != appErrorsDisplay.processName + appInfoItem.isVisible = appErrorsDisplay.isShowAppInfoButton + closeAppItem.isVisible = appErrorsDisplay.isShowReopenButton.not() && appErrorsDisplay.isShowCloseAppButton reopenAppItem.isVisible = appErrorsDisplay.isShowReopenButton - closeAppItem.isVisible = appErrorsDisplay.isShowReopenButton.not() + processNameText.text = LocaleString.crashProcess(appErrorsDisplay.processName) appInfoItem.setOnClickListener { cancel() openSelfSetting(appErrorsDisplay.packageName) diff --git a/app/src/main/res/layout/dia_app_errors_display.xml b/app/src/main/res/layout/dia_app_errors_display.xml index dc08da5..796644e 100644 --- a/app/src/main/res/layout/dia_app_errors_display.xml +++ b/app/src/main/res/layout/dia_app_errors_display.xml @@ -6,6 +6,19 @@ android:orientation="vertical" android:padding="10dp"> + + 日前 月前 年前 + エラープロセス「%1$s」 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d502f5d..93f9557 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -70,4 +70,5 @@ 天前 月前 年前 + 异常进程 \"%1$s\" \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index f942b29..37d8739 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -70,4 +70,5 @@ 天前 月前 年前 + 異常進程 \"%1$s\" \ No newline at end of file diff --git a/app/src/main/res/values-zh-rMO/strings.xml b/app/src/main/res/values-zh-rMO/strings.xml index 9111750..5b32dfa 100644 --- a/app/src/main/res/values-zh-rMO/strings.xml +++ b/app/src/main/res/values-zh-rMO/strings.xml @@ -70,4 +70,5 @@ 天前 月前 年前 + 異常進程 \"%1$s\" \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5ceecc6..147c0ed 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -70,4 +70,5 @@ 天前 月前 年前 + 異常進程 \"%1$s\" \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4027028..33d7c63 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -70,4 +70,5 @@ days ago month ago year ago + Crash Process \"%1$s\" \ No newline at end of file