mirror of
https://github.com/KitsunePie/AppErrorsTracking.git
synced 2025-09-04 10:15:18 +08:00
Added share error stack function in AppErrorsDetailActivity
This commit is contained in:
@@ -107,10 +107,29 @@ data class AppErrorsInfoBean(
|
|||||||
val dateTime get() = SimpleDateFormat.getDateTimeInstance().format(Date(timestamp)) ?: "DateTime not found"
|
val dateTime get() = SimpleDateFormat.getDateTimeInstance().format(Date(timestamp)) ?: "DateTime not found"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取异常堆栈模板
|
* 获取异常堆栈分享模板
|
||||||
* @return [String]
|
* @return [String]
|
||||||
*/
|
*/
|
||||||
val stackOutputContent
|
val stackOutputShareContent
|
||||||
|
get() = "Generated by AppErrorsTracking\n" +
|
||||||
|
"Project Url: https://github.com/KitsunePie/AppErrorsTracking\n" +
|
||||||
|
"===============\n" +
|
||||||
|
"[Device Brand]: ${Build.BRAND}\n" +
|
||||||
|
"[Device Model]: ${Build.MODEL}\n" +
|
||||||
|
"[Display]: ${Build.DISPLAY}\n" +
|
||||||
|
"[Android Version]: ${Build.VERSION.RELEASE}\n" +
|
||||||
|
"[API Version]: ${Build.VERSION.SDK_INT}\n" +
|
||||||
|
"[Package Name]: $packageName\n" +
|
||||||
|
"[Error Type]: ${if (isNativeCrash) "Native" else "Jvm"}\n" +
|
||||||
|
"[Crash Time]: $dateTime\n" +
|
||||||
|
"[Stack Trace]:\n" +
|
||||||
|
stackTrace
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取异常堆栈文件模板
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
val stackOutputFileContent
|
||||||
get() = "================================================================\n" +
|
get() = "================================================================\n" +
|
||||||
" Generated by AppErrorsTracking\n" +
|
" Generated by AppErrorsTracking\n" +
|
||||||
" Project Url: https://github.com/KitsunePie/AppErrorsTracking\n" +
|
" Project Url: https://github.com/KitsunePie/AppErrorsTracking\n" +
|
||||||
|
@@ -334,4 +334,10 @@ object LocaleString {
|
|||||||
|
|
||||||
/** @string Automatic generated */
|
/** @string Automatic generated */
|
||||||
fun crashProcess(vararg objArrs: Any) = R.string.crash_process.bind(*objArrs)
|
fun crashProcess(vararg objArrs: Any) = R.string.crash_process.bind(*objArrs)
|
||||||
|
|
||||||
|
/** @string Automatic generated */
|
||||||
|
val shareErrorStack get() = shareErrorStack()
|
||||||
|
|
||||||
|
/** @string Automatic generated */
|
||||||
|
fun shareErrorStack(vararg objArrs: Any) = R.string.share_error_stack.bind(*objArrs)
|
||||||
}
|
}
|
@@ -68,7 +68,7 @@ class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
|
|||||||
}
|
}
|
||||||
binding.copyIcon.setOnClickListener { copyToClipboard(appErrorsInfo.stackTrace) }
|
binding.copyIcon.setOnClickListener { copyToClipboard(appErrorsInfo.stackTrace) }
|
||||||
binding.exportIcon.setOnClickListener {
|
binding.exportIcon.setOnClickListener {
|
||||||
stackTrace = appErrorsInfo.stackOutputContent
|
stackTrace = appErrorsInfo.stackOutputFileContent
|
||||||
runCatching {
|
runCatching {
|
||||||
startActivityForResult(Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
|
startActivityForResult(Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
|
||||||
addCategory(Intent.CATEGORY_OPENABLE)
|
addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
@@ -77,6 +77,12 @@ class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
|
|||||||
}, WRITE_REQUEST_CODE)
|
}, WRITE_REQUEST_CODE)
|
||||||
}.onFailure { toast(msg = "Start Android SAF failed") }
|
}.onFailure { toast(msg = "Start Android SAF failed") }
|
||||||
}
|
}
|
||||||
|
binding.shareIcon.setOnClickListener {
|
||||||
|
startActivity(Intent.createChooser(Intent(Intent.ACTION_SEND).apply {
|
||||||
|
type = "text/plain"
|
||||||
|
putExtra(Intent.EXTRA_TEXT, appErrorsInfo.stackOutputShareContent)
|
||||||
|
}, LocaleString.shareErrorStack))
|
||||||
|
}
|
||||||
binding.appIcon.setImageDrawable(appIcon(appErrorsInfo.packageName))
|
binding.appIcon.setImageDrawable(appIcon(appErrorsInfo.packageName))
|
||||||
binding.appNameText.text = appName(appErrorsInfo.packageName)
|
binding.appNameText.text = appName(appErrorsInfo.packageName)
|
||||||
binding.appVersionText.text = appVersion(appErrorsInfo.packageName)
|
binding.appVersionText.text = appVersion(appErrorsInfo.packageName)
|
||||||
|
@@ -136,7 +136,7 @@ class AppErrorsRecordActivity : BaseActivity<ActivityAppErrorsRecordBinding>() {
|
|||||||
("${cacheDir.absolutePath}/temp").also { path ->
|
("${cacheDir.absolutePath}/temp").also { path ->
|
||||||
File(path).mkdirs()
|
File(path).mkdirs()
|
||||||
listData.takeIf { it.isNotEmpty() }?.forEach {
|
listData.takeIf { it.isNotEmpty() }?.forEach {
|
||||||
File("$path/${it.packageName}_${it.timestamp}.log").writeText(it.stackOutputContent)
|
File("$path/${it.packageName}_${it.timestamp}.log").writeText(it.stackOutputFileContent)
|
||||||
}
|
}
|
||||||
outPutFilePath = "${cacheDir.absolutePath}/temp_${System.currentTimeMillis()}.zip"
|
outPutFilePath = "${cacheDir.absolutePath}/temp_${System.currentTimeMillis()}.zip"
|
||||||
ZipFileTool.zipMultiFile(path, outPutFilePath)
|
ZipFileTool.zipMultiFile(path, outPutFilePath)
|
||||||
|
9
app/src/main/res/drawable/ic_share.xml
Normal file
9
app/src/main/res/drawable/ic_share.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="150dp"
|
||||||
|
android:height="150dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M579.2,736.9l-218,-118.9a149.3,149.3 0,1 1,0 -212l218,-118.9a149.3,149.3 0,1 1,40.9 74.9l-218,118.9a149.9,149.9 0,0 1,0 62.2l218,118.9a149.3,149.3 0,1 1,-40.9 74.9z"
|
||||||
|
android:fillColor="#ffffff"/>
|
||||||
|
</vector>
|
@@ -68,6 +68,15 @@
|
|||||||
android:src="@drawable/ic_export"
|
android:src="@drawable/ic_export"
|
||||||
android:tint="@color/colorTextGray"
|
android:tint="@color/colorTextGray"
|
||||||
android:tooltipText="@string/export_to_file" />
|
android:tooltipText="@string/export_to_file" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/share_icon"
|
||||||
|
android:layout_width="25dp"
|
||||||
|
android:layout_height="25dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:src="@drawable/ic_share"
|
||||||
|
android:tint="@color/colorTextGray"
|
||||||
|
android:tooltipText="@string/share_error_stack" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
|
@@ -71,4 +71,5 @@
|
|||||||
<string name="month_ago">月前</string>
|
<string name="month_ago">月前</string>
|
||||||
<string name="year_ago">年前</string>
|
<string name="year_ago">年前</string>
|
||||||
<string name="crash_process">エラープロセス「%1$s」</string>
|
<string name="crash_process">エラープロセス「%1$s」</string>
|
||||||
|
<string name="share_error_stack">エラースタックをシェアする</string>
|
||||||
</resources>
|
</resources>
|
@@ -71,4 +71,5 @@
|
|||||||
<string name="month_ago">月前</string>
|
<string name="month_ago">月前</string>
|
||||||
<string name="year_ago">年前</string>
|
<string name="year_ago">年前</string>
|
||||||
<string name="crash_process">异常进程 \"%1$s\"</string>
|
<string name="crash_process">异常进程 \"%1$s\"</string>
|
||||||
|
<string name="share_error_stack">分享异常堆栈</string>
|
||||||
</resources>
|
</resources>
|
@@ -71,4 +71,5 @@
|
|||||||
<string name="month_ago">月前</string>
|
<string name="month_ago">月前</string>
|
||||||
<string name="year_ago">年前</string>
|
<string name="year_ago">年前</string>
|
||||||
<string name="crash_process">異常進程 \"%1$s\"</string>
|
<string name="crash_process">異常進程 \"%1$s\"</string>
|
||||||
|
<string name="share_error_stack">分享異常堆棧</string>
|
||||||
</resources>
|
</resources>
|
@@ -71,4 +71,5 @@
|
|||||||
<string name="month_ago">月前</string>
|
<string name="month_ago">月前</string>
|
||||||
<string name="year_ago">年前</string>
|
<string name="year_ago">年前</string>
|
||||||
<string name="crash_process">異常進程 \"%1$s\"</string>
|
<string name="crash_process">異常進程 \"%1$s\"</string>
|
||||||
|
<string name="share_error_stack">分享異常堆棧</string>
|
||||||
</resources>
|
</resources>
|
@@ -71,4 +71,5 @@
|
|||||||
<string name="month_ago">月前</string>
|
<string name="month_ago">月前</string>
|
||||||
<string name="year_ago">年前</string>
|
<string name="year_ago">年前</string>
|
||||||
<string name="crash_process">異常進程 \"%1$s\"</string>
|
<string name="crash_process">異常進程 \"%1$s\"</string>
|
||||||
|
<string name="share_error_stack">分享異常堆棧</string>
|
||||||
</resources>
|
</resources>
|
@@ -71,4 +71,5 @@
|
|||||||
<string name="month_ago">month ago</string>
|
<string name="month_ago">month ago</string>
|
||||||
<string name="year_ago">year ago</string>
|
<string name="year_ago">year ago</string>
|
||||||
<string name="crash_process">Crash Process \"%1$s\"</string>
|
<string name="crash_process">Crash Process \"%1$s\"</string>
|
||||||
|
<string name="share_error_stack">Share error stack</string>
|
||||||
</resources>
|
</resources>
|
Reference in New Issue
Block a user