我想拦截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;
}
}
这是 ViewTransformation 插件的代码。
@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() 方法。