因为宿主app 升级到AGP8的缘故,Booster 需要升级到5.0版本, 该版本 transform 实现 有部分问题 ,这里给出临时性的解决方案
获取不到gradle.properties 中的值
该bug 是因为 新版本Booster 中 对这个函数 没有做具体实现,之前的老版本是有的
之前的老版本实现在这里:
有兴趣的 可以看下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依赖吗,都是默认取高版本的,所以只要我们自己多添加一个高版本依赖即可