Andriod Gradle Plugin3.5 开始进行了一系列的重构,一些原来在 3.5 中的实验方案,在 3.6 版本中开始默认启用,所以,3.6 对于大多数 Gradle 插件来说,简直就是噩梦一样的存在,Booster 的一些模块和特性也受到了影响,如:

  1. booster-aapt2
  2. booster-task-compression-cwebp
  3. booster-task-compression-pngquant
  4. booster-transform-r-inline

Booster 2.0.0 版本中,所有模块和特性已完全支持 Android Gradle Plugin 4.0,本次更新内容如下:

  1. 修复 BoosterAndroid Gradle Plugin 3.5 版本的 bug

  2. 适配 Android Gradle Plugin 3.6 & 4.0

  3. 重构 TransformerVariantProcessor 的加载

    • Transformer 支持构造方法传递 ClassLoader,该特性主要用于支持除 ASMJavassist 以外的其它字节码框架的集成,如 Apache BCEL

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      @AutoService(Transformer::class)
      class BcelTransformer(val classLoader: ClassLoader) : Transformer {

      // 加载自定义 ClassTransformer
      private val transformers = ServiceLoader.load(ClassTransformer::class.java, classLoader).sortedBy {
      it.javaClass.getAnnotation(Priority::class.java)?.value ?: 0
      }

      override fun onPreTransform(context: TransformContext) {
      this.transformers.forEach { transformer ->
      transformer.onPreTransform(context)
      }
      }

      override fun transform(context: TransformContext, bytecode: ByteArray): ByteArray {
      TODO()
      }

      override fun onPostTransform(context: TransformContext) {
      this.transformers.forEach { transformer ->
      transformer.onPostTransform(context)
      }
      }
      }
    • VariantProcess 支持构造方法传递 Project,例如:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      @AutoService(VariantProcessor::class)
      class MyVariantProcessor(val project : Project) : VariantProcessor {

      init {
      // TODO 访问 project 实例
      }

      override fun process(variant: BaseVariant) {
      // TODO
      }

      }

更多详情,请参考:深入理解 Booster