package com.mogo.launcher.lancet import android.content.ComponentName import android.content.Context import android.content.Intent import androidx.annotation.* import com.knightboost.lancet.api.Origin import com.knightboost.lancet.api.Scope.ALL import com.knightboost.lancet.api.Scope.LEAF import com.knightboost.lancet.api.annotations.* @Keep @Weaver @Group("crash_fix") class CrashFix { companion object { /** * 修正Android8.0及之后,后台启动Service引起的崩溃 * java.lang.IllegalStateException: Not allowed to start service Intent { * act=com.zhidao.cosupload.service.UPLOAD_ACTION cmp=com.mogo.launcher.f/com.zhidao.cosupload.service.UploadService }: app is in background uid UidRecord{6443b7b u0a404 LAST bg:+1m15s362ms idle change:idle procs:1 seq(0,0,0)} */ @JvmStatic @TargetClass("android.content.Context", scope = ALL) @TargetMethod(methodName = "startService") @ReplaceInvoke fun fixStartServiceCrash(context: Context, intent: Intent): ComponentName? { return try { return context.startService(intent) } catch (t: Throwable) { t.printStackTrace() null } } } /** * https://console.volcengine.com/apmplus/app/crash/detail/java/bb387ccd9c1a3c6ad2ede4e6f501a5e7?aid=302368&date=%7B%22granularity%22%3A%221h%22%2C%22duration%22%3A%22recently%22%2C%22range%22%3A%221w%22%7D&filters=%7B%22type%22%3A%22and%22%2C%22sub_conditions%22%3A%5B%7B%22dimension%22%3A%22os%22%2C%22op%22%3A%22in%22%2C%22type%22%3A%22expression%22%2C%22values%22%3A%5B%22Android%22%5D%7D%5D%7D&org_id=2100068151&os=Android&page_number=6&status=%5B%22pending%22%2C%22processing%22%2C%22solved%22%2C%22reopen%22%5D * java.lang.IllegalArgumentException: Invalid audio buffer size. * at android.media.AudioTrack.audioBuffSizeCheck(AudioTrack.java:1857) at android.media.AudioTrack.(AudioTrack.java:812) at android.media.AudioTrack.(AudioTrack.java:754) at android.media.AudioTrack.(AudioTrack.java:708) at android.media.AudioTrack.(AudioTrack.java:649) at com.aispeech.lite.tts.a.a(SourceFile:70) */ @Insert @TargetClass("com.aispeech.lite.tts.a") @TargetMethod(methodName = "a") fun fixAiSpeechCrash(context: Context, arg1: Int, arg2: Int) { try { Origin.callVoid() } catch (t: Throwable) { t.printStackTrace() } } }