使用 ByteBuddy 在 Android 中使用静态方法动态创建接口

Dynamically creating an Interface with static method in Android using ByteBuddy

我有这段代码,它在正常 Java 中与 byte buddy 一起工作正常,但它在 Android 中不起作用。

Class c = new ByteBuddy().makeInterface().name("TestInterface")
                    .defineMethod("test",String.class, Modifier.PUBLIC | Modifier.STATIC)
                    .intercept(FixedValue.value("Hello")).make()
                    .load(this.getClass().getClassLoader(),
                            new AndroidClassLoadingStrategy.Wrapping(context.getCacheDir())).getLoaded();
            Object o = c.getMethod("test").invoke(c);

在 运行 之后 Android 我收到错误 Cannot define non-virtual method test for a pre-java 8 interface type

我实际上检查了 Android 版本 24 及更高版本支持静态方法的接口,但我认为问题是当您查询 Android for 'java.version' 属性 它 returns 0 这让字节小伙伴认为我们是旧版本的 JVM。

Byte Buddy 针对从平台上下文和 Android 推断的 Java 版本进行验证,这确实太严格了。您可以通过设置禁用验证:

new ByteBuddy().with(TypeValidation.DISABLED)