Android:自定义Gradle插件(1)

1. 自定义gradle插件的意义

打包流程大致分为:aapt把资源文件生成R.java文件,JavaCompiler把java文件编译成class文件,dex工具又把class文件搞成.dex文件。apkbuilder会把上述的文件打包成一个未签名的apk包。然后使用jarsinger和zipalign对apk进行签名和对齐。

自定义插件以后就可以对app的打包流程进行动态的干涉。比如:自动化签名、多渠道打包。再如:编译时注解(ButterKnife,Digger)、无痕埋点等等的事情都可以干涉或者干。

2.具体的自定义步骤

1)首先新建一个项目,并且在项目中新建一个module;把module下的所有文件都删掉;在module文件夹下新建一个build.gradle文件备用。

2)在module文件夹下新建一个src文件夹,在src文件夹下新建一个main文件夹,在main文件夹下分别新建groovy和resources文件夹。然后在groovy文件夹下新建一个包名,并在新建的包中新建一个 .groovy结尾的类。然后在resources文件夹下新建一个META-INF文件夹,然后再META-INF文件夹下新建一个gradle-plugins文件夹,并在此文件夹下新建一个后缀名为.properties的文件

Android:自定义Gradle插件(1)_第1张图片

3)下面给myplugin.properties 设置数据


// “=”号前面是固定写死的,后面是包名+类名  此处定义的是插件的头文件
implementation-class=com.qy.plugin.MyJavaPlugin

4)给build.gradle配置信息

apply plugin:'groovy'//加入groovy的能力
apply plugin:'maven'//导入maven插件

dependencies{

    //下面两个库必须导入
    implementation gradleApi()
    implementation localGroovy()

    //引入javassist库
    implementation 'org.javassist:javassist:3.20.0-GA'  //因为transform-api为下一节无痕埋点做准备
    implementation 'com.android.tools.build:transform-api:1.5.0'

}

repositories{
    jcenter()
}


//发布代码到本地
uploadArchives {

    repositories.mavenDeployer {
        repository(url: uri('../repo3'))//仓库路径,此处是项目目录下的repo文件夹
        pom.groupId = 'com.qy.plugin'//groupid自行定义,一般是包名
        pom.artifactId = 'three'//自行定义
        pom.version = '1.0.0'//版本名称
    }
}

5)定义MyJavaPlugin.groovy类

package com.qy.plugin

import org.gradle.api.Plugin
import org.gradle.api.Project

class MyJavaPlugin implements Plugin {

    /**
     * 点击 uploadArchives 的时候执行
     * @param project
     */
    @Override
    void apply(Project project) {
        println("我是马磊")
        System.out.println("我是马磊111");
    }
}

6)所有的准备工作都准备好了,接下来我们clean一下插件的module然后会在Gradle窗口会出现一个插件module的task

Android:自定义Gradle插件(1)_第2张图片

7) 找到有箭头标注的uploadArchives,然后双击会在app目录生成一个repo3文件夹

Android:自定义Gradle插件(1)_第3张图片

 到目前为止我们的插件算是生成好了。

8) 使用 (在项目使用 自定义gradle插件)

首先在project根目录下的build.gradle中配置参数

Android:自定义Gradle插件(1)_第4张图片

最后.在app module中使用 apply plugin:"myplugin"引用,这个名字是.properties的名字

Android:自定义Gradle插件(1)_第5张图片

完成!

测试:

执行  ./gradlew task  就可以看到我们在插件中打印的数据了。

 

 

 

 

你可能感兴趣的:(android)