banner
jzman

jzman

Coding、思考、自觉。
github

Gradle系列之Android Gradle插件

通過前面幾篇文章學習了 Gradle 基礎知識以及 Gradle 插件相關的知識,關於 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 插件的使用,當然 Library 插件的使用和 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 就可查看,參考如下:

image

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。