如何解决无法拦截使用 Byte Buddy 和 Android Buddy 的 Android 视图方法调用我怎样才能做到这一点?
我想拦截android视图类方法调用。例如在视图类中有一个方法名 getHeight()。所以当我的代码 obj.getHeight() 调用时,我想拦截它并想返回一个任意值。
我可以拦截我自己的类方法调用。但不能用 android 视图类做到这一点。 我正在使用使用 Byte Buddy 的 Android Buddy。所以这是我的代码
object ViewMethodInterceptor {
@JvmStatic
fun intercept(@SuperCall originalMethodCall: Runnable): Int {
Log.i("mytag","Intercepted View Class getHeight ")
return 500;
}
}
@Transformation
class ViewTransformation : Plugin {
override fun apply(
builder: DynamicType.Builder<*>,typeDescription: TypeDescription,classFileLocator: ClassFileLocator
): DynamicType.Builder<*> {
return builder.method(ElementMatchers.named("getHeight"))
.intercept(MethodDelegation.to(ViewMethodInterceptor::class.java))
}
override fun matches(target: TypeDescription): Boolean {
return target.isAssignableto(View::class.java)
}
override fun close() {
// nothing to close
}
}
我从 MainActivity 的 onCreate 方法调用 getHeight() 方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。