fix: 修复启动时QQ小游戏获取WebView的默认UserAgent导致的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/352547/?project=22

This commit is contained in:
叶子维
2024-10-08 18:03:19 +08:00
parent ff96eaafee
commit dc96f2274f
2 changed files with 48 additions and 0 deletions

View File

@ -49,6 +49,7 @@ class GhTransform(var project: Project) : Transform() {
mTransformHelper.addTransformer(RoomTransformer())
mTransformHelper.addTransformer(ActivityTransformer())
mTransformHelper.addTransformer(AppCompatEditTextTransformer())
mTransformHelper.addTransformer(MiniGameWebViewTransformer())
}
/**

View File

@ -0,0 +1,47 @@
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 MiniGameWebViewTransformer : Transformer {
private val classPool = ClassPool.getDefault()
override fun getModifyClassName(): String {
return "QUAUtil"
}
override fun modifyClass(filePath: String, inputStream: InputStream): CtClass? {
if (filePath.contains(getModifyClassName())) {
println("发现 QUAUtil")
val classFile = ClassFile(DataInputStream(BufferedInputStream(inputStream)))
val ctClass = classPool.get(classFile.name)
if (ctClass.isFrozen) {
ctClass.defrost()
}
// 使用 try catch 包裹找到的第一个 getSystemUA 方法 (若能找到的话)
try {
val ctMethod = ctClass.getDeclaredMethod("getSystemUA")
val body = "{ if (systemUA != null) { return systemUA; } systemUA = java.net.URLEncoder.encode(System.getProperty(\"http.agent\"), \"UTF-8\"); return systemUA; }"
ctMethod.setBody(body)
println("修改 getSystemUA 方法")
} catch (e: NotFoundException) {
e.printStackTrace()
}
return ctClass
}
return null
}
}