Merge branch 'fix/vivo_crash' into 'dev'
fix: 修复在 vivo 的 Android 14 设备上点击剪贴板功能时的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/277509 See merge request halo/android/assistant-android!1677
This commit is contained in:
@ -6,10 +6,7 @@ import com.android.build.api.transform.Transform
|
||||
import com.android.build.api.transform.TransformInvocation
|
||||
import com.android.build.gradle.AppExtension
|
||||
import com.android.build.gradle.internal.pipeline.TransformManager
|
||||
import com.gh.gamecenter.plugin.transform.ActivityTransformer
|
||||
import com.gh.gamecenter.plugin.transform.DiskLruCacheTransformer
|
||||
import com.gh.gamecenter.plugin.transform.ExoSourceManagerTransformer
|
||||
import com.gh.gamecenter.plugin.transform.RoomTransformer
|
||||
import com.gh.gamecenter.plugin.transform.*
|
||||
import javassist.ClassPool
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.apache.commons.io.IOUtils
|
||||
@ -51,6 +48,7 @@ class GhTransform(var project: Project) : Transform() {
|
||||
mTransformHelper.addTransformer(DiskLruCacheTransformer())
|
||||
mTransformHelper.addTransformer(RoomTransformer())
|
||||
mTransformHelper.addTransformer(ActivityTransformer())
|
||||
mTransformHelper.addTransformer(AppCompatEditTextTransformer())
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,50 @@
|
||||
package com.gh.gamecenter.plugin.transform
|
||||
|
||||
import javassist.ClassPool
|
||||
import javassist.CtClass
|
||||
import javassist.NotFoundException
|
||||
import javassist.bytecode.ClassFile
|
||||
import java.io.BufferedInputStream
|
||||
import java.io.DataInputStream
|
||||
import java.io.InputStream
|
||||
|
||||
class AppCompatEditTextTransformer : Transformer {
|
||||
|
||||
private val classPool = ClassPool.getDefault()
|
||||
|
||||
override fun getModifyClassName(): String {
|
||||
return "AppCompatEditText"
|
||||
}
|
||||
|
||||
override fun modifyClass(filePath: String, inputStream: InputStream): CtClass? {
|
||||
if (filePath.contains(getModifyClassName())) {
|
||||
|
||||
System.out.println("发现 AppCompatEditText")
|
||||
|
||||
val classFile = ClassFile(DataInputStream(BufferedInputStream(inputStream)))
|
||||
val ctClass = classPool.get(classFile.name)
|
||||
|
||||
if (ctClass.isFrozen) {
|
||||
ctClass.defrost()
|
||||
}
|
||||
|
||||
// 使用 try catch 包裹找到的第一个 onTextContextMenuItem 方法 (若能找到的话)
|
||||
// https://sentry.shanqu.cc/organizations/lightgame/issues/277509
|
||||
try {
|
||||
val ctMethod = ctClass.getDeclaredMethod("onTextContextMenuItem")
|
||||
|
||||
val exceptionType: CtClass = ClassPool.getDefault().get("java.lang.Exception")
|
||||
val catchBody = "{ System.out.println(\$e); return false; }"
|
||||
ctMethod.addCatch(catchBody, exceptionType)
|
||||
|
||||
System.out.println("为 AppCompatEditText.onTextContextMenuItem 添加 try catch")
|
||||
} catch (e: NotFoundException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
return ctClass
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user