zoukankan      html  css  js  c++  java
  • Android gradle plugin-transform简介

    参考

    https://sites.google.com/a/android.com/tools/tech-docs/new-build-system/transform-api

    https://www.jianshu.com/p/37df81365edf

    如何理解 Transform API

    https://juejin.im/post/6844903841230487560#heading-13

    【Android 修炼手册】Gradle 篇 -- Gradle 的基本使用

    https://www.jianshu.com/p/811b0d0975ef

    Android Gradle Plugin打包Apk过程中的Transform API

    https://juejin.im/post/6863276629029126158

    一起用Gradle Transform API + ASM完成代码织入

    https://mp.weixin.qq.com/s/jDSE24eSsme3JcMex97KnQ

    transform几个问题

    简介

    Android Gradle 工具在 1.5.0 版本后提供了 Transfrom API,允许第三方插件在编译过的class 文件转换为dex文件之前对其进行操作。

    目前 jarMerge、proguard、multi-dex、Instant-Run 都已经换成 Transform 实现。

    很多黑科技就是通过transform实现的,插件化框架Shadow就是使用的transform技术。

    Transform 是一个接口,实现此接口,并调用BaseExtension.registerTransform进行注册,BaseExtension的实现类是AppExtension。

    AppExtension android = project.extensions.getByType(AppExtension)
    
    android.registerTransform(new AJXTransform(project))

    transformTask的执行顺序

    每个注册的transform都会创建一个TransformTask与之对应。

    该方法在 javaCompile 之后调用, 会遍历所有的 transform,然后一一添加进 TransformManager。

    而TransformTask之间的顺序不是按照dependOn来指定的(当然在注册时可以传递依赖的transform),而是根据transform的输入输出类型确定顺序的,当然输入输出相同那么先后顺序就是注册的顺序。

    加完自定义的 Transform 之后,再添加 Proguard, JarMergeTransform, MultiDex, Dex 等 Transform。

    和注解处理器的区别

    他们其实都属于aop技术。

    l 在使用transform机制时,由于transform是运行在编译之后,所以此处会对class文件进行处理,如果生成代码是也是class文件(java字节码文件),一般会用asm、Javassist。

    l 而在注解处理器中,会在编译之前对java文件进行处理,如果要生成的也是java文件,之后会放到一起去编译,一般会用JavaPoet。

  • 相关阅读:
    在HTML中使用JavaScript
    网站发布流程
    React组件
    React渲染和事件处理
    Java IO(三)
    Java IO(二)
    Java IO(一)
    Java常用类库
    Java集合框架(四)
    Java集合框架(三)
  • 原文地址:https://www.cnblogs.com/muouren/p/13949091.html
Copyright © 2011-2022 走看看