blob: b1935e097f1c3c6913a662627d3ebe6cec2c6b5d [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.Named
import org.gradle.api.plugins.ExtensionAware
/**
* Build types define certain properties that Gradle uses when building and packaging your app, and
* are typically configured for different stages of your development lifecycle.
*
* There are two build types defined by default, `debug` and `release`, and you can customize them
* and create additional build types.
*
* The default debug build type enables debug options and signs the APK with the debug
* key, while the release build type is not debuggable and can be configured to shrink, obfuscate,
* and sign your APK with a release key for distribution.
*
* See
* [configuring build types](https://developer.android.com/studio/build#build-config)
* for more information.
*/
interface BuildType : Named, VariantDimension, ExtensionAware {
/**
* Whether test coverage is enabled for this build type.
*
* If enabled this uses Jacoco to capture coverage and creates a report in the build
* directory.
*
* The version of Jacoco can be configured with:
* ```
* android {
* testCoverage {
* jacocoVersion = '0.6.2.201302030002'
* }
* }
* ```
* isTestCoverageEnabled is deprecated. Use enableUnitTestCoverage and
* enableAndroidTestCoverage instead which allow you to enable coverage
* separately for unit and instrumentation tests.
*/
@Deprecated("Replaced with: enableUnitTestCoverage and or enableAndroidTestCoverage.")
var isTestCoverageEnabled: Boolean
/**
* Specifies unit test code coverage data collection by configuring the JacocoPlugin.
*
* When enabled, the Jacoco plugin is applied and coverage data is collected
* by the Jacoco plugin. This can avoid unwanted build time instrumentation required to collect
* coverage data from other test types such as connected tests.
*/
var enableUnitTestCoverage: Boolean
/**
* Specifies code coverage is enabled for module tests of type AndroidTest.
*
* If enabled, prepares module class files for code coverage collection such as instrumenting
* dependent library classes and module classes. This allows for code coverage reports to be
* generated.
*/
var enableAndroidTestCoverage: Boolean
/**
* Specifies whether the plugin should generate resources for pseudolocales.
*
* A pseudolocale is a locale that simulates characteristics of languages that cause UI,
* layout, and other translation-related problems when an app is localized. Pseudolocales can
* aid your development workflow because you can test and make adjustments to your UI before you
* finalize text for translation.
*
* When you set this property to `true` as shown below, the plugin generates
* resources for the following pseudo locales and makes them available in your connected
* device's language preferences: `en-XA` and `ar-XB`.
*
* ```
* android {
* buildTypes {
* debug {
* pseudoLocalesEnabled true
* }
* }
* }
* ```
*
* When you build your app, the plugin includes the pseudolocale resources in your APK. If
* you notice that your APK does not include those locale resources, make sure your build
* configuration isn't limiting which locale resources are packaged with your APK, such as using
* the `resourceConfigurations` property to
* [remove unused locale resources](https://d.android.com/studio/build/shrink-code.html#unused-alt-resources).
*
* To learn more, read
* [Test Your App with Pseudolocales](https://d.android.com/guide/topics/resources/pseudolocales.html).
*/
var isPseudoLocalesEnabled: Boolean
/**
* Whether this build type is configured to generate an APK with debuggable native code.
*/
var isJniDebuggable: Boolean
/**
* Whether the build type is configured to generate an apk with debuggable RenderScript code.
*
* RenderScript APIs are deprecated starting in Android 12.
* For more information about how to migrate, see
* [https://developer.android.com/guide/topics/renderscript/migrate]
*/
@Deprecated("This dsl option has no effect and will be removed in AGP 9.0")
var isRenderscriptDebuggable: Boolean
/**
* Optimization level to use by the renderscript compiler.
* RenderScript APIs are deprecated starting in Android 12.
* For more information about how to migrate, see
* [https://developer.android.com/guide/topics/renderscript/migrate]
*/
var renderscriptOptimLevel: Int
/**
* Specifies whether to enable code shrinking for this build type.
*
* By default, when you enable code shrinking by setting this property to `true`,
* the Android plugin uses ProGuard.
*
* To learn more, read
* [Shrink Your Code and Resources](https://developer.android.com/studio/build/shrink-code.html).
*/
var isMinifyEnabled: Boolean
/**
* Specifies whether to enable shrinking resources for this build type.
*
* To learn more, read
* [Shrink Your Code and Resources](https://developer.android.com/studio/build/shrink-code.html).
*/
var isShrinkResources: Boolean
/**
* Specifies a sorted list of build types that the plugin should try to use when a direct
* variant match with a local module dependency is not possible.
*
*
* Android plugin 3.0.0 and higher try to match each variant of your module with the same one
* from its dependencies. For example, when you build a "freeDebug" version of your app, the
* plugin tries to match it with "freeDebug" versions of the local library modules the app
* depends on.
*
*
* However, there may be situations in which **your app includes build types that a
* dependency does not**. For example, consider if your app includes a "stage" build type, but
* a dependency includes only a "debug" and "release" build type. When the plugin tries to build
* the "stage" version of your app, it won't know which version of the dependency to use, and
* you'll see an error message similar to the following:
*
* ```
* Error:Failed to resolve: Could not resolve project :mylibrary.
* Required by:
* project :app
* ```
*
*
* In this situation, you can use `matchingFallbacks` to specify alternative
* matches for the app's "stage" build type, as shown below:
*
* ```
* // In the app's build.gradle file.
* android {
* buildTypes {
* release {
* // Because the dependency already includes a "release" build type,
* // you don't need to provide a list of fallbacks here.
* }
* stage {
* // Specifies a sorted list of fallback build types that the
* // plugin should try to use when a dependency does not include a
* // "stage" build type. You may specify as many fallbacks as you
* // like, and the plugin selects the first build type that's
* // available in the dependency.
* matchingFallbacks = ['debug', 'qa', 'release']
* }
* }
* }
* ```
*
*
* Note that there is no issue when a library dependency includes a build type that your app
* does not. That's because the plugin simply never requests that build type from the
* dependency.
*
* @return the names of product flavors to use, in descending priority order
*/
val matchingFallbacks: MutableList<String>
@get:Incubating
val postprocessing: PostProcessing
@Incubating
fun postprocessing(action: PostProcessing.() -> Unit)
/**
* Copies all properties from the given build type.
*
* It can be used like this:
*
* ```
* android.buildTypes {
* customBuildType {
* initWith debug
* // customize...
* }
* }
* ```
*/
fun initWith(that: BuildType)
@Deprecated("Replaced with property matchingFallbacks")
fun setMatchingFallbacks(vararg fallbacks: String)
@Deprecated("Replaced with property matchingFallbacks")
fun setMatchingFallbacks(fallbacks: List<String>)
@Deprecated("Changing the value of isZipAlignEnabled no longer has any effect")
var isZipAlignEnabled: Boolean
@get:Incubating
val vcsInfo: VcsInfo
@Incubating
fun vcsInfo(action: VcsInfo.() -> Unit)
}