Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上是否可以使用ByteBuddy进行MethodDelegation拦截?_Java_Android_Byte Buddy - Fatal编程技术网

Java Android上是否可以使用ByteBuddy进行MethodDelegation拦截?

Java Android上是否可以使用ByteBuddy进行MethodDelegation拦截?,java,android,byte-buddy,Java,Android,Byte Buddy,在Android中是否可以用ByteBuddy替换类的方法 public class DoSomething { public void saySomething() { Log.d("DoSomething", "Hello World"); } } public class ModifiedDoSomething { public void saySomething() { Log.d("ModifiedDoSomething", "

在Android中是否可以用ByteBuddy替换类的方法

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中是可能的还是有其他选择


谢谢

您的
ModifiedDoSomething::saySomethign
方法不是
静态的
。如果要委托给实例方法,则需要运行
MethodDelegation.to(newmodifiedsomething())