All Projects → goodbranch → Android-GradlePlugin-Demo

goodbranch / Android-GradlePlugin-Demo

Licence: Apache-2.0 License
Android Studio 自定义 Gradle Plugin

Programming Languages

groovy
2714 projects
java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Android-GradlePlugin-Demo

DexHelper
Gradle Plugin to analyze per-dex with Android assemble command.
Stars: ✭ 19 (-29.63%)
Mutual labels:  gradle
swaggerhub-gradle-plugin
Gradle plugin for SwaggerHub
Stars: ✭ 14 (-48.15%)
Mutual labels:  gradle
connection checker
Android library for checking the internet connectivity of a device.
Stars: ✭ 26 (-3.7%)
Mutual labels:  gradle
gradle-localization-plugin
Gradle plugin for automating the download process of localization files.
Stars: ✭ 19 (-29.63%)
Mutual labels:  gradle
dagger2-kotlin
dagger2,querydsl kotlin 1.5.x annotation processor, gradle 7.x
Stars: ✭ 56 (+107.41%)
Mutual labels:  gradle
base-android
🏗 Collection of common utility classes and setup I use in my Android apps
Stars: ✭ 47 (+74.07%)
Mutual labels:  gradle
Zucker
An easier way to automatically calculate the size of AAR in apk based on APP module
Stars: ✭ 76 (+181.48%)
Mutual labels:  gradle
spring-boot-angular2-starter
Starter application. Spring Boot, Angular 2, TypeScript, Gulp, Gradle, SCSS.
Stars: ✭ 35 (+29.63%)
Mutual labels:  gradle
spark-gradle-template
Apache Spark in your IDE with gradle
Stars: ✭ 39 (+44.44%)
Mutual labels:  gradle
OkOne
基于okhttp库的网络性能优化框架
Stars: ✭ 88 (+225.93%)
Mutual labels:  gradle
gradle-aem-multi
Example Multi-Module AEM application built by Gradle Build System
Stars: ✭ 31 (+14.81%)
Mutual labels:  gradle
gradle-jenkins-jobdsl-plugin
A plugin for Gradle to manage Jenkins Job DSL projects.
Stars: ✭ 48 (+77.78%)
Mutual labels:  gradle
static-code-analysis-plugin
A plugin to simplify Static Code Analysis on Gradle. Not restricted to, but specially useful, in Android projects, by making sure all analysis can access the SDK classes.
Stars: ✭ 36 (+33.33%)
Mutual labels:  gradle
gradle-nunit-plugin
A gradle plugin for launching NUnit tests
Stars: ✭ 17 (-37.04%)
Mutual labels:  gradle
gradle-helm-plugin
A Gradle plugin for building, publishing and managing Helm charts.
Stars: ✭ 42 (+55.56%)
Mutual labels:  gradle
karibu10-helloworld-application
Karibu-DSL HelloWorld application in Vaadin 14
Stars: ✭ 14 (-48.15%)
Mutual labels:  gradle
idiomatic-gradle
How do I idiomatically structure a large build with Gradle 7.2+?
Stars: ✭ 129 (+377.78%)
Mutual labels:  gradle
SetupBuilder
Gradle plugin for building setups for different platforms.
Stars: ✭ 75 (+177.78%)
Mutual labels:  gradle
Entitas-Java
Entity Component System (ECS) in Java 8
Stars: ✭ 37 (+37.04%)
Mutual labels:  gradle
gatling-gradle-plugin-demo
Showcase of the Gatling Plugin for Gradle
Stars: ✭ 17 (-37.04%)
Mutual labels:  gradle

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<Project> {
  @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<Project> {
  @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 deployer
uploadArchives {
  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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].