關於Android Gradle你需要知道這些(3)

Jensen95發表於2018-01-28

前言

通過上兩篇文章,我們大概知道了Groovy,Gradle在Android專案構建中的一些基本的配置和其作用,接下來就是我們真正實踐的時刻,我們通過一個簡單的外掛的實現,來將前兩篇中的點串起來,再次回顧熟悉Groovy語言,通過一個簡單的demo跑通這個外掛實現流程。建立一個外掛,併發布到本地maven倉庫。然後在我們的專案中運用我們的外掛,呼叫相關的task。

Gradle外掛Hello World

之前在自己學習gradle的時候,網上的資料本身相對較少,再就有些博主略過了一些細節,導致了很多部落格中給出的例子,當我們自己實際去實踐的時候,自己反倒無法跑起來,這裡對於建立一個簡單的gradle外掛,進行了步驟的切分,對於每一個步驟進行較為詳細的講解。

  • Task

在Gradle檔案中,我們可以根據自己的需求寫一些task,其後的引數為task指定相應的名稱

task("Test") {
    println("Hello world")
}
複製程式碼
  • Plugin

在Build檔案中,我們可以實現一個簡單的Gradle外掛,通過實現Plugin介面,並實現其apply方法,這裡在apply方法中列印出一個Hello world

class MyPlugin implements Plugin<Project> {
    @Override
    void apply(Project target) {
        println("Hello world")
    }
}
複製程式碼

在Build檔案中寫,顯然無法讓其複用,如果複用,我們就需要將其獨立出來,如何來將其寫成一個獨立的外掛呢?我們可以通過AndroidStudio來進行外掛的開發,但是由於AndroidStudio沒有給予很好的支援,因此,可能需要我們去手動的刪除一些檔案,然後按照正常的外掛目錄重新建立專案。

1. 建立一個Java Library Module

這裡,我們新建一個Module,並取名firstplugin。

預設目錄結構

2. 刪除部分檔案目錄

將Java檔名稱改為groovy (因為,我們的demo專案中不需要Java程式碼,因此,可以將其替換為groovy。)。刪除libs目錄

刪除檔案後

3. 構建配置

原build檔案

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

複製程式碼

因為我們要支援對於Groovy的編譯支援,所以要新增一些Groovy相關的內容。

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    mavenCentral()
}

複製程式碼

執行build檔案後,我們在進行開發的時候,就可以進行自動提示幫助我們提升開發效率。

4. HelloWorld外掛開發

建立Groovy檔案,進行外掛程式碼的開發。這裡我們命名為FirstPlugin .

package com.example;
import org.gradle.api.Plugin
import org.gradle.api.Project

class FirstPlugin implements Plugin<Project> {
    @Override
    void apply(Project target) {
        target.task("TestTask") {
            println("Hello world")
        }
    }
}
複製程式碼

當前目錄狀況

5. 配置外掛資訊

在Src目錄下新增resources資料夾,建立一級目錄,META-INF,在其下建立二級目錄,grale-plugins,然後建立一個檔案。命名方式,外掛名稱+properties字尾。

這裡我們的檔名是com.example.firstplugin.properties

implementation-class=com.example.FirstPlugin
複製程式碼

裡面用來指定我們的外掛實現類。

當前目錄結構

6. 釋出到本地倉庫

在Build檔案中新增傳至本地mavenCentral的程式碼

//根據自己需求來配置
group = 'com.jensen.plugin'
//版本資訊
version = '1.0.0'

uploadArchives {
    repositories {
        mavenDeployer {
            //本地倉庫地址
            repository(url: uri('/Users/chenjensen/Desktop/repo'))
        }
    }
}
複製程式碼

在Gradle task中執行uploadArchives,即可看到在本地的repo中產生的依賴。

執行該task

7. 應用到專案中

在Project的build檔案中新增

    repositories {
        jcenter()
        //配置maven地址
        maven {
            url uri('/Users/chenjensen/Desktop/repo')
        }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        //指定外掛的路徑
        classpath 'com.jensen.plugin:firstplugin:1.0.0'
    }
複製程式碼

在我們的app的project中應用我們的外掛

apply plugin: 'com.example.firstplugin'
TestTask
複製程式碼

執行控制檯列印出執行資訊.

Hello world
複製程式碼

總結

通過這一個流程,我們可以寫出來一個簡單的Gradle外掛,對於具體更深入的功能,我們可以自己來根據自己的需求定製自己的外掛,去寫相應的task。通過本篇,主要是熟悉流程,接下來的第四篇,將會著重於如何寫一個功能更豐富的外掛,併發布到Jcenter中,應用到我們的專案之中。

相關文章