阿里P7移動互聯網架構師進階視頻(每日更新中)免費學習請點擊:https://space.bilibili.com/474380680html
本篇文章將如下兩個內容來介紹自動化構建系統Gradle:java
1.1.1,Gradleandroid
Gradle是一種構建工具,它使用一種基於Groovy的特定領域語言(DSL)來構建項目。不單單用於android 工程的構建。git
1.1.2,Android Plugin for Gradlegithub
這就是爲了編譯android 工程而開發的插件。下面就是申明Android Gradle 插件的位置。(build.gradle)api
1.2.1,gradle 各版本源碼地址架構
http://services.gradle.org/distributions/app
1.2.2, google 官網 gradle 插件 與 gradle 版本對照地址ide
https://developer.android.google.cn/studio/releases/gradle-plugin#updating-plugin工具
1.2.3,gradle 版本與google gradle 插件版本的區別
在gradle wrapper.properties 中寫的是 gradle 版本。
在build.gradle 中依賴的是 gradle插件版本。
咱們編譯Android項目時,若是咱們想拿到編譯時產生的Class文件,並在生成Dex以前作一些處理,咱們能夠經過編寫一個Transform
來接收這些輸入(編譯產生的Class文件),並向已經產生的輸入中添加一些東西。
咱們能夠經過Gradle插件來註冊咱們編寫的Transform
。註冊後的Transform
會被Gradle包裝成一個Gradle Task
,這個TransForm Task會在java compile Task
執行完畢後運行。
對於編寫Transform
的API, 咱們能夠經過引入下面這個依賴來使用:
先大體看一下Transform
的執行流程圖:
通常咱們使用Transform
會有下面兩種場景
接下來咱們就來看一下這些Transform API
吧 :
咱們編寫一個自定義的transform須要繼承Transform
,它是一個抽象類, 咱們這裏先看一下Transform
的抽象方法:
getName()
就是指定自定義的Transform
的名字。
Set<ContentType> getInputTypes()
是指明你自定義的這個Transform
處理的輸入類型,輸入類型共有如下幾種:
即分爲class文件或者java資源。class文件來自於jar或者文件夾。資源就是標準的java資源。
getScopes()
用來指明自定的Transform
的輸入文件所屬的範圍, 這是由於gradle是支持多工程編譯的。總共有如下幾種:
對於getScopes()
的返回,其實TransformManager
已經爲咱們定義了一些,好比:
若是一個Transform不想處理任何輸入,只是想查看輸入的內容,那麼只需在getScopes()
返回一個空集合,在getReferencedScopes()
返回想要接收的範圍。
它是Transform
的關鍵方法:
它是一個空實現,input
的內容將會打包成一個TransformInvocation
對象,由於咱們要想使用input
,咱們須要詳細瞭解一下TransformInvocation
參數。
咱們看一下這個類相關的API:
即咱們能夠經過TransformInvocation
來獲取輸入,同時也得到了輸出的功能。舉個例子,
上面這段代碼就是獲取jar的輸入,而後遍歷每個jar作一些自定義的處理。
咱們在作完自定義的處理後,若是想本身輸出一些東西怎麼辦? 好比一個class文件,就能夠經過TransformOutputProvider
來完成。好比下面這段代碼:
這段代碼就是在本工程(ImmutableSet.of(QualifiedContent.Scope.PROJECT)
)下產生一個目錄(Format.DIRECTORY
), 目錄的名字是(susion
),裏面的內容是TransformManager.CONTENT_CLASS
。
建立這個文件夾後,咱們就能夠向其中寫入一些內容,好比class文件。
咱們在瞭解transform api
後,咱們能夠編寫一個自定義的Transform
。可是咱們編寫的這個Transform
,如何在構建過程當中生效呢?咱們須要註冊它
在自定義插件中註冊它,而後在build.gradle
中apply
就能夠了。
其實若是你包含了你編寫的transform庫,咱們也能夠直接在build.gradle
中註冊:
參考:https://www.jianshu.com/p/031b62d02607
https://my.oschina.net/u/592116/blog/1851743
阿里P7移動互聯網架構師進階視頻(每日更新中)免費學習請點擊:https://space.bilibili.com/474380680
但願讀到這的您能轉發分享和關注一下我,之後還會持續分享阿里P7 Android高級架構進階知識點及解析,您的支持就是我最大的動力!!