1. 程式人生 > 其它 >Android 自定義 grdle 外掛(一)

Android 自定義 grdle 外掛(一)

重新學習一下自定義gradle外掛,搞Android開發的要想搞些騷操作免不了需要用到自定義gradle這個武器,例如資源整理,asm插樁,程式碼檢測等等。

直入主題,開始說明步驟。

  1. 建立一個測試Android 專案
  2. 在改專案中建立一個Android Module,然後更改對應library的build.gradle檔案,修改後內容如下
  3. 然後就是整合最基本的在對應的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())}")
                }
            }
        }
    }
}
  1. 這裡寫好之後在對應的build.gradle下面執行我們的上傳task這時候如果成功就會在本地或者maven生成對應的包,包含maven的形式,例如pom檔案xml檔案啥的
  2. 在app工程裡面引用,首先在project下面增加對應的引用和依賴
  3. 在app 專案下的build引用