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