diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 245502e039..da07ba87a5 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -5,7 +5,6 @@ package com.zhjt.mogo_core_function_devatools import android.app.Activity import android.app.Application import android.content.Context -import android.util.Log import android.view.View import android.view.ViewGroup import com.alibaba.android.arouter.facade.annotation.Route @@ -13,7 +12,6 @@ import com.alibaba.android.arouter.launcher.ARouter import com.mogo.commons.AbsMogoApplication import com.mogo.commons.debug.DebugConfig import com.mogo.eagle.core.data.EnvConfig -import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig.isShowRouteStrategy import com.mogo.eagle.core.data.constants.MogoServicePaths @@ -60,10 +58,8 @@ import com.zhjt.mogo_core_function_devatools.binding.BindingCarManager import com.zhjt.mogo_core_function_devatools.block.MoGoBlockProviderImpl import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager -import com.zhjt.mogo_core_function_devatools.exam.ExamControlWindow import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl -import com.zhjt.mogo_core_function_devatools.logcat.CrashLogAnalyticsManager import com.zhjt.mogo_core_function_devatools.logcat.MoGoLogRecordProviderImpl import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager import com.zhjt.mogo_core_function_devatools.lookaround.MoGoLookAroundProviderImpl @@ -91,11 +87,7 @@ import com.zhjt.service.chain.ChainLog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import java.io.BufferedReader import java.io.File -import java.io.FileReader -import java.io.IOException -import java.lang.StringBuilder import java.lang.ref.WeakReference import java.util.concurrent.ConcurrentHashMap @@ -250,26 +242,6 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener { val crashDir = File(it.getExternalFilesDir(null), "crash") if(crashDir.exists() && crashDir.canExecute() && crashDir.listFiles()?.isNotEmpty() == true){ it.lifeCycleScope.launch(Dispatchers.IO){ - crashDir.listFiles()?.forEach {crash-> - val file = File(crash.absolutePath) - try { - BufferedReader(FileReader(file)).use { reader -> - var line: String? - //读取读取文件内容并打印 - while (reader.readLine().also { line = it } != null) { - line?.let { content-> - if(content.contains("Crash type")){ - CrashLogAnalyticsManager.crashLogAnalytics(content) - return@use - } - } - - } - } - } catch (e: IOException) { - e.printStackTrace() - } - } val startTime = crashDir.lastModified() - 60*1000 val endTime = if(System.currentTimeMillis() - crashDir.lastModified()>60*1000){ crashDir.lastModified() + 60*1000 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt index 8126279d6f..84ea124f4b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt @@ -24,6 +24,8 @@ object CrashLogAnalyticsManager { private const val crashEyeVersion = "eyeVersion" //鹰眼版本 private const val crashAppFlavor = "appFlavor" //渠道信息 private const val crashBranchHash = "branchHash" //Git Hash + private const val crashKeyMessage = "keyMessage" //崩溃核心信息 + private const val crashIsDriver = "isDriver" //是否是司机屏 /** * 崩溃统计 @@ -37,7 +39,7 @@ object CrashLogAnalyticsManager { * @param branchHash Git Hash */ private fun realCrashLogAnalytics(cosPath: String,type: String,plateNumber: String,carSn: String,mapVersion: String,eyeVersion: String, - appFlavor: String,branchHash: String){ + appFlavor: String,branchHash: String,keyMessage: String,isDriver: Boolean){ val crashLogParams = HashMap() crashLogParams[crashCosPath] = cosPath crashLogParams[crashType] = type @@ -47,14 +49,17 @@ object CrashLogAnalyticsManager { crashLogParams[crashEyeVersion] = eyeVersion crashLogParams[crashAppFlavor] = appFlavor crashLogParams[crashBranchHash] = branchHash + crashLogParams[crashKeyMessage] = keyMessage + crashLogParams[crashIsDriver] = isDriver MogoAnalyticUtils.track(crashLogRecord,crashLogParams) } /** * 崩溃统计 * @param crashType 崩溃类型 + * @param keyMessage 崩溃关键信息 */ - fun crashLogAnalytics(crashType: String){ + fun crashLogAnalytics(crashType: String,keyMessage: String){ val crashCosPath = StringBuilder() crashCosPath.append("CarPad/") if(DebugConfig.isDebug()){ @@ -66,10 +71,10 @@ object CrashLogAnalyticsManager { crashCosPath.append("/") crashCosPath.append(millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat())) crashCosPath.append("/") - realCrashLogAnalytics(crashCosPath.toString(),crashType.replace("Crash type:","").trim(), AppConfigInfo.plateNumber, + realCrashLogAnalytics(crashCosPath.toString(),crashType, AppConfigInfo.plateNumber, SharedPrefsMgr.getInstance().sn, CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "", - AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash) + AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash,keyMessage,AppConfigInfo.isDriver) } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt index 8a3c6045d0..8cd84928dc 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -14,7 +14,12 @@ import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager import com.mogo.commons.AbsMogoApplication import com.mogo.core.log.record.* import com.mogo.core.log.record.config.* +import com.mogo.core.log.record.config.crash.ANRCrash import com.mogo.core.log.record.config.crash.CrashConfig +import com.mogo.core.log.record.config.crash.CrashType +import com.mogo.core.log.record.config.crash.JavaCrash +import com.mogo.core.log.record.config.crash.NativeCrash +import com.mogo.core.log.record.config.crash.upload.ICrashFileUploader import com.mogo.core.log.record.config.extra.IExtraFileToUpload import com.mogo.core.log.record.config.extra.ToUploadFile import com.mogo.core.log.record.config.state.IStateProvider @@ -137,6 +142,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, builder.crashConfig( CrashConfig.Builder() .enabled(true) + .uploader(CrashLogUploader(context)) .crashDir(File(context.getExternalFilesDir(null), "crash")) .expireDuration(TimeUnit.DAYS.toMillis(3)) .javaCrash(true) @@ -156,6 +162,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, } }) LogcatManager.init(builder) + LogcatManager.uploadForCrashIfNeed() } override fun target(): Class { @@ -235,4 +242,33 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, override fun testAnrCrash() { SystemClock.sleep(15000) } + + private class CrashLogUploader(private val mContext: Context): ICrashFileUploader { + + override suspend fun upload( + type: CrashType, + crashTime: String, + file: File, + extra: Map? + ): Boolean { + try { + val keyMessage = when(type) { + JavaCrash -> extra?.get("java stacktrace") ?: extra?.get("backtrace") ?: "#" + NativeCrash -> extra?.get("backtrace") ?: "#" + ANRCrash -> extra?.get("backtrace") ?: "#" + } + val typeStr = when(type){ + JavaCrash -> "JavaCrash" + NativeCrash -> "NativeCrash" + ANRCrash -> "ANRCrash" + } + CrashLogAnalyticsManager.crashLogAnalytics(typeStr,keyMessage) + return true + } catch (t: Throwable) { + return false + } + } + + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml index 753b31b553..c5208c55b6 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml @@ -2,6 +2,7 @@