1. 程式人生 > >Gradle 使用指南 -- Android DSL 擴充套件

Gradle 使用指南 -- Android DSL 擴充套件

概述

在前面部落格Gradle 使用指南 – 基礎配置 中介紹了一些 Gradle 配置的基本命令,其中有一個名稱為 android的函式不知道有沒有引起大家的注意:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    defaultConfig {
        ......
    }
    buildTypes {
        release {
            ......
        }
    }
}

該函式接收閉包作為引數,然而其實在Gradle的API文件中是不存在這個函式的。那麼 android

指令碼怎麼會出現在這裡呢? 答案就是最上面的 apply plugin: 'com.android.application'。這個外掛提供了 Android 構建所需要的各種 script。
Android Plugin DSL Reference:Android 外掛 DSL 擴充套件文件,各個版本的都有。
下面簡單介紹一些 Android Plugin 對 Gradle 一些擴充套件的知識,沒有涉及的地方可以參考官方文件。

擴充套件介紹

下面列出了各個外掛使用的Gradle擴充套件型別:

型別 描述
AppExtension com.android.application
外掛的擴充套件
LibraryExtension com.android.library 外掛的擴充套件
TestExtension com.android.test 外掛的擴充套件
FeatureExtension com.android.feature 外掛的擴充套件,Gradle 3.0新增

下面是 Android Plugin 一些通用的 Script blocks,以上四種類型的擴充套件除了對下面的支援之外,還有自己型別的一些擴充套件。

方法(Script blocks) 描述
aaptOptions { } Specifies options for the Android Asset Packaging Tool (AAPT)
adbOptions { } Specifies options for the Android Debug Bridge (ADB), such as APK installation options
buildTypes { } Encapsulates all build type configurations for this project.
compileOptions { } Specifies Java compiler options, such as the language level of the Java source code and generated bytecode.
dataBinding { } Specifies options for the Data Binding Library.
defaultConfig { } Specifies defaults for variant properties that the Android plugin applies to all build variants.
dexOptions { } Specifies options for the DEX tool, such as enabling library pre-dexing.
externalNativeBuild { } Configures external native build using CMake or ndk-build.
jacoco { } Configuring JaCoCo using this block is deprecated.
lintOptions { } Specifies options for the lint tool.
packagingOptions { } Specifies options and rules that determine which files the Android plugin packages into your APK.
productFlavors { } Encapsulates all product flavors configurations for this project.
signingConfigs { } Encapsulates signing configurations that you can apply to BuildType and ProductFlavor configurations.
sourceSets { } Encapsulates source set configurations for all variants.
splits { } Specifies configurations for building multiple APKs or APK splits.
testOptions { } Specifies options for how the Android plugin should run local and instrumented tests.

AppExtension

下面僅列覺一下 AppExtension 的部分擴充套件:

方法(Script blocks) 描述
buildToolsVersion Specifies the version of the SDK Build Tools to use when building your project.
applicationVariants Returns a collection of build variants that the app project includes.
compileSdkVersion Specifies the API level to compile your project against. The Android plugin requires you to configure this property.
testVariants Returns a collection of Android test build variants.

操作 Task

Android專案中會有大量相同的task,並且它們的名字基於Build Types和Product Flavor生成。
android 物件有兩個屬性:

  • applicationVariants(只適用於app plugin)
  • libraryVariants(只適用於library plugin)
  • featureVariants (只適用於feature plugin)
  • testVariants(三個plugin都適用)

這三個都會分別返回一個 ApplicationVariantLibraryVariantTestVariantFeatureVariant 物件的 DomainObjectCollection
ApplicationVariant 原始碼
DomainObjectCollection 繼承自 Collection,可以檢視 DomainObjectCollection文件說明

注意: 使用這四個 collection 中的其中一個都會觸發生成所有對應的task。這意味著使用 collection 之後不需要更改配置。

DomainObjectCollection 可以直接訪問所有物件,或者通過過濾器進行篩選。

    android.applicationVariants.all {  variant ->
        def name = variant.name
        println "android "+name
    }

DomainObjectCollection 可以直接訪問所有物件,或者通過過濾器進行篩選。

參考文件