Booster 5.0 Transform 组件 bug 修复

412 阅读1分钟

因为宿主app 升级到AGP8的缘故,Booster 需要升级到5.0版本, 该版本 transform 实现 有部分问题 ,这里给出临时性的解决方案

获取不到gradle.properties 中的值

image.png

该bug 是因为 新版本Booster 中 对这个函数 没有做具体实现,之前的老版本是有的

之前的老版本实现在这里:

image.png

有兴趣的 可以看下Booster的老版本 如何将实现 接到这里的,新版本 这个函数没有被调用到,导致TransformContext中 我们取不到配置的值了,

这里给出一个临时性的解决方案

/**
 * 5.0 booster的这个方法取不到配置文件的值 所以用新方法来取
 */
inline fun <reified T> TransformContext.getProperty2(key: String, defaultValue: T): T {
    val file = projectDir.parentFile.file("gradle.properties")
    val p = Properties()
    val s = file.inputStream()
    p.load(s)
    val value = p.getProperty(key) ?: return defaultValue
    s.close()
    return when (T::class) {
        Int::class -> value.toIntOrNull() as? T ?: defaultValue
        Long::class -> value.toLongOrNull() as? T ?: defaultValue
        Boolean::class -> value.toBoolean() as T
        Double::class -> value.toDoubleOrNull() as? T ?: defaultValue
        Float::class -> value.toFloatOrNull() as? T ?: defaultValue
        String::class -> value as T
        else -> defaultValue
    }
}

大家基于Booster写插件时 自行扩展一下就可以, 因为Context中 我们获取不到对应的Project或者Varint,逼不得以 我们只能利用projectDir 的父path 来直接读取文件

java17 与 javassist的适配

一般而言,升级Booster的 应该会顺手升级下kotlin 2.0 ,然后可能会被迫 升级java17 来编译你的工程 此时你的字节码都是java17的了 而默认Booster的javassist 版本过低 无法支持java17的字节码修改

但是maven依赖吗,都是默认取高版本的,所以只要我们自己多添加一个高版本依赖即可

image.png