Android Gradle Plugin

Android Gradle Plugin 有两种形式

  1. 直接在build.gradle/创建x.gradle中开发
  1. 实现Plugin重写build 过程

这里讲解怎么开发自定义插件

首先创建Gradle Plugin 工程

  • 为了方便测试先创建一个Android 工程,然后创建一个Android library Module工程
创建module
  • 删除如图中箭头所指目录和文件
删除无效目录
  • build.gradle中改成groovy方式
    apply plugin: 'groovy'    dependencies {        compile gradleApi()        compile localGroovy()    }

自定义Gradle Plugin,在main目录下创建groovy目录,这个目录下创建创建自己的代码

以删除log日志为例

Groovy 项目结构

1.继承 gradlePlugin,类的后缀不再是.java而是.groovy

class DelLogPlugin implements Plugin {  @Override  void apply(Project project) {    project.extensions.create('dellogExtension', DelLogExtension);    project.afterEvaluate {      //在gradle 构建完之后执行      project.logger.error("dellogExtension : " + project.dellogExtension.sourceDir);      def rootDir = project.projectDir.toString().plus(project.dellogExtension.sourceDir);      project.logger.error(rootDir);      DelLogUtil.delLog(new File(rootDir));    }    project.task('dellog', {      project.logger.error("dellogExtension : " + project.dellogExtension.sourceDir);      def rootDir = project.projectDir.toString().plus(project.dellogExtension.sourceDir);      project.logger.error(rootDir);      DelLogUtil.delLog(new File(rootDir));    })  }}

afterEvaluate是在gradle构建完后自动执行的,但task需要手动执行
一个插件中可以创建多个Task,如代码中的dellog,可以在控制台执行gradle -q dellog,也可以在gradle图形界面执行

图形界面执行task

2. 创建可以输入的Gradle 插件

很多时候我们需要输入参数,然后根据参数来做处理,处理如下:
project.extensions.create(...,...); 前面是Name,后面是Model,model中在gralde script 中键对上就可以。

class DelLogExtension {  String sourceDir;}class DelLogPlugin implements Plugin {  @Override  void apply(Project project) {    project.extensions.create('dellogExtension', DelLogExtension);    ......

然后在app 下的build.gradle中

dellogExtension.sourceDir = '/src'

dellogExtension {  sourceDir = '/src'}
使用输入

3. 在main下创建resources目录

src/main/resources/META-INF/gradle-plugins/com.branch.plugin.dellog.properties

xxx.properties 将来作为apply plugin: xxx 插件名称,这里的目录结构不能错,先有META-INF再有gradle-plugins

内容:

`implementation-class=com.branch.dellog.DelLogPlugin(继承Plugin的类,插件的入口类)`

4. 发布到本地仓库

在当前lib项目build.gradle中增加maven支持

apply plugin: 'maven'repositories {  mavenCentral()}

然后增加对应的maven deployer

//设置maven deployeruploadArchives {  repositories {    mavenDeployer {      //设置插件的GAV参数      pom.groupId = 'com.branch.plugin'      pom.artifactId = 'dellog'      pom.version = '1.0.0'      //文件发布到下面目录      repository(url: uri('../repo'))    }  }}

这里设置发布到上一个目录的repo中,同时可以查看gradle task中有一个名为uploadArchives的task

发布到本地task

执行就能在repo中查看到相应jar包

查看本地仓库

5. 使用本地仓库

在project 的build.gradle 中buildscript中增加本地仓库地址

buildscript {  repositories {    jcenter()    maven {      url uri("/repo")    }  }  dependencies {    classpath 'com.android.tools.build:gradle:2.2.2'    classpath 'com.branch.plugin:dellog:1.0.0'    // NOTE: Do not place your application dependencies here; they belong    // in the individual module build.gradle files  }}

然后在app 的build.gradle中增加plugin

apply plugin: 'com.branch.plugin.dellog'

所有这些配置正确后同步项目可在Gradle Console查看到日志

github demo

更多相关文章

  1. Android插件—H.A.X.M(硬件加速执行管理器)
  2. Android(安卓)AsyncTask基础知识整理
  3. Android创建服务之started service
  4. Android(安卓)build构建流程
  5. android使用implements ActionBar.TabListener的方式创建导航
  6. 查看android sqlite数据库常用操作
  7. Android——NDK开发配置遇到的问题
  8. cocos2d-x 3.2 移植到android
  9. Android(安卓)Material Design之CardView(卡片式布局)

随机推荐

  1. Android快速开发框架之xUtils---图片模块
  2. 利用adb工具android真机环境运行cpp(无需r
  3. android 自定义ButtonTab , ActivityGrou
  4. 关于android真机测试(linux系统下)
  5. 通过Android Studio3.5.3编译安装App失败
  6. 解决Error inflating class android.supp
  7. Android利用Jpush实现异地登陆下线
  8. Android 类加载机制以及基于类加载机制的
  9. 利用AS(3.0)工具将工程打包成jar
  10. WiFi流程