From 03e7ff2bd30193a383def1bade2b2c1509e5744b Mon Sep 17 00:00:00 2001 From: psyche314 Date: Sun, 31 May 2026 13:47:08 +0800 Subject: [PATCH 1/4] feat: add automatic crash stack logcat output Co-authored-by: Codex --- .../apperrorstracking/const/ConstFactory.kt | 11 ++++++++- .../apperrorstracking/data/ConfigData.kt | 14 ++++++++++- .../hook/entity/FrameworkHooker.kt | 15 ++++++++++-- .../errors/AppErrorsDetailActivity.kt | 11 ++++++--- .../ui/activity/main/MainActivity.kt | 5 +++- .../src/main/res/layout/activity_main.xml | 24 +++++++++++++++++++ module-app/src/main/res/values-ja/strings.xml | 2 ++ .../src/main/res/values-zh-rCN/strings.xml | 4 +++- .../src/main/res/values-zh-rHK/strings.xml | 4 +++- .../src/main/res/values-zh-rMO/strings.xml | 4 +++- .../src/main/res/values-zh-rTW/strings.xml | 4 +++- module-app/src/main/res/values/strings.xml | 2 ++ 12 files changed, 88 insertions(+), 12 deletions(-) diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt index f74c5dae..0cce9721 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt @@ -35,6 +35,15 @@ object PackageName { const val SYSTEM_FRAMEWORK = "android" } +/** + * Logcat 标签常量定义类 + */ +object LogcatTag { + + /** 异常堆栈输出 */ + const val APP_ERRORS_STACK_TRACE = "AppErrorsTrackingCrash" +} + /** * 模块版本常量定义类 */ @@ -56,4 +65,4 @@ object ModuleVersion { val suffix = GITHUB_COMMIT_ID.let { if (it.isNotBlank()) "-$it" else "" } override fun toString() = "$NAME$suffix($CODE)" -} \ No newline at end of file +} diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt b/module-app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt index f4859117..d8a522cb 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt @@ -59,6 +59,9 @@ object ConfigData { /** 禁止异常堆栈内容自动换行 */ val DISABLE_AUTO_WRAP_ERROR_STACK_TRACE = PrefsData("_disable_auto_wrap_error_stack_trace", false) + /** 自动打印异常堆栈到 Logcat */ + val AUTO_PRINT_STACK_TRACE_TO_LOGCAT = PrefsData("_auto_print_stack_trace_to_logcat", false) + /** 分享时使用文件 */ val SHARE_WITH_FILE = PrefsData("_share_with_file", false) @@ -228,4 +231,13 @@ object ConfigData { set(value) { putBoolean(SHARE_WITH_FILE, value) } -} \ No newline at end of file + + /** + * 是否自动打印异常堆栈到 Logcat + */ + var isAutoPrintStackTraceToLogcat + get() = getBoolean(AUTO_PRINT_STACK_TRACE_TO_LOGCAT) + set(value) { + putBoolean(AUTO_PRINT_STACK_TRACE_TO_LOGCAT, value) + } +} diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index fb7b0f73..73012ab4 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -42,6 +42,7 @@ import com.fankes.apperrorstracking.bean.AppErrorsInfoBean import com.fankes.apperrorstracking.bean.AppInfoBean import com.fankes.apperrorstracking.bean.MutedErrorsAppBean import com.fankes.apperrorstracking.bean.enum.AppFiltersType +import com.fankes.apperrorstracking.const.LogcatTag import com.fankes.apperrorstracking.data.AppErrorsConfigData import com.fankes.apperrorstracking.data.AppErrorsRecordData import com.fankes.apperrorstracking.data.ConfigData @@ -404,7 +405,17 @@ object FrameworkHooker : YukiBaseHooker() { * @param info 系统错误报告数据实例 */ private fun AppErrorsProcessData.handleAppErrorsInfo(context: Context, info: ApplicationErrorReport.CrashInfo?) { - AppErrorsRecordData.add(AppErrorsInfoBean.clone(context, pid, userId, appInfo?.packageName, info)) + val appErrorsInfo = AppErrorsInfoBean.clone(context, pid, userId, appInfo?.packageName, info) + AppErrorsRecordData.add(appErrorsInfo) + if (ConfigData.isAutoPrintStackTraceToLogcat) + runCatching { + YLog.error( + msg = appErrorsInfo.stackTrace, + tag = LogcatTag.APP_ERRORS_STACK_TRACE, + env = YLog.EnvType.LOGD + ) + } + .onFailure { YLog.error("Failed to auto print app error stack trace to logcat", it) } YLog.info("Received crash application data${if (userId != 0) " --user $userId" else ""} --pid $pid") } @@ -504,4 +515,4 @@ object FrameworkHooker : YukiBaseHooker() { } } } -} \ No newline at end of file +} diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt index 095c0e94..a5a63bef 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt @@ -33,6 +33,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import com.fankes.apperrorstracking.R import com.fankes.apperrorstracking.bean.AppErrorsInfoBean +import com.fankes.apperrorstracking.const.LogcatTag import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.data.factory.bind import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDetailBinding @@ -48,7 +49,7 @@ import com.fankes.apperrorstracking.utils.factory.openSelfSetting import com.fankes.apperrorstracking.utils.factory.showDialog import com.fankes.apperrorstracking.utils.factory.toast import com.fankes.apperrorstracking.utils.tool.StackTraceShareHelper -import com.highcapable.yukihookapi.hook.log.loggerE +import com.highcapable.yukihookapi.hook.log.YLog import java.io.File class AppErrorsDetailActivity : BaseActivity() { @@ -122,7 +123,11 @@ class AppErrorsDetailActivity : BaseActivity() { } binding.appInfoItem.setOnClickListener { openSelfSetting(appErrorsInfo.packageName) } binding.printIcon.setOnClickListener { - loggerE(msg = appErrorsInfo.stackTrace) + YLog.error( + msg = appErrorsInfo.stackTrace, + tag = LogcatTag.APP_ERRORS_STACK_TRACE, + env = YLog.EnvType.LOGD + ) toast(locale.printToLogcatSuccess) } binding.copyIcon.setOnClickListener { @@ -219,4 +224,4 @@ class AppErrorsDetailActivity : BaseActivity() { super.onNewIntent(intent) if (initUi(intent)) binding.appPanelScrollView.scrollTo(0, 0) } -} \ No newline at end of file +} diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt index a692825b..ac035e40 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt @@ -101,6 +101,9 @@ class MainActivity : BaseActivity() { binding.onlyShowErrorsInMainProcessSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_MAIN) binding.alwaysShowsReopenAppOptionsSwitch.bind(ConfigData.ENABLE_ALWAYS_SHOWS_REOPEN_APP_OPTIONS) binding.shareWithFile.bind(ConfigData.SHARE_WITH_FILE) + binding.autoPrintStackTraceToLogcatSwitch.bind(ConfigData.AUTO_PRINT_STACK_TRACE_TO_LOGCAT) { + onChanged { FrameworkTool.refreshFrameworkPrefsData(this@MainActivity) } + } binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) { onInitialize { binding.mgrAppsConfigsTemplateButton.isVisible = it } onChanged { reinitialize() } @@ -185,4 +188,4 @@ class MainActivity : BaseActivity() { refreshModuleStatus() } } -} \ No newline at end of file +} diff --git a/module-app/src/main/res/layout/activity_main.xml b/module-app/src/main/res/layout/activity_main.xml index d87aa3f5..6f07f740 100644 --- a/module-app/src/main/res/layout/activity_main.xml +++ b/module-app/src/main/res/layout/activity_main.xml @@ -322,6 +322,30 @@ android:textColor="@color/colorTextDark" android:textSize="12sp" /> + + + + システムビルド ID アプリのパッケージ名 その他の要件 + エラースタックを logcat に自動出力 + 有効化すると、新しく検出されたクラッシュのスタックトレースを AppErrorsTrackingCrash タグで logcat へ自動出力します。 このモジュールは KavaRef を搭載しています。\n詳細はこちら https://github.com/HighCapable/KavaRef diff --git a/module-app/src/main/res/values-zh-rCN/strings.xml b/module-app/src/main/res/values-zh-rCN/strings.xml index ba2f9f8a..b76f0cd3 100644 --- a/module-app/src/main/res/values-zh-rCN/strings.xml +++ b/module-app/src/main/res/values-zh-rCN/strings.xml @@ -159,5 +159,7 @@ 其它必要信息 以文件方式分享异常堆栈 使用文件的方式代替文本分享异常堆栈 + 自动打印异常堆栈到控制台 + 启用后,每次新捕获到应用崩溃时都会自动使用 AppErrorsTrackingCrash 标签将异常堆栈打印到 logcat。 此模块使用 KavaRef 强力驱动。\n了解更多 https://github.com/HighCapable/KavaRef - \ No newline at end of file + diff --git a/module-app/src/main/res/values-zh-rHK/strings.xml b/module-app/src/main/res/values-zh-rHK/strings.xml index b4ec46e0..15bd1fe1 100644 --- a/module-app/src/main/res/values-zh-rHK/strings.xml +++ b/module-app/src/main/res/values-zh-rHK/strings.xml @@ -155,5 +155,7 @@ 系統建置 ID 應用程式包名稱 其它必要資訊 + 自動打印異常堆棧到控制台 + 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTrackingCrash 標籤將異常堆棧打印到 logcat。 此模組使用 KavaRef 強力驅動。\n了解更多 https://github.com/HighCapable/KavaRef - \ No newline at end of file + diff --git a/module-app/src/main/res/values-zh-rMO/strings.xml b/module-app/src/main/res/values-zh-rMO/strings.xml index 650c4685..95060283 100644 --- a/module-app/src/main/res/values-zh-rMO/strings.xml +++ b/module-app/src/main/res/values-zh-rMO/strings.xml @@ -155,5 +155,7 @@ 系統建置 ID 應用程式包名稱 其它必要資訊 + 自動打印異常堆棧到控制台 + 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTrackingCrash 標籤將異常堆棧打印到 logcat。 此模組使用 KavaRef 強力驅動。\n了解更多 https://github.com/HighCapable/KavaRef - \ No newline at end of file + diff --git a/module-app/src/main/res/values-zh-rTW/strings.xml b/module-app/src/main/res/values-zh-rTW/strings.xml index 549a57ae..5d126426 100644 --- a/module-app/src/main/res/values-zh-rTW/strings.xml +++ b/module-app/src/main/res/values-zh-rTW/strings.xml @@ -155,5 +155,7 @@ 系統建置 ID 應用程式包名稱 其它必要資訊 + 自動輸出異常堆疊到控制檯 + 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTrackingCrash 標籤將異常堆疊輸出到 logcat。 此模組使用 KavaRef 強力驅動。\n瞭解更多 https://github.com/HighCapable/KavaRef - \ No newline at end of file + diff --git a/module-app/src/main/res/values/strings.xml b/module-app/src/main/res/values/strings.xml index 9ae8ace3..85157a60 100644 --- a/module-app/src/main/res/values/strings.xml +++ b/module-app/src/main/res/values/strings.xml @@ -162,5 +162,7 @@ Other Requirement Share errors stacktrace with file Share errors stacktrace using files instead of text + Auto print error stack trace to logcat + After enabling, each newly captured crash stack trace will be printed to logcat automatically with the AppErrorsTrackingCrash tag. This Xposed Module is powered by KavaRef.\nLearn more https://github.com/HighCapable/KavaRef From 35a03b37464d68565c9fba2700519d381c98ac00 Mon Sep 17 00:00:00 2001 From: psyche314 Date: Tue, 2 Jun 2026 02:06:37 +0800 Subject: [PATCH 2/4] fix: use scoped logcat tag Co-authored-by: Codex --- .../java/com/fankes/apperrorstracking/const/ConstFactory.kt | 4 ++-- .../main/java/com/fankes/apperrorstracking/hook/HookEntry.kt | 5 +++-- .../fankes/apperrorstracking/hook/entity/FrameworkHooker.kt | 2 +- .../ui/activity/errors/AppErrorsDetailActivity.kt | 2 +- module-app/src/main/res/values-ja/strings.xml | 2 +- module-app/src/main/res/values-zh-rCN/strings.xml | 2 +- module-app/src/main/res/values-zh-rHK/strings.xml | 2 +- module-app/src/main/res/values-zh-rMO/strings.xml | 2 +- module-app/src/main/res/values-zh-rTW/strings.xml | 2 +- module-app/src/main/res/values/strings.xml | 2 +- 10 files changed, 13 insertions(+), 12 deletions(-) diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt index 0cce9721..6ff1347d 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt @@ -40,8 +40,8 @@ object PackageName { */ object LogcatTag { - /** 异常堆栈输出 */ - const val APP_ERRORS_STACK_TRACE = "AppErrorsTrackingCrash" + /** 模块日志输出 */ + const val APP_ERRORS_TRACKING = "AppErrorsTracking" } /** diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt index 0bc789fd..1740cd2d 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt @@ -21,6 +21,7 @@ */ package com.fankes.apperrorstracking.hook +import com.fankes.apperrorstracking.const.LogcatTag import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.generated.locale.ModuleAppLocale import com.fankes.apperrorstracking.hook.entity.FrameworkHooker @@ -35,7 +36,7 @@ object HookEntry : IYukiHookXposedInit { override fun onInit() = configs { debugLog { - tag = "AppErrorsTracking" + tag = LogcatTag.APP_ERRORS_TRACKING isRecord = true } isDebug = false @@ -48,4 +49,4 @@ object HookEntry : IYukiHookXposedInit { loadHooker(FrameworkHooker) } } -} \ No newline at end of file +} diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index 73012ab4..f2c89c0b 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -411,7 +411,7 @@ object FrameworkHooker : YukiBaseHooker() { runCatching { YLog.error( msg = appErrorsInfo.stackTrace, - tag = LogcatTag.APP_ERRORS_STACK_TRACE, + tag = LogcatTag.APP_ERRORS_TRACKING, env = YLog.EnvType.LOGD ) } diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt index a5a63bef..1eeaae47 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt @@ -125,7 +125,7 @@ class AppErrorsDetailActivity : BaseActivity() { binding.printIcon.setOnClickListener { YLog.error( msg = appErrorsInfo.stackTrace, - tag = LogcatTag.APP_ERRORS_STACK_TRACE, + tag = LogcatTag.APP_ERRORS_TRACKING, env = YLog.EnvType.LOGD ) toast(locale.printToLogcatSuccess) diff --git a/module-app/src/main/res/values-ja/strings.xml b/module-app/src/main/res/values-ja/strings.xml index 3f051cfa..d88cfd28 100644 --- a/module-app/src/main/res/values-ja/strings.xml +++ b/module-app/src/main/res/values-ja/strings.xml @@ -158,6 +158,6 @@ アプリのパッケージ名 その他の要件 エラースタックを logcat に自動出力 - 有効化すると、新しく検出されたクラッシュのスタックトレースを AppErrorsTrackingCrash タグで logcat へ自動出力します。 + 有効化すると、新しく検出されたクラッシュのスタックトレースを AppErrorsTracking タグで logcat へ自動出力します。 このモジュールは KavaRef を搭載しています。\n詳細はこちら https://github.com/HighCapable/KavaRef diff --git a/module-app/src/main/res/values-zh-rCN/strings.xml b/module-app/src/main/res/values-zh-rCN/strings.xml index b76f0cd3..d7f53499 100644 --- a/module-app/src/main/res/values-zh-rCN/strings.xml +++ b/module-app/src/main/res/values-zh-rCN/strings.xml @@ -160,6 +160,6 @@ 以文件方式分享异常堆栈 使用文件的方式代替文本分享异常堆栈 自动打印异常堆栈到控制台 - 启用后,每次新捕获到应用崩溃时都会自动使用 AppErrorsTrackingCrash 标签将异常堆栈打印到 logcat。 + 启用后,每次新捕获到应用崩溃时都会自动使用 AppErrorsTracking 标签将异常堆栈打印到 logcat。 此模块使用 KavaRef 强力驱动。\n了解更多 https://github.com/HighCapable/KavaRef diff --git a/module-app/src/main/res/values-zh-rHK/strings.xml b/module-app/src/main/res/values-zh-rHK/strings.xml index 15bd1fe1..a8408341 100644 --- a/module-app/src/main/res/values-zh-rHK/strings.xml +++ b/module-app/src/main/res/values-zh-rHK/strings.xml @@ -156,6 +156,6 @@ 應用程式包名稱 其它必要資訊 自動打印異常堆棧到控制台 - 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTrackingCrash 標籤將異常堆棧打印到 logcat。 + 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTracking 標籤將異常堆棧打印到 logcat。 此模組使用 KavaRef 強力驅動。\n了解更多 https://github.com/HighCapable/KavaRef diff --git a/module-app/src/main/res/values-zh-rMO/strings.xml b/module-app/src/main/res/values-zh-rMO/strings.xml index 95060283..03f2ec89 100644 --- a/module-app/src/main/res/values-zh-rMO/strings.xml +++ b/module-app/src/main/res/values-zh-rMO/strings.xml @@ -156,6 +156,6 @@ 應用程式包名稱 其它必要資訊 自動打印異常堆棧到控制台 - 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTrackingCrash 標籤將異常堆棧打印到 logcat。 + 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTracking 標籤將異常堆棧打印到 logcat。 此模組使用 KavaRef 強力驅動。\n了解更多 https://github.com/HighCapable/KavaRef diff --git a/module-app/src/main/res/values-zh-rTW/strings.xml b/module-app/src/main/res/values-zh-rTW/strings.xml index 5d126426..7d247b3a 100644 --- a/module-app/src/main/res/values-zh-rTW/strings.xml +++ b/module-app/src/main/res/values-zh-rTW/strings.xml @@ -156,6 +156,6 @@ 應用程式包名稱 其它必要資訊 自動輸出異常堆疊到控制檯 - 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTrackingCrash 標籤將異常堆疊輸出到 logcat。 + 啟用後,每次新捕獲到程式崩潰時都會自動使用 AppErrorsTracking 標籤將異常堆疊輸出到 logcat。 此模組使用 KavaRef 強力驅動。\n瞭解更多 https://github.com/HighCapable/KavaRef diff --git a/module-app/src/main/res/values/strings.xml b/module-app/src/main/res/values/strings.xml index 85157a60..4148ca1d 100644 --- a/module-app/src/main/res/values/strings.xml +++ b/module-app/src/main/res/values/strings.xml @@ -163,6 +163,6 @@ Share errors stacktrace with file Share errors stacktrace using files instead of text Auto print error stack trace to logcat - After enabling, each newly captured crash stack trace will be printed to logcat automatically with the AppErrorsTrackingCrash tag. + After enabling, each newly captured crash stack trace will be printed to logcat automatically with the AppErrorsTracking tag. This Xposed Module is powered by KavaRef.\nLearn more https://github.com/HighCapable/KavaRef From 7856e7678d1f9ad8b9d8b36fdeffbaecae7e397a Mon Sep 17 00:00:00 2001 From: psyche314 Date: Fri, 5 Jun 2026 23:07:47 +0800 Subject: [PATCH 3/4] fix: remove logcat tag wrapper --- .../com/fankes/apperrorstracking/const/ConstFactory.kt | 9 --------- .../java/com/fankes/apperrorstracking/hook/HookEntry.kt | 3 +-- .../apperrorstracking/hook/entity/FrameworkHooker.kt | 3 +-- .../ui/activity/errors/AppErrorsDetailActivity.kt | 3 +-- 4 files changed, 3 insertions(+), 15 deletions(-) diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt index 6ff1347d..a1d1b894 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt @@ -35,15 +35,6 @@ object PackageName { const val SYSTEM_FRAMEWORK = "android" } -/** - * Logcat 标签常量定义类 - */ -object LogcatTag { - - /** 模块日志输出 */ - const val APP_ERRORS_TRACKING = "AppErrorsTracking" -} - /** * 模块版本常量定义类 */ diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt index 1740cd2d..44fc3574 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt @@ -21,7 +21,6 @@ */ package com.fankes.apperrorstracking.hook -import com.fankes.apperrorstracking.const.LogcatTag import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.generated.locale.ModuleAppLocale import com.fankes.apperrorstracking.hook.entity.FrameworkHooker @@ -36,7 +35,7 @@ object HookEntry : IYukiHookXposedInit { override fun onInit() = configs { debugLog { - tag = LogcatTag.APP_ERRORS_TRACKING + tag = "AppErrorsTracking" isRecord = true } isDebug = false diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index f2c89c0b..6743ec06 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -42,7 +42,6 @@ import com.fankes.apperrorstracking.bean.AppErrorsInfoBean import com.fankes.apperrorstracking.bean.AppInfoBean import com.fankes.apperrorstracking.bean.MutedErrorsAppBean import com.fankes.apperrorstracking.bean.enum.AppFiltersType -import com.fankes.apperrorstracking.const.LogcatTag import com.fankes.apperrorstracking.data.AppErrorsConfigData import com.fankes.apperrorstracking.data.AppErrorsRecordData import com.fankes.apperrorstracking.data.ConfigData @@ -411,7 +410,7 @@ object FrameworkHooker : YukiBaseHooker() { runCatching { YLog.error( msg = appErrorsInfo.stackTrace, - tag = LogcatTag.APP_ERRORS_TRACKING, + tag = "AppErrorsTracking", env = YLog.EnvType.LOGD ) } diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt index 1eeaae47..639c0816 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt @@ -33,7 +33,6 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import com.fankes.apperrorstracking.R import com.fankes.apperrorstracking.bean.AppErrorsInfoBean -import com.fankes.apperrorstracking.const.LogcatTag import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.data.factory.bind import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDetailBinding @@ -125,7 +124,7 @@ class AppErrorsDetailActivity : BaseActivity() { binding.printIcon.setOnClickListener { YLog.error( msg = appErrorsInfo.stackTrace, - tag = LogcatTag.APP_ERRORS_TRACKING, + tag = "AppErrorsTracking", env = YLog.EnvType.LOGD ) toast(locale.printToLogcatSuccess) From d9da432af1c22fa5200cd792d51b5eab8970852b Mon Sep 17 00:00:00 2001 From: psyche314 Date: Sat, 6 Jun 2026 23:24:33 +0800 Subject: [PATCH 4/4] fix: derive logcat tag from project name --- .../java/com/fankes/apperrorstracking/const/ConstFactory.kt | 3 +++ .../main/java/com/fankes/apperrorstracking/hook/HookEntry.kt | 3 ++- .../fankes/apperrorstracking/hook/entity/FrameworkHooker.kt | 3 ++- .../ui/activity/errors/AppErrorsDetailActivity.kt | 3 ++- settings.gradle.kts | 4 ++-- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt index a1d1b894..4f399986 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/const/ConstFactory.kt @@ -26,6 +26,9 @@ package com.fankes.apperrorstracking.const import com.fankes.apperrorstracking.generated.ModuleAppProperties import com.fankes.apperrorstracking.wrapper.BuildConfigWrapper +/** 项目名称 */ +const val PROJECT_NAME = ModuleAppProperties.PROJECT_NAME + /** * 包名常量定义类 */ diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt index 44fc3574..d2416ae8 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/HookEntry.kt @@ -21,6 +21,7 @@ */ package com.fankes.apperrorstracking.hook +import com.fankes.apperrorstracking.const.PROJECT_NAME import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.generated.locale.ModuleAppLocale import com.fankes.apperrorstracking.hook.entity.FrameworkHooker @@ -35,7 +36,7 @@ object HookEntry : IYukiHookXposedInit { override fun onInit() = configs { debugLog { - tag = "AppErrorsTracking" + tag = PROJECT_NAME isRecord = true } isDebug = false diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index 6743ec06..baff1191 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -42,6 +42,7 @@ import com.fankes.apperrorstracking.bean.AppErrorsInfoBean import com.fankes.apperrorstracking.bean.AppInfoBean import com.fankes.apperrorstracking.bean.MutedErrorsAppBean import com.fankes.apperrorstracking.bean.enum.AppFiltersType +import com.fankes.apperrorstracking.const.PROJECT_NAME import com.fankes.apperrorstracking.data.AppErrorsConfigData import com.fankes.apperrorstracking.data.AppErrorsRecordData import com.fankes.apperrorstracking.data.ConfigData @@ -410,7 +411,7 @@ object FrameworkHooker : YukiBaseHooker() { runCatching { YLog.error( msg = appErrorsInfo.stackTrace, - tag = "AppErrorsTracking", + tag = PROJECT_NAME, env = YLog.EnvType.LOGD ) } diff --git a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt index 639c0816..b366c9d3 100644 --- a/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt +++ b/module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDetailActivity.kt @@ -33,6 +33,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import com.fankes.apperrorstracking.R import com.fankes.apperrorstracking.bean.AppErrorsInfoBean +import com.fankes.apperrorstracking.const.PROJECT_NAME import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.data.factory.bind import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDetailBinding @@ -124,7 +125,7 @@ class AppErrorsDetailActivity : BaseActivity() { binding.printIcon.setOnClickListener { YLog.error( msg = appErrorsInfo.stackTrace, - tag = "AppErrorsTracking", + tag = PROJECT_NAME, env = YLog.EnvType.LOGD ) toast(locale.printToLogcatSuccess) diff --git a/settings.gradle.kts b/settings.gradle.kts index 29cfc72d..bd355137 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -34,7 +34,7 @@ gropify { } android { existsPropertyFiles(".secret/secret.properties") - includeKeys("GITHUB_CI_COMMIT_ID", "APP_CENTER_SECRET") + includeKeys("GITHUB_CI_COMMIT_ID", "APP_CENTER_SECRET", "project.name") // 手动指定类型,防止一些特殊 "COMMIT ID" 被生成为数值 keyValuesRules("GITHUB_CI_COMMIT_ID" to ValueRule(String::class)) } @@ -42,4 +42,4 @@ gropify { rootProject { common { isEnabled = false } } } rootProject.name = "AppErrorsTracking" -include(":module-app", ":demo-app") \ No newline at end of file +include(":module-app", ":demo-app")