我可以在编译期间使用 Byte Buddy 转换已编译的 类 吗?

Can I transform compiled classes using Byte Buddy during compilation?

我需要在编译我的 Flutter 应用程序期间修改 Flutter 框架中的一些 class。 想一想,为此目的使用 byte-buddy-gradle-plugin 是个好主意。 将此添加到我的 app/build.gradle:

apply plugin: "net.bytebuddy.byte-buddy-gradle-plugin"
byteBuddy {
    transformation {
        plugin = "com.example.BuildPlugin"
        // classPath = ...
    }
}

BuildPlugin 在 compileDebugKotlin 任务上成功执行,但它只处理我的项目 classes。 有没有可能以某种方式将它指向 flutter.jar,也许使用 class 路径转换参数? 我尝试使用插件自述文件中的这一部分:

configurations {
  examplePlugin "foo:bar:1.0"
}

进行了一些修改,但出现“Gradle DSL 方法未找到:'examplePlugin()'”错误。

不幸的是,这与构建管道的工作方式并不兼容。您可以做的是使用 shade 插件将依赖项的代码复制到您的项目中,然后从那里进行处理。否则,Java 代理将是解决此问题的方法,但 Android 不支持它。

我使用 Android Transform API 和 Javassist 解决了这个问题。 请检查 my GitHub 如果有人有兴趣如何。