Android 自定義 grdle 外掛(一)
阿新 • • 發佈:2021-06-18
重新學習一下自定義gradle外掛,搞Android開發的要想搞些騷操作免不了需要用到自定義gradle這個武器,例如資源整理,asm插樁,程式碼檢測等等。
直入主題,開始說明步驟。
- 建立一個測試Android 專案
- 在改專案中建立一個Android Module,然後更改對應library的build.gradle檔案,修改後內容如下
- 然後就是整合最基本的在對應的src資料夾下建立一個kotlin檔案寫對應的實現,這裡整合最基本的plugin類,具體實現如下
package com.xpj.firstgradlelibrary import com.android.build.gradle.AppExtension import com.android.build.gradle.BaseExtension import com.android.build.gradle.internal.tasks.factory.dependsOn import org.gradle.api.Plugin import org.gradle.api.Project import java.io.File import java.text.SimpleDateFormat import java.util.* /** * author : xpj * date : 6/18/21 11:13 AM * description : */ class XPJFirstPlugin : Plugin<Project> { override fun apply(project: Project) { // todo 這裡的方法是吧自己加到assemble之前的task,構建依賴樹 //將MyFirstPlugin新增到構建樹 val android = project.extensions.findByType(BaseExtension::class.java) (android as AppExtension).applicationVariants.all { //將MyFirstPlugin task新增到assemble task前 //assemble依賴MyFirstPlugin的意思是說assemble執行前先執行MyFirstPlugin it.assembleProvider.dependsOn(XPJ_PLUGIN_NAME) } project.tasks.create(XPJ_PLUGIN_NAME) { task -> task.group = XPJ_PLUGIN_GROUP println("我在自定義plugin裡面,改變之後的。") File("${project.projectDir.path}/IMOUT.txt").apply { writeText("Hello World! AAAA BBB CCC\nPrinted at: ${SimpleDateFormat("HH:mm:ss").format(Date())}") } // 這裡因為dolast在執行的時候並沒有生成檔案 task.doLast { File("${project.projectDir.path}/myFirstGeneratedFile.txt").apply { writeText("Hello World! AAAA BBB CCC\nPrinted at: ${SimpleDateFormat("HH:mm:ss").format(Date())}") } } } } }
- 這裡寫好之後在對應的build.gradle下面執行我們的上傳task這時候如果成功就會在本地或者maven生成對應的包,包含maven的形式,例如pom檔案xml檔案啥的
- 在app工程裡面引用,首先在project下面增加對應的引用和依賴
- 在app 專案下的build引用