можно ли заменить метод класса на ByteBuddy в Android?
public class DoSomething {
public void saySomething() {
Log.d("DoSomething", "Hello World");
}
}
public class ModifiedDoSomething {
public void saySomething() {
Log.d("ModifiedDoSomething", "Hello Injected");
}
}
new ByteBuddy()
.subclass(DoSomething.class)
.method(ElementMatchers.named("saySomething"))
.intercept(MethodDelegation.to(ModifiedDoSomething.class))
.make()
.load(DoSomething.class.getClassLoader(),
new AndroidClassLoadingStrategy(f))
.getLoaded()
.newInstance()
.saySomething();
Когда я пробую этот код, он выдает:
java.lang.IllegalArgumentException: None of [] allows for delegation from public void DoSomething.saySomething()
Когда я перехватываю с помощью FixedValue, он работает просто отлично, однако мне нужно было бы полностью заменить реализацию метода или, по крайней мере, перехватить начало, вызвать оригинал, а затем снова перехватить в конце. Это как-то возможно с ByteBuddy или есть альтернативы?
Спасибо