Gradle 使用指南 -- Android DSL 擴充套件
阿新 • • 發佈:2019-01-31
概述
在前面部落格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都適用)
這三個都會分別返回一個 ApplicationVariant
、LibraryVariant
、 TestVariant
和 FeatureVariant
物件的 DomainObjectCollection
。
ApplicationVariant 原始碼
DomainObjectCollection
繼承自 Collection
,可以檢視 DomainObjectCollection文件說明
注意: 使用這四個
collection
中的其中一個都會觸發生成所有對應的task。這意味著使用collection
之後不需要更改配置。
DomainObjectCollection
可以直接訪問所有物件,或者通過過濾器進行篩選。
android.applicationVariants.all { variant ->
def name = variant.name
println "android "+name
}
DomainObjectCollection
可以直接訪問所有物件,或者通過過濾器進行篩選。