LiuYiGL
LiuYiGL
因为在xposed环境下,就存在两个不同的`classloader`,然后对象之间就会出现`CastException`异常。所以我目前的解决方法就是通过`Proxy`进行代理嘛。因为我的项目不包含混淆,我直接在模块下创建和宿主的方法相同的接口,然后通过`Proxy`实现这个接口,在代理对象调用这个接口时自动触发宿主对象中相同的方法。就不需要每次都写一堆条件代码了。 这里是我的`InvocationHandler `代码 ```kotlin // origin 是被代理对象 internal class ProxyHandler(private val origin: Any) : InvocationHandler { override fun invoke(proxy: Any?, method: Method, args: Array?): Any? { // 查找被代理对象的方法 origin.javaClass.method {...
这里是一个简单的例子,可以在任何包含依赖的地方执行这里的main方法测试 在第一个InvocationHandler 中哪怕我用到了 `superClass()` 表示搜索范围包含父类,但是很明显的,在用到关于`Any`的方法时异常了 ```kotlin import com.highcapable.yukihookapi.hook.factory.method import java.lang.reflect.InvocationHandler import java.lang.reflect.Method import java.lang.reflect.Proxy /** * 假设这个类是宿主中的一个类 */ class A { fun b(str: String) { println("这里是业务内容:$str") } } /** *...
> `findSuperOrThrow` 的方法只有在第一次找不到的情况下才会生效,`hasExtends` 方法的判断标准也是 `superclass != null && superclass != AnyClass`,所以应该不需要这样做,或者你遇到了这样的问题吗,在什么地方,请说明 你说的对,第一次找不到时才会执行 `findSuperOrThrow`,然后在`findSuperOrThrow`中判断是否设置了 `isFindInSuper` 并且 `hasExtends` 即 `superclass != null && superclass != AnyClass` ,然后才会递归搜索 但是如果第一次搜索是`Any`的子类,而要搜的方法是 `toString()`,这可能很蠢,但某种情况下应该存在这种需求 因为子类没有重写`toString()`,于是向父类查找,但是在 `findSuperOrThrow` 中因为...
> 我大概理解你的意思了,但是你这样修改并不严谨,你需要考虑到其它可能的情况,所以请先进行一次测试 确实,或许再添加一个 `superclass != null` 的情况会更严谨一些,因为存在动态生成一个没爹的类的可能,但是我考虑到在`你的find` 方法中已经存在了`null`处理,即`if (classSet == null) return@createResult mutableListOf()`,所以觉得这种判断有点多余。 其实或者说压根不需要任何`isFindInSuper`以外的判断,因为当`superclass == null`时,递归会在下一次搜索`classSet == null`时跳出,除非有`Any -> ClassA -> Any` 这种循环继承的鬼畜存在?