diff --git a/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/GhTransform.kt b/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/GhTransform.kt index 3121eb6aed..466ac0118f 100644 --- a/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/GhTransform.kt +++ b/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/GhTransform.kt @@ -49,6 +49,7 @@ class GhTransform(var project: Project) : Transform() { mTransformHelper.addTransformer(RoomTransformer()) mTransformHelper.addTransformer(ActivityTransformer()) mTransformHelper.addTransformer(AppCompatEditTextTransformer()) + mTransformHelper.addTransformer(MiniGameWebViewTransformer()) } /** diff --git a/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/transform/MiniGameWebViewTransformer.kt b/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/transform/MiniGameWebViewTransformer.kt new file mode 100644 index 0000000000..7be3fc8050 --- /dev/null +++ b/buildSrc/src/main/kotlin/com/gh/gamecenter/plugin/transform/MiniGameWebViewTransformer.kt @@ -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 + } + +} \ No newline at end of file