Transform 作为 Android gradle plugin 提供给开发者的 API,用于在 apk 构建过程中,对 class 字节码,resources 等文件内容进行插桩修改。
对于一些性能测试的插件,如果每次编译都修改字节码可能会使编译速度变慢,我们可以根据不同的编译环境开启和关闭是否要执行插桩。
方法一:BuildType 名称包含 release 不注册 Transform
class DoubleClickPlugin : Plugin<Project> {
override fun apply(project: Project) {
val flavorBuildType = getFlavorBuildType(project)
if (!flavorBuildType.toLowerCase(Locale.ROOT).contains("release")){
return
}
val config = DoubleClickConfig()
val appExtension: AppExtension = project.extensions.getByType(AppExtension::class.java)
appExtension.registerTransform(DoubleClickTransform(config))
}
//通过 startParameter 获取 FlavorBuildType
fun getFlavorBuildType(appProject: Project): String {
var flavorBuildType = ""
val arg = appProject.gradle.startParameter.taskRequests.getOrNull(0)?.args?.getOrNull(0)
if (!arg.isNullOrEmpty()) {
var index = arg.indexOf("assemble")
index = if (index > -1) index + "assemble".length else 0
flavorBuildType = arg.substring(index, arg.length)
}
if (flavorBuildType.isNotEmpty()) {
flavorBuildType = flavorBuildType.substring(0, 1).toLowerCase(Locale.ROOT) + flavorBuildType.substring(1)
}
return flavorBuildType
}
}
方法二:重写 Transform 的 applyToVariant 方法
class TestTransform : Transform(){
//如果返回 true 应用于指定的渠道,返回 false 则再次渠道不执行 transform 方法
override fun applyToVariant(variant: VariantInfo): Boolean {
return variant.buildTypeName.contains("release")
}
}