天天看點

Gradle系列之Android Gradle插件

通過前面幾篇文章學習了 Gradle 基礎知識以及 Gradle 插件相關的知識,關于 Gradle 及其插件相關知識請先閱讀下面幾篇文章:

  • Gradle系列之初識Gradle
  • Gradle之Groovy基礎篇
  • Gradle系列之建構腳本基礎
  • Gradle系列之Gradle插件
  • Gradle系列之Java Gradle插件

學習 Gradle 的目的主要是為了更好的在 Android 開發中使用 Gradle,這篇文章的主要内容是 Android Gradle 插件的相關知識,主要内容如下:

  1. 了解 Android Gradle 插件
  2. Android Gradle 插件分類
  3. 使用 Android Gradle 插件
  4. Android Gradle 工程目錄
  5. Android Gradle 基本配置
  6. Android Gradle 任務

了解 Android Gradle 插件

顧名思義,Android Gradle 插件就是一個用于 Android 建構項目的一個 Gradle 插件,該插件有 Google Android 開發團隊開發,而且 Android 開發 IDE Android Studio 就采用 Gradle 建構項目,下面是 Android Gradle 插件的優勢:

  1. 友善重用代碼和資源;
  2. 可更友善的建立應用的衍生版本,如多管道打包;
  3. 配置友善。可以擴充,還可以自定義建構過程
  4. Android Studio 與 Gradle 深度融合

Android Gradle 插件分類

Android 插件的分類是根據 Android 工程的屬性進行分類的,Android 工程分為三類,具體如下:

  1. App 應用工程:可生成可運作的 apk ;
  2. Library 庫工程:可生成 aar 共其他 App 應用工程使用,使用方式和 jar 一樣,裡面有相關的 Android 資源檔案
  3. Test 測試工程:用于 App 應用過程或 Library 工程進行測試。

對應的就有三種不同的 Android Gradle 插件,三類插件分别是 App 插件、Library 插件和 Test 插件,其插件 id 如下:

//App插件id
com.android.application
//Library插件id
com.android.library
//Test插件
com.android.test
           

使用最多的肯定就是 App 插件和 Library 插件,使用這幾個插件在 Android Studio 中就可以建構 Android 工程了。

使用 Android Gradle 插件

Gradle 插件使用時以插件的 id 作為唯一辨別,如果是第三方的插件,還必須在 buildscript{} 中指定其 classpath,Android Gradle 插件就屬于第三方插件,使用時要指定其 classpath,Android Gradle 插件托管到 jcenter 上,是以使用時要指定對應倉庫,具體參考如下:

buildscript {
    //配置插件倉庫
    repositories {
        google()
        jcenter()
    }
    //配置依賴
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}
           

配置好第三方插件的倉庫和依賴,然後使用 apply 使用該插件,具體如下:

//使用App插件
apply plugin: 'com.android.application'

android {
    //編譯所依賴的Android SDK的版本
    compileSdkVersion 26
    //建構工具的版本
    buildToolsVersion '26.0.2'
    //...
}

dependencies {
    //...
}
           

在 Android 開發中一般将插件的倉庫和依賴配置到根項目下的 build.gradle 檔案中,其子 Module 項目将不需要在配置了,可直接使用,這裡僅僅是 App 插件的使用,當然 Libray 插件的使用和 Test 插件的使用也是一樣,使用時指定對應的 plugin id 即可。

Android Gradle 工程目錄

下面是 Android Studio 建立 Android 工程的 Module 的目錄,這也是 Android 工程的基本目錄結構,參考如下:

app
├─libs
├─proguard-rules.pro
├─build.gradle
└─src
    ├─androidTest
    │  └─java
    │   
    ├─main
    │  ├─AndroidManifest.xml
    │  ├─java
    │  └─res
    │     
    └─test
        └─java
           

上述目錄中 src 下面的 main、androidTest、test 是三個 SourceSet,main 表示 App 的源代碼及資源目錄,android 和 test 表示 Android 相關測試代碼目錄,此外 proguard-rules.pro 是目前項目的混淆檔案,libs 用于存放 jar、aar 等庫檔案,build。gradle 檔案用于目前配置檔案。

Android Gradle 基本配置

為了介紹 Android Gradle 插件基本配置,使用 Android Studio 建立一個 Android 項目,下面的 app 的一個配置檔案,具體如下:

//使用Android Gradle插件
apply plugin: 'com.android.application'
//android{}是Android工程配置的入口
android {
    /**
     * 指定編譯依賴的Android SDK的版本,同
     * compileSdkVersion android-26
     * android.compileSdkVersion = 26
     * android.compileSdkVersion = 'android-26'
     */
    compileSdkVersion 26
    //指定建構工具的版本,也可以使用屬性值buildToolsVersion設定其版本
    buildToolsVersion '26.0.2'
    /**
     * 預設配置,defaultConfig是一個ProductFlavor,可根據不同需求生成不同的Apk
     * 如果不自定義ProductFlavor進行單獨配置,則該productFlavor會采用預設配置生成Apk
     * 這些具體配置,如applicationID都是ProductFlavor的屬性
     */
    defaultConfig {
        //配置唯一包名
        applicationId "com.manu.androidgradleplugin"
        //最低支援的Android系統版本
        minSdkVersion 19
        //配置應用的目标Android系統版本
        targetSdkVersion 26
        //用于控制應用更新的版本号
        versionCode 1
        //使用者看到的版本名稱
        versionName "1.0"
        //測試時用到
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    /**
     * buildTypes是一個NamedDomainObjectContainer類型,是一個域對象,類似SourceSet(源集)
     * buildTypes中可自定義需要建構的類型,Gradle會自動建立一個相應的BuildType,如預設的release、debug
     */
    buildTypes {
        release {
            //設定是否為建構類型啟用混淆
            minifyEnabled false
            //如果啟用混淆則使用相應的混淆檔案
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}
//依賴配置
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation files('libs/plugin.jar')
}

           

上述配置檔案中已經标注了一些 Android Gradle 插件需要配置的地方,也算是對 Android Gradle 插件及項目配置檔案 build.gradle 的一次了解與學習,關于 Android Gradle 插件的基本配置就到此為止,以後陸續補充。

Android Gradle 任務

Android Gradle 插件基于 Android Gradle 插件,Android Gradle 插件中包含了 Java Gradle 插件的一些任務,如 assembile、check、build等任務,此外, Android Gradle 插件還添加一些新任務,如 connectedCheck、deviceCheck、lint、install、unInstall 等 Android 開發特有的任務,可在 Android Studio 上檢視 Android 開發中一些任務,選中 Android Studio 右側标簽 Gradle 就可檢視,參考如下:

Gradle系列之Android Gradle插件

這篇算是初步從學習 Gradle 的角度了解了 Android Gradle 插件相關知識,後面的文章中會繼續 Android Gradle 的學習。

可以關注公衆号:零點小築(jzman-blog),一起交流學習。

Gradle系列之Android Gradle插件