blob: 8f44931a71b28f6d61b7b1a84d443e1b705d3a97 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.build.api.dsl
import org.gradle.api.Incubating
import org.gradle.api.NamedDomainObjectContainer
import java.io.File
/**
* Common extension properties for the Android Application. Library and Dynamic Feature Plugins.
*
*
* Only the Android Gradle Plugin should create instances of this interface.
*/
interface CommonExtension<
BuildFeaturesT : BuildFeatures,
BuildTypeT : BuildType,
DefaultConfigT : DefaultConfig,
ProductFlavorT : ProductFlavor,
AndroidResourcesT : AndroidResources,
InstallationT: Installation> {
/**
* Specifies options for the Android Asset Packaging Tool (AAPT).
*
* For more information about the properties you can configure in this block, see [AaptOptions].
*/
@Suppress("DEPRECATION")
@Deprecated("Replaced by ", replaceWith = ReplaceWith("androidResources"))
val aaptOptions: AaptOptions
/**
* Specifies options for the Android Asset Packaging Tool (AAPT).
*
* For more information about the properties you can configure in this block, see [AaptOptions].
*/
@Suppress("DEPRECATION")
@Deprecated("Replaced by ", replaceWith = ReplaceWith("androidResources"))
fun aaptOptions(action: AaptOptions.() -> Unit)
/**
* Specifies options related to the processing of Android Resources.
*
* For more information about the properties you can configure in this block, see [AndroidResources].
*/
val androidResources: AndroidResourcesT
/**
* Specifies options related to the processing of Android Resources.
*
* For more information about the properties you can configure in this block, see [AndroidResources].
*/
fun androidResources(action: AndroidResourcesT.() -> Unit)
/**
* Specifies options for the
* [Android Debug Bridge (ADB)](https://developer.android.com/studio/command-line/adb.html),
* such as APK installation options.
*
* For more information about the properties you can configure in this block, see [AdbOptions].
*/
@Suppress("DEPRECATION")
@Deprecated("Replaced by installation", replaceWith = ReplaceWith("installation"))
val adbOptions: AdbOptions
/**
* Specifies options for the
* [Android Debug Bridge (ADB)](https://developer.android.com/studio/command-line/adb.html),
* such as APK installation options.
*
* For more information about the properties you can configure in this block, see [AdbOptions].
*/
@Suppress("DEPRECATION")
@Deprecated("Replaced by installation", replaceWith = ReplaceWith("installation"))
fun adbOptions(action: AdbOptions.() -> Unit)
/**
* Specifies options for the
* [Android Debug Bridge (ADB)](https://developer.android.com/studio/command-line/adb.html),
* such as APK installation options.
*
* For more information about the properties you can configure in this block, see [AdbOptions].
*/
val installation: InstallationT
/**
* Specifies options for the
* [Android Debug Bridge (ADB)](https://developer.android.com/studio/command-line/adb.html),
* such as APK installation options.
*
* For more information about the properties you can configure in this block, see [AdbOptions].
*/
fun installation(action: InstallationT.() -> Unit)
/**
* Specifies Java compiler options, such as the language level of the Java source code and
* generated bytecode.
*
* For more information about the properties you can configure in this block, see [CompileOptions].
*/
val compileOptions: CompileOptions
/**
* Specifies Java compiler options, such as the language level of the Java source code and
* generated bytecode.
*
* For more information about the properties you can configure in this block, see [CompileOptions].
*/
fun compileOptions(action: CompileOptions.() -> Unit)
/**
* A list of build features that can be enabled or disabled on the Android Project.
*/
val buildFeatures: BuildFeaturesT
/**
* A list of build features that can be enabled or disabled on the Android Project.
*/
fun buildFeatures(action: BuildFeaturesT.() -> Unit)
/**
* Encapsulates all build type configurations for this project.
*
* Unlike using [ProductFlavor] to create
* different versions of your project that you expect to co-exist on a single device, build
* types determine how Gradle builds and packages each version of your project. Developers
* typically use them to configure projects for various stages of a development lifecycle. For
* example, when creating a new project from Android Studio, the Android plugin configures a
* 'debug' and 'release' build type for you. By default, the 'debug' build type enables
* debugging options and signs your APK with a generic debug keystore. Conversely, The 'release'
* build type strips out debug symbols and requires you to
* [create a release key and keystore](https://developer.android.com/studio/publish/app-signing.html#sign-apk)
* for your app. You can then combine build types with product flavors to
* [create build variants](https://developer.android.com/studio/build/build-variants.html).
*
* @see BuildType
*/
val buildTypes: NamedDomainObjectContainer<out BuildTypeT>
/**
* Encapsulates all build type configurations for this project.
*
* For more information about the properties you can configure in this block, see [BuildType]
*/
fun buildTypes(action: NamedDomainObjectContainer<BuildTypeT>.() -> Unit)
/**
* Shortcut extension method to allow easy access to the predefined `debug` [BuildType]
*
* For example:
* ```
* android {
* buildTypes {
* debug {
* // ...
* }
* }
* }
* ```
*/
fun NamedDomainObjectContainer<BuildTypeT>.debug(action: BuildTypeT.() -> Unit)
/**
* Shortcut extension method to allow easy access to the predefined `release` [BuildType]
*
* For example:
* ```
* android {
* buildTypes {
* release {
* // ...
* }
* }
* }
* ```
*/
fun NamedDomainObjectContainer<BuildTypeT>.release(action: BuildTypeT.() -> Unit)
/**
* Specifies options for the
* [Data Binding Library](https://developer.android.com/topic/libraries/data-binding/index.html).
*
* For more information about the properties you can configure in this block, see [DataBinding]
*/
val dataBinding: DataBinding
/**
* Specifies options for the
* [Data Binding Library](https://developer.android.com/topic/libraries/data-binding/index.html).
*
* For more information about the properties you can configure in this block, see [DataBinding]
*/
fun dataBinding(action: DataBinding.() -> Unit)
/**
* Specifies options for the
* [View Binding Library](https://developer.android.com/topic/libraries/view-binding/index.html).
*
* For more information about the properties you can configure in this block, see [ViewBinding]
*/
val viewBinding: ViewBinding
/**
* Specifies options for the
* [View Binding Library](https://developer.android.com/topic/libraries/view-binding/index.html).
*
* For more information about the properties you can configure in this block, see [ViewBinding]
*/
fun viewBinding(action: ViewBinding.() -> Unit)
/**
* Configure the gathering of code-coverage from tests.
*
* This is replaced by [testCoverage].
*/
@Suppress("DEPRECATION")
@get:Incubating
@Deprecated("Renamed to testCoverage", replaceWith = ReplaceWith("testCoverage"))
val jacoco: JacocoOptions
/**
* Configure the gathering of code-coverage from tests.
*
* This is replaced by [testCoverage].
*/
@Suppress("DEPRECATION")
@Incubating
@Deprecated("Renamed to testCoverage", replaceWith = ReplaceWith("testCoverage"))
fun jacoco(action: JacocoOptions.() -> Unit)
/**
* Configure the gathering of code-coverage from tests.
*
* To override the JaCoCo version that is used for offline instrumentation and coverage report,
* add the following to `build.gradle` file:
*
* ```
* android {
* testCoverage {
* jacocoVersion "<jacoco-version>"
* }
* }
* ```
*
* For more information about the properties you can configure in this block, see [TestCoverage].
*/
val testCoverage: TestCoverage
/**
* Configure the gathering of code-coverage from tests.
*
* To override the JaCoCo version that is used for offline instrumentation and coverage report,
* add the following to `build.gradle` file:
*
* ```
* android {
* testCoverage {
* jacocoVersion "<jacoco-version>"
* }
* }
* ```
*
* For more information about the properties you can configure in this block, see [TestCoverage].
*/
fun testCoverage(action: TestCoverage.() -> Unit)
/**
* Specifies options for the lint tool.
*
* For more information about the properties you can configure in this block, see [Lint].
*/
val lint: Lint
/**
* Specifies options for the lint tool.
*
* For more information about the properties you can configure in this block, see [Lint].
*/
fun lint(action: Lint.() -> Unit)
/**
* Specifies options for the lint tool.
*
* For more information about the properties you can configure in this block, see [LintOptions].
*/
@Suppress("DEPRECATION")
@get:Incubating
@Deprecated("Renamed to lint", replaceWith = ReplaceWith("lint"))
val lintOptions: LintOptions
/**
* Specifies options for the lint tool.
*
* For more information about the properties you can configure in this block, see [LintOptions].
*/
@Suppress("DEPRECATION")
@Incubating
@Deprecated("Renamed to lint", replaceWith = ReplaceWith("lint"))
fun lintOptions(action: LintOptions.() -> Unit)
/**
* Specifies options and rules that determine which files the Android plugin packages into your
* APK.
*
* For more information about the properties you can configure in this block, see [Packaging].
*/
@Deprecated("Renamed to packaging", replaceWith = ReplaceWith("packaging"))
val packagingOptions: Packaging
/**
* Specifies options and rules that determine which files the Android plugin packages into your
* APK.
*
* For more information about the properties you can configure in this block, see [Packaging].
*/
@Deprecated("Renamed to packaging", replaceWith = ReplaceWith("packaging"))
fun packagingOptions(action: Packaging.() -> Unit)
/**
* Specifies options and rules that determine which files the Android plugin packages into your
* APK.
*
* For more information about the properties you can configure in this block, see [Packaging].
*/
val packaging: Packaging
/**
* Specifies options and rules that determine which files the Android plugin packages into your
* APK.
*
* For more information about the properties you can configure in this block, see [Packaging].
*/
fun packaging(action: Packaging.() -> Unit)
/**
* Encapsulates all product flavors configurations for this project.
*
*
* Product flavors represent different versions of your project that you expect to co-exist
* on a single device, the Google Play store, or repository. For example, you can configure
* 'demo' and 'full' product flavors for your app, and each of those flavors can specify
* different features, device requirements, resources, and application ID's--while sharing
* common source code and resources. So, product flavors allow you to output different versions
* of your project by simply changing only the components and settings that are different
* between them.
*
*
* Configuring product flavors is similar to
* [configuring build types](https://developer.android.com/studio/build/build-variants.html#build-types):
* add them to the `productFlavors` block of your project's `build.gradle` file
* and configure the settings you want.
* Product flavors support the same properties as the `defaultConfig`
* block--this is because `defaultConfig` defines an object that the plugin uses as the base
* configuration for all other flavors. Each flavor you configure can then override any of the
* default values in `defaultConfig`, such as the
* [`applicationId`](https://d.android.com/studio/build/application-id.html).
*
*
* When using Android plugin 3.0.0 and higher, *each flavor must belong to a
* [`flavorDimension`](com.android.build.gradle.BaseExtension.html#com.android.build.gradle.BaseExtension:flavorDimensions(java.lang.String[]))
* value*. By default, when you specify only one
* dimension, all flavors you configure belong to that dimension. If you specify more than one
* flavor dimension, you need to manually assign each flavor to a dimension. To learn more, read
* [Use Flavor Dimensions for variant-aware dependency management](https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware).
*
*
* When you configure product flavors, the Android plugin automatically combines them with
* your [BuildType] configurations to
* [create build variants](https://developer.android.com/studio/build/build-variants.html).
* If the plugin creates certain build variants that you don't want, you can
* [filter variants](https://developer.android.com/studio/build/build-variants.html#filter-variants).
*
* @see [ProductFlavor]
*/
val productFlavors: NamedDomainObjectContainer<out ProductFlavorT>
/**
* Encapsulates all product flavors configurations for this project.
*
* For more information about the properties you can configure in this block,
* see [ProductFlavor]
*/
fun productFlavors(action: NamedDomainObjectContainer<ProductFlavorT>.() -> Unit)
/**
* Specifies defaults for variant properties that the Android plugin applies to all build
* variants.
*
* You can override any `defaultConfig` property when
* [configuring product flavors](https://developer.android.com/studio/build/build-variants.html#product-flavors)
*
* For more information about the properties you can configure in this block, see [DefaultConfig].
*/
val defaultConfig: DefaultConfigT
/**
* Specifies defaults for variant properties that the Android plugin applies to all build
* variants.
*
* You can override any `defaultConfig` property when
* [configuring product flavors](https://developer.android.com/studio/build/build-variants.html#product-flavors)
*
* For more information about the properties you can configure in this block, see [DefaultConfig].
*/
fun defaultConfig(action: DefaultConfigT.() -> Unit)
/**
* Encapsulates signing configurations that you can apply to [ ] and [ ] configurations.
*
*
* Android requires that all APKs be digitally signed with a certificate before they can be
* installed onto a device. When deploying a debug version of your project from Android Studio,
* the Android plugin automatically signs your APK with a generic debug certificate. However, to
* build an APK for release, you must
* [sign the APK](https://developer.android.com/studio/publish/app-signing.html)
* with a release key and keystore.
* You can do this by either
* [using the Android Studio UI](https://developer.android.com/studio/publish/app-signing.html#sign-apk)
* or manually
* [configuring your `build.gradle` file](https://developer.android.com/studio/publish/app-signing.html#gradle-sign).
*
* @see [ApkSigningConfig]
*/
val signingConfigs: NamedDomainObjectContainer<out ApkSigningConfig>
/**
* Encapsulates signing configurations that you can apply to
* [BuildType] and [ProductFlavor] configurations.
*
* For more information about the properties you can configure in this block,
* see [ApkSigningConfig].
*/
fun signingConfigs(action: NamedDomainObjectContainer<out ApkSigningConfig>.() -> Unit)
/**
* Specifies options for external native build using [CMake](https://cmake.org/) or
* [ndk-build](https://developer.android.com/ndk/guides/ndk-build.html).
*
*
* When using
* [Android Studio 2.2 or higher](https://developer.android.com/studio/index.html) with
* [Android plugin 2.2.0 or higher](https://developer.android.com/studio/releases/gradle-plugin.html),
* you can compile C and C++ code into a native library that Gradle packages into your APK.
*
*
* To learn more, read
* [Add C and C++ Code to Your Project](https://developer.android.com/studio/projects/add-native-code.html).
*
* @see ExternalNativeBuild
*
* since 2.2.0
*/
val externalNativeBuild: ExternalNativeBuild
/**
* Specifies options for external native build using [CMake](https://cmake.org/) or
* [ndk-build](https://developer.android.com/ndk/guides/ndk-build.html).
*
*
* When using
* [Android Studio 2.2 or higher](https://developer.android.com/studio/index.html) with
* [Android plugin 2.2.0 or higher](https://developer.android.com/studio/releases/gradle-plugin.html),
* you can compile C and C++ code into a native library that Gradle packages into your APK.
*
*
* To learn more, read
* [Add C and C++ Code to Your Project](https://developer.android.com/studio/projects/add-native-code.html).
*
* @see ExternalNativeBuild
*
* since 2.2.0
*/
fun externalNativeBuild(action: ExternalNativeBuild.()->Unit)
/**
* Specifies options for how the Android plugin should run local and instrumented tests.
*
* For more information about the properties you can configure in this block, see [TestOptions].
*/
@get:Incubating
val testOptions: TestOptions
/**
* Specifies options for how the Android plugin should run local and instrumented tests.
*
* For more information about the properties you can configure in this block, see [TestOptions].
*/
@Incubating
fun testOptions(action: TestOptions.() -> Unit)
/**
* Specifies configurations for
* [building multiple APKs](https://developer.android.com/studio/build/configure-apk-splits.html)
* or APK splits.
*
* For more information about the properties you can configure in this block, see [Splits].
*/
val splits: Splits
/**
* Specifies configurations for
* [building multiple APKs](https://developer.android.com/studio/build/configure-apk-splits.html)
* or APK splits.
*
* For more information about the properties you can configure in this block, see [Splits].
*/
fun splits(action: Splits.() -> Unit)
val composeOptions: ComposeOptions
fun composeOptions(action: ComposeOptions.() -> Unit)
/**
* Encapsulates source set configurations for all variants.
*
* Note that the Android plugin uses its own implementation of source sets. For more
* information about the properties you can configure in this block, see [AndroidSourceSet].
*/
val sourceSets: NamedDomainObjectContainer<out AndroidSourceSet>
/**
* Encapsulates source set configurations for all variants.
*
* Note that the Android plugin uses its own implementation of source sets. For more
* information about the properties you can configure in this block, see [AndroidSourceSet].
*/
fun sourceSets(action: NamedDomainObjectContainer<out AndroidSourceSet>.() -> Unit)
/**
* Specifies the names of product flavor dimensions for this project.
*
* When configuring product flavors with Android plugin 3.0.0 and higher, you must specify at
* least one flavor dimension, using the
* [`flavorDimensions`][flavorDimensions] property, and then assign each flavor to a dimension.
* Otherwise, you will get the following build error:
*
* ```
* Error:All flavors must now belong to a named flavor dimension.
* The flavor 'flavor_name' is not assigned to a flavor dimension.
* ```
*
* By default, when you specify only one dimension, all flavors you configure automatically
* belong to that dimension. If you specify more than one dimension, you need to manually assign
* each flavor to a dimension, as shown in the sample below.
*
* Flavor dimensions allow you to create groups of product flavors that you can combine with
* flavors from other flavor dimensions. For example, you can have one dimension that includes a
* 'free' and 'paid' version of your app, and another dimension for flavors that support
* different API levels, such as 'minApi21' and 'minApi24'. The Android plugin can then combine
* flavors from these dimensions—including their settings, code, and resources—to create
* variants such as 'debugFreeMinApi21' and 'releasePaidMinApi24', and so on. The sample below
* shows you how to specify flavor dimensions and add product flavors to them.
*
* ```
* android {
* ...
* // Specifies the flavor dimensions you want to use. The order in which you
* // list each dimension determines its priority, from highest to lowest,
* // when Gradle merges variant sources and configurations. You must assign
* // each product flavor you configure to one of the flavor dimensions.
* flavorDimensions 'api', 'version'
*
* productFlavors {
* demo {
* // Assigns this product flavor to the 'version' flavor dimension.
* dimension 'version'
* ...
* }
*
* full {
* dimension 'version'
* ...
* }
*
* minApi24 {
* // Assigns this flavor to the 'api' dimension.
* dimension 'api'
* minSdkVersion '24'
* versionNameSuffix "-minApi24"
* ...
* }
*
* minApi21 {
* dimension "api"
* minSdkVersion '21'
* versionNameSuffix "-minApi21"
* ...
* }
* }
* }
* ```
*
* To learn more, read
* [Combine multiple flavors](https://developer.android.com/studio/build/build-variants.html#flavor-dimensions).
*/
val flavorDimensions: MutableList<String>
@Deprecated("Replaced by flavorDimensions property")
fun flavorDimensions(vararg dimensions: String)
/**
* Specifies this project's resource prefix to Android Studio for editor features, such as Lint
* checks. This property is useful only when using Android Studio.
*
* Including unique prefixes for project resources helps avoid naming collisions with
* resources from other projects.
*
* For example, when creating a library with String resources,
* you may want to name each resource with a unique prefix, such as "`mylib_`"
* to avoid naming collisions with similar resources that the consumer defines.
*
* You can then specify this prefix, as shown below, so that Android Studio expects this prefix
* when you name project resources:
*
* ```
* // This property is useful only when developing your project in Android Studio.
* resourcePrefix 'mylib_'
* ```
*/
var resourcePrefix: String?
/**
* Requires the specified NDK version to be used.
*
* Use this to specify a fixed NDK version. Without this, each new version of the Android
* Gradle Plugin will choose a specific version of NDK to use, so upgrading the plugin also
* means upgrading the NDK. Locking to a specific version can increase repeatability of the
* build.
*
* ```
* android {
* // Use a fixed NDK version
* ndkVersion '20.1.5948944'
* }
* ```
*
* If this field is specified then android.ndkPath may not be specified.
* If this field is not specified, a default value will be provided depending on the AGP version
*
* The required format of the version is <code>major.minor.build</code>. It's not legal to
* specify less precision.
* If `ndk.dir` is specified in `local.properties` file then the NDK that it points to must
* match the `android.ndkVersion`.
*
* Prior to Android Gradle Plugin version 3.5, the highest installed version of NDK will be
* used.
* In Android Gradle Plugin 3.4, specifying `android.ndkVersion` was not an error, but the value
* would be ignored.
* Prior to Android Gradle Plugin version 3.4, it was illegal to specify `android.ndkVersion`.
*
* For additional information about NDK installation see
* [Install and configure the NDK](https://developer.android.com/studio/projects/install-ndk).
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.ndkVersion]
*/
var ndkVersion: String
/**
* Requires the specified path to NDK be used.
*
* Use this to specify a path to the NDK folder to be used for C and C++ builds.
*
* ```
* android {
* // Path to custom NDK location
* ndkPath '/path/to/ndk'
* }
* ```
*
* If this field is specified, then the version it refers to need to match the one specified
* in ndkVersion. If ndkVersion is not specified, ndkPath need to match the default ndkVersion
*
* For additional information about NDK installation see
* [Install and configure the NDK](https://developer.android.com/studio/projects/install-ndk).
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.ndkPath]
*/
var ndkPath: String?
/**
* Specifies the version of the
* [SDK Build Tools](https://developer.android.com/studio/releases/build-tools.html)
* to use when building your project.
*
* When using Android plugin 3.0.0 or later, configuring this property is optional. By
* default, the plugin uses the minimum version of the build tools required by the
* [version of the plugin](https://developer.android.com/studio/releases/gradle-plugin.html#revisions)
* you're using.
* To specify a different version of the build tools for the plugin to use,
* specify the version as follows:
*
* ```
* android {
* // Specifying this property is optional.
* buildToolsVersion "26.0.0"
* }
* ```
*
* For a list of build tools releases, read
* [the release notes](https://developer.android.com/studio/releases/build-tools.html#notes).
*
* Note that the value assigned to this property is parsed and stored in a normalized form,
* so reading it back may give a slightly different result.
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.buildToolsVersion]
*/
var buildToolsVersion: String
@Deprecated("Replaced by buildToolsVersion property")
fun buildToolsVersion(buildToolsVersion: String)
/**
* Includes the specified library to the classpath.
*
* You typically use this property to support optional platform libraries that ship with the
* Android SDK. The following sample adds the Apache HTTP API library to the project classpath:
*
* ```
* android {
* // Adds a platform library that ships with the Android SDK.
* useLibrary 'org.apache.http.legacy'
* }
* ```
*
* To include libraries that do not ship with the SDK, such as local library modules or
* binaries from remote repositories,
* [add the libraries as dependencies](https://developer.android.com/studio/build/dependencies.html)
* in the `dependencies` block. Note that Android plugin 3.0.0 and later introduce
* [new dependency configurations](https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#new_configurations).
* To learn more about Gradle dependencies, read
* [Dependency Management Basics](https://docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html).
*
* @param name the name of the library.
*/
fun useLibrary(name: String)
/**
* Includes the specified library to the classpath.
*
* You typically use this property to support optional platform libraries that ship with the
* Android SDK. The following sample adds the Apache HTTP API library to the project classpath:
*
* ```
* android {
* // Adds a platform library that ships with the Android SDK.
* useLibrary 'org.apache.http.legacy'
* }
* ```
*
* To include libraries that do not ship with the SDK, such as local library modules or
* binaries from remote repositories,
* [add the libraries as dependencies]("https://developer.android.com/studio/build/dependencies.html)
* in the `dependencies` block. Note that Android plugin 3.0.0 and later introduce
* [new dependency configurations](new dependency configurations).
* To learn more about Gradle dependencies, read
* [Dependency Management Basics](https://docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html)
*
* @param name the name of the library.
* @param required if using the library requires a manifest entry, the entry will indicate that
* the library is not required.
*/
fun useLibrary(name: String, required: Boolean)
@get:Deprecated(
message = "This API will be removed in AGP 7.0, replaced with AndroidComponents::sdkComponents")
val sdkComponents: SdkComponents
/**
* Specifies the API level to compile your project against. The Android plugin requires you to
* configure this property.
*
* This means your code can use only the Android APIs included in that API level and lower.
* You can configure the compile sdk version by adding the following to the `android`
* block: `compileSdk = 26`.
*
* You should generally
* [use the most up-to-date API level](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)
* available.
* If you are planning to also support older API levels, it's good practice to
* [use the Lint tool](https://developer.android.com/studio/write/lint.html)
* to check if you are using APIs that are not available in earlier API levels.
*
* The value you assign to this property is parsed and stored in a normalized form, so
* reading it back may return a slightly different value.
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.compileSdk]
*/
var compileSdk: Int?
/**
* Specifies the SDK Extension level to compile your project against. This value is optional.
*
* When not provided the base extension for the given `compileSdk` API level will be selected.
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.compileSdkExtension]
*/
var compileSdkExtension: Int?
/**
* Specify a preview API to compile your project against.
*
* For example, to try out the Android S preview,
* rather than `compileSdk = 30` you can use `compileSdkPreview = "S"`
*
* Once the preview APIs are finalized, they will be allocated a stable integer value.
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.compileSdkPreview]
*/
var compileSdkPreview: String?
/**
* Specify an SDK add-on to compile your project against.
*
* This can be set on all Gradle projects with [com.android.build.api.dsl.SettingsExtension.compileSdkAddon]
*
* @param vendor the vendor name of the add-on.
* @param name the name of the add-on
* @param version the integer API level of the add-on
*/
fun compileSdkAddon(vendor: String, name: String, version: Int)
@Deprecated("Replaced by compileSdk")
fun compileSdkVersion(apiLevel: Int)
@Deprecated("Replaced by compileSdkPreview")
fun compileSdkVersion(version: String)
/**
* The namespace of the generated R and BuildConfig classes. Also, the namespace used to resolve
* any relative class names that are declared in the AndroidManifest.xml.
*/
var namespace: String?
fun getDefaultProguardFile(name: String): File
/**
* Additional per module experimental properties.
*
* Values provided should not be based on a Task execution result, as most of these properties
* are read during configuration.
*/
@get:Incubating
val experimentalProperties: MutableMap<String, Any>
}