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
Printed at: ${SimpleDateFormat("HH:mm:ss").format(Date())}")
            }
            // 这里因为dolast在执行的时候并没有生成文件
            task.doLast {
                File("${project.projectDir.path}/myFirstGeneratedFile.txt").apply {
                    writeText("Hello World! AAAA BBB CCC
Printed at: ${SimpleDateFormat("HH:mm:ss").format(Date())}")
                }
            }
        }
    }
}
  1. 这里写好之后在对应的build.gradle下面执行我们的上传task这时候如果成功就会在本地或者maven生成对应的包,包含maven的形式,例如pom文件xml文件啥的
  2. 在app工程里面引用,首先在project下面增加对应的引用和依赖
  3. 在app 项目下的build引用
原文地址:https://www.cnblogs.com/pjex/p/14899710.html