blob: 786c395dd24254de55f17bb11350d7d6c546ce7b [file] [log] [blame]
/*
* Copyright (C) 2013 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.gradle.api;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.build.gradle.tasks.AidlCompile;
import com.android.build.gradle.tasks.GenerateBuildConfig;
import com.android.build.gradle.tasks.MergeAssets;
import com.android.build.gradle.tasks.MergeResources;
import com.android.build.gradle.tasks.NdkCompile;
import com.android.build.gradle.tasks.RenderscriptCompile;
import com.android.builder.model.BuildType;
import com.android.builder.model.ProductFlavor;
import com.android.builder.model.SourceProvider;
import org.gradle.api.Task;
import org.gradle.api.tasks.AbstractCopyTask;
import org.gradle.api.tasks.compile.AbstractCompile;
import org.gradle.api.tasks.compile.JavaCompile;
import java.io.File;
import java.util.Collection;
import java.util.List;
/**
* A Build variant and all its public data. This is the base class for items common to apps,
* test apps, and libraries
*/
public interface BaseVariant {
/**
* Returns the name of the variant. Guaranteed to be unique.
*/
@NonNull
String getName();
/**
* Returns a description for the build variant.
*/
@NonNull
String getDescription();
/**
* Returns a subfolder name for the variant. Guaranteed to be unique.
*
* This is usually a mix of build type and flavor(s) (if applicable).
* For instance this could be:
* "debug"
* "debug/myflavor"
* "release/Flavor1Flavor2"
*/
@NonNull
String getDirName();
/**
* Returns the base name for the output of the variant. Guaranteed to be unique.
*/
@NonNull
String getBaseName();
/**
* Returns the flavor name of the variant. This is a concatenation of all the
* applied flavors
* @return the name of the flavors, or an empty string if there is not flavors.
*/
@NonNull
String getFlavorName();
/**
* Returns the variant outputs. There should always be at least one output.
* @return a non-null list of variants.
*/
@NonNull
List<BaseVariantOutput> getOutputs();
/**
* Returns the {@link com.android.builder.core.DefaultBuildType} for this build variant.
*/
@NonNull
BuildType getBuildType();
/**
* Returns a {@link com.android.builder.core.DefaultProductFlavor} that represents the merging
* of the default config and the flavors of this build variant.
*/
@NonNull
ProductFlavor getMergedFlavor();
/**
* Returns the list of {@link com.android.builder.core.DefaultProductFlavor} for this build variant.
*
* This is always non-null but could be empty.
*/
@NonNull
List<ProductFlavor> getProductFlavors();
/**
* Returns a list of sorted SourceProvider in order of ascending order, meaning, the earlier
* items are meant to be overridden by later items.
*
* @return a list of source provider
*/
@NonNull
List<SourceProvider> getSourceSets();
/**
* Returns the applicationId of the variant.
*/
@NonNull
String getApplicationId();
/**
* Returns the pre-build anchor task
*/
@NonNull
Task getPreBuild();
/**
* Returns the check manifest task.
*/
@NonNull
Task getCheckManifest();
/**
* Returns the AIDL compilation task.
*/
@NonNull
AidlCompile getAidlCompile();
/**
* Returns the Renderscript compilation task.
*/
@NonNull
RenderscriptCompile getRenderscriptCompile();
/**
* Returns the resource merging task.
*/
@Nullable
MergeResources getMergeResources();
/**
* Returns the asset merging task.
*/
@Nullable
MergeAssets getMergeAssets();
/**
* Returns the BuildConfig generation task.
*/
@Nullable
GenerateBuildConfig getGenerateBuildConfig();
/**
* Returns the Java Compilation task if javac was configured to compile the source files.
* @deprecated prefer {@link #getJavaCompiler} which always return the java compiler task
* irrespective of which tool chain (javac or jack) used.
*/
@Nullable
@Deprecated
JavaCompile getJavaCompile() throws IllegalStateException;
/**
* Returns the Java Compiler task which can be either javac or jack depending on the project
* configuration.
*/
@NonNull
AbstractCompile getJavaCompiler();
/**
* Returns the NDK Compilation task.
*/
@NonNull
NdkCompile getNdkCompile();
/**
* Returns the obfuscation task. This can be null if obfuscation is not enabled.
*/
@Nullable
Task getObfuscation();
/**
* Returns the obfuscation mapping file. This can be null if obfuscation is not enabled.
*/
@Nullable
File getMappingFile();
/**
* Returns the Java resource processing task.
*/
@NonNull
AbstractCopyTask getProcessJavaResources();
/**
* Returns the assemble task for all this variant's output
*/
@Nullable
Task getAssemble();
/**
* Adds new Java source folders to the model.
*
* These source folders will not be used for the default build
* system, but will be passed along the default Java source folders
* to whoever queries the model.
*
* @param sourceFolders the source folders where the generated source code is.
*/
void addJavaSourceFoldersToModel(@NonNull File... sourceFolders);
/**
* Adds new Java source folders to the model.
*
* These source folders will not be used for the default build
* system, but will be passed along the default Java source folders
* to whoever queries the model.
*
* @param sourceFolders the source folders where the generated source code is.
*/
void addJavaSourceFoldersToModel(@NonNull Collection<File> sourceFolders);
/**
* Adds to the variant a task that generates Java source code.
*
* This will make the generate[Variant]Sources task depend on this task and add the
* new source folders as compilation inputs.
*
* The new source folders are also added to the model.
*
* @param task the task
* @param sourceFolders the source folders where the generated source code is.
*/
void registerJavaGeneratingTask(@NonNull Task task, @NonNull File... sourceFolders);
/**
* Adds to the variant a task that generates Java source code.
*
* This will make the generate[Variant]Sources task depend on this task and add the
* new source folders as compilation inputs.
*
* The new source folders are also added to the model.
*
* @param task the task
* @param sourceFolders the source folders where the generated source code is.
*/
void registerJavaGeneratingTask(@NonNull Task task, @NonNull Collection<File> sourceFolders);
/**
* Adds to the variant a task that generates Resources.
*
* This will make the generate[Variant]Resources task depend on this task and add the
* new Resource folders as Resource merge inputs.
*
* The Resource folders are also added to the model.
*
* @param task the task
* @param resFolders the folders where the generated resources are.
*/
void registerResGeneratingTask(@NonNull Task task, @NonNull File... resFolders);
/**
* Adds to the variant a task that generates Resources.
*
* This will make the generate[Variant]Resources task depend on this task and add the
* new Resource folders as Resource merge inputs.
*
* The Resource folders are also added to the model.
*
* @param task the task
* @param resFolders the folders where the generated resources are.
*/
void registerResGeneratingTask(@NonNull Task task, @NonNull Collection<File> resFolders);
/**
* Adds a variant-specific BuildConfig field.
* @param type the type of the field
* @param name the name of the field
* @param value the value of the field
*/
void buildConfigField(@NonNull String type, @NonNull String name, @NonNull String value);
/**
* Adds a variant-specific res value.
* @param type the type of the field
* @param name the name of the field
* @param value the value of the field
*/
void resValue(@NonNull String type, @NonNull String name, @NonNull String value);
/**
* If true, variant outputs will be considered signed. Only set if you manually set the outputs
* to point to signed files built by other tasks.
*/
void setOutputsAreSigned(boolean isSigned);
/**
* @see #setOutputsAreSigned(boolean)
*/
boolean getOutputsAreSigned();
}