From 40747a81ea7b8f1c3e8a6a0a37b5e3b3b4f873a7 Mon Sep 17 00:00:00 2001 From: Kitsune Date: Sun, 16 Mar 2025 02:30:46 +0800 Subject: [PATCH] feat: support share errors stacktrace with file --- module-app/src/main/AndroidManifest.xml | 10 ++++++++ .../apperrorstracking/data/ConfigData.kt | 12 ++++++++++ .../errors/AppErrorsDetailActivity.kt | 20 ++++++++++++++-- .../ui/activity/main/MainActivity.kt | 1 + .../src/main/res/layout/activity_main.xml | 24 +++++++++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 2 ++ module-app/src/main/res/values/strings.xml | 2 ++ module-app/src/main/res/xml/file_paths.xml | 5 ++++ 8 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 module-app/src/main/res/xml/file_paths.xml diff --git a/module-app/src/main/AndroidManifest.xml b/module-app/src/main/AndroidManifest.xml index b7d4b7f..bb3f20c 100644 --- a/module-app/src/main/AndroidManifest.xml +++ b/module-app/src/main/AndroidManifest.xml @@ -117,5 +117,15 @@ + + + + \ 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 366acec..f485911 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) + /** 分享时使用文件 */ + val SHARE_WITH_FILE = PrefsData("_share_with_file", false) + /** 当前实例 - [Context] or [PackageParam] */ private var instance: Any? = null @@ -216,4 +219,13 @@ object ConfigData { set(value) { putBoolean(ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG, value) } + + /** + * 是否以文件方式分享 + */ + var isShareWithFile + get() = getBoolean(SHARE_WITH_FILE) + set(value) { + putBoolean(SHARE_WITH_FILE, value) + } } \ 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 afd5815..d482c7a 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 @@ -27,6 +27,7 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.widget.TextView +import androidx.core.content.FileProvider import androidx.core.view.isGone import androidx.core.view.isVisible import com.fankes.apperrorstracking.R @@ -47,6 +48,7 @@ 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 java.io.File class AppErrorsDetailActivity : BaseActivity() { @@ -143,8 +145,21 @@ class AppErrorsDetailActivity : BaseActivity() { binding.shareIcon.setOnClickListener { StackTraceShareHelper.showChoose(context = this, locale.shareErrorStack) { sDeviceBrand, sDeviceModel, sDisplay, sPackageName -> startActivity(Intent.createChooser(Intent(Intent.ACTION_SEND).apply { - type = "text/plain" - putExtra(Intent.EXTRA_TEXT, appErrorsInfo.stackOutputShareContent(sDeviceBrand, sDeviceModel, sDisplay, sPackageName)) + val content = appErrorsInfo.stackOutputShareContent(sDeviceBrand, sDeviceModel, sDisplay, sPackageName) + if (ConfigData.isShareWithFile) { + type = "application/octet-stream" + runCatching { + val file = File.createTempFile("app_errors_stacktrace_", ".log", cacheDir) + file.deleteOnExit() + file.writeText(content) + putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this@AppErrorsDetailActivity, "$packageName.provider", file)) + }.onFailure { + toast(msg = "Create temp file failed") + } + } else { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, content) + } }, locale.shareErrorStack)) } } @@ -194,6 +209,7 @@ class AppErrorsDetailActivity : BaseActivity() { } override fun onBackPressed() { + super.onBackPressed() intent?.removeExtra(EXTRA_APP_ERRORS_INFO) finish() } 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 0ce13be..3db957b 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 @@ -99,6 +99,7 @@ class MainActivity : BaseActivity() { binding.onlyShowErrorsInFrontSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_FRONT) 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.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) { onInitialize { binding.mgrAppsConfigsTemplateButton.isVisible = it } onChanged { reinitialize() } diff --git a/module-app/src/main/res/layout/activity_main.xml b/module-app/src/main/res/layout/activity_main.xml index 36439ac..e24eca9 100644 --- a/module-app/src/main/res/layout/activity_main.xml +++ b/module-app/src/main/res/layout/activity_main.xml @@ -298,6 +298,30 @@ android:textColor="@color/colorTextDark" android:textSize="12sp" /> + + + + 系统构建 ID APP 包名 其它必要信息 + 以文件方式分享异常堆栈 + 使用文件的方式代替文本分享异常堆栈 \ 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 fa9413e..0edadee 100644 --- a/module-app/src/main/res/values/strings.xml +++ b/module-app/src/main/res/values/strings.xml @@ -160,4 +160,6 @@ System Build ID App Package Name Other Requirement + Share errors stacktrace with file + Share errors stacktrace using files instead of text diff --git a/module-app/src/main/res/xml/file_paths.xml b/module-app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..e6659d9 --- /dev/null +++ b/module-app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file