我可以在编译期间使用 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 如果有人有兴趣如何。
我需要在编译我的 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 如果有人有兴趣如何。