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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM