溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

入坑 Android Gradle 插件開發(一)

發布時間:2020-08-03 18:31:06 來源:網絡 閱讀:7241 作者:那些事情 欄目:移動開發

最近由于需要做一些功能,比如統計方法的執行時間,處理刪除一方法等。網上找了一圈,雖有有很多開源工具有類似的功能了,但是不夠靈活,所以想自己開發 Android Gradle 插件,于是研究了下如何開發 Android Gradle 插件。

僅自己的工程里面使用

如果是指自己使用的話,可以用下面的方法來快速開發一個插件。在 apk module 下面的 build.gradle 新增一段代碼

class DemoPlugin implements Plugin<Project> {
  @Override
  void apply(Project project) {
    println "=============================="
    println 'hello, DemoPlugin!'
    println "=============================="
  }
}
apply plugin: DemoPlugin

然后 執行一下 assembleDebug 命令,會在控制臺看到下面的打印。

==============================
hello, DemoPlugin!
==============================

到這里一個簡單的 gradle 插件就完成了。

希望開源發布出去,供大家使用

如果需要發布出去,那么需要新建一個 Module 了,在剛剛的 Demo Project 里面新建一個 Java Library Module 。建好 Module 后,我們需要進行一定的改造才可以開發 gradle 插件,改造的方法如下:

修改 build.gradle

修改剛剛新建的 Module 下面的 build.gradle 為下面的內容

//apply plugin: 'java-library'
apply plugin: 'groovy'

dependencies {
  compile gradleApi() //gradle sdk
  compile localGroovy() //groovy sdk
  implementation fileTree(dir: 'libs', include: ['*.jar'])
}

新建 src/main/groovy 目錄

由于插件是用 groovy 開發的,所有我們需要在 src/main 下面新建一個 groovy 目錄,groory 的源碼將在這個目錄( src/main/groovy) 下面。有一個小技巧是,如果 AS 給你新建了一個 src/main/java 目錄的話,建議你直接把 java 目錄名修改為 groovy 。

創建 Plugin 類

groovy 目錄創建好了以后,我們需要創建一個實現 Plugin 的類,然后通過 Plugin 接口里面的 apply 方法入口做我們后面想做的事情。這里有一個 demo 代碼片段:

// 源碼路徑為 src/main/groovy/com/xander/plugin/DemoPlugin.groovy
package com.xander.plugin

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

public class DemoPlugin implements Plugin<Project> {

  @Override
  void apply(Project project) {
    println "===================================="
    println "Hello DemoPlugin!!!"
    println "===================================="
  }
}

新建一個 properties 配置

剛剛我們新建了一個 Plugin 了,但是我們如何讓 AS 知道我們的插件是哪一個呢,這個時候我們就需要新建一個 properties 配置來告訴 AS。這個配置文件需要放在 src/main/resources/META-INF/gradle-plugins 目錄下面,如果沒有想要的目錄,需要自己創建。當目錄創建好以后,你可以新建一個 properties 配置了,需要特別注意的是,配置的文件名就是后面 build.gradle 里面的 apply plugin: 'xxx.xxx.xxx'。 在這里我新的配置的文件名是 com.xander.plugin。配置建好了,我們需要往里面寫入配置。你可以參考下面的配置。

implementation-class=com.xander.plugin.DemoPlugin

properties 里面的內容說白了就是一個個的鍵值對,這里面鍵是 implementation-class ,這個是固定的,用來告訴 AS 我們的 Plguin 的入口實現類,而值就是類的路徑,簡單說就是包名+類名。

到這里,改造就完成了,我們就有了一個 gradle 插件開發的環境。最后的 Module 結構如下

.
├── build.gradle
├── libs
├── plugin.iml
└── src
    └── main
        ├── groovy
        │   └── com
        │       └── xander
        │           └── plugin
        │               └── DemoPlugin.groovy
        └── resources
            └── META-INF
                └── gradle-plugins
                    └── com.xander.plugin.properties

上傳到 maven 庫

既然我們的插件是希望提供給別人用的,所以我們需要把我們的插件上傳到 maven 庫供大家下載使用。這個時候需要修改 plugin module 下面的 build.gradle 文件,可以參考下面的示例

//apply plugin: 'java-library'
apply plugin: 'groovy'
apply plugin: 'maven'

uploadArchives {
  repositories.mavenDeployer {
    repository(url: uri("../repos")) // repos 為本地的地址,后續可以替換為網路上的 maven 庫地址
    pom.groupId = "com.xander.plugin"
    pom.artifactId = "demoplugin"
    pom.version = "1.0.0"
  }
}

dependencies {
  compile gradleApi() //gradle sdk
  compile localGroovy() //groovy sdk
  implementation fileTree(dir: 'libs', include: ['*.jar'])
}

修改 build.gradle 文件后, sync 下就可以看到 uploadArchives task 了,執行 uploadArchives task 就會發布我們的插件了。如果在控制臺看到類似下面的 log 信息,一般就是上次成功了。

> Task :plugin_demo:compileJava NO-SOURCE
> Task :plugin_demo:compileGroovy UP-TO-DATE
> Task :plugin_demo:proce***esources NO-SOURCE
> Task :plugin_demo:classes UP-TO-DATE
> Task :plugin_demo:jar UP-TO-DATE
> Task :plugin_demo:uploadArchives

別人如何引用 gradle 插件

當我們的插件開發完成,并且也上傳到了 maven 庫了以后,別人如何使用我們開發的插件呢?

首先我們需要修改 project 根目錄下面的 build.gradle 文件

buildscript {

  repositories {
    maven { url uri("./repos") } // repos 為本地的地址,后續需要修改為發布的 maven 庫地址 
    google()
    jcenter()
  }

  dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files

    //格式為 --> group:module:version
    classpath 'com.xander.plugin:demoplugin:1.0.0'
  }
}

然后修改 apk module 下面的 build.gradle 文件,新增下面的一句命令就好了

// com.xander.plugin 為 resources/META-INF/gradle-plugins 下的 properties 文件名稱
apply plugin: 'com.xander.plugin'

到這里,插件的開發就介紹完了。

參考資料:

  1. 擁抱 Android Studio 之五:Gradle 插件開發
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女