| /* |
| * 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.builder.model; |
| |
| import com.android.annotations.NonNull; |
| import com.android.annotations.Nullable; |
| |
| import java.io.File; |
| import java.util.Collection; |
| |
| /** |
| * Entry point for the model of the Android Projects. This models a single module, whether |
| * the module is an app project or a library project. |
| */ |
| public interface AndroidProject { |
| // Injectable properties to use with -P |
| // Sent by Studio 1.0 ONLY |
| String PROPERTY_BUILD_MODEL_ONLY = "android.injected.build.model.only"; |
| // Sent by Studio 1.1+ |
| String PROPERTY_BUILD_MODEL_ONLY_ADVANCED = "android.injected.build.model.only.advanced"; |
| // Sent by Studio 1.5+ |
| String PROPERTY_BUILD_API = "android.injected.build.api"; |
| String PROPERTY_BUILD_ABI = "android.injected.build.abi"; |
| String PROPERTY_BUILD_DENSITY = "android.injected.build.density"; |
| |
| String PROPERTY_INVOKED_FROM_IDE = "android.injected.invoked.from.ide"; |
| |
| String PROPERTY_SIGNING_STORE_FILE = "android.injected.signing.store.file"; |
| String PROPERTY_SIGNING_STORE_PASSWORD = "android.injected.signing.store.password"; |
| String PROPERTY_SIGNING_KEY_ALIAS = "android.injected.signing.key.alias"; |
| String PROPERTY_SIGNING_KEY_PASSWORD = "android.injected.signing.key.password"; |
| String PROPERTY_SIGNING_STORE_TYPE = "android.injected.signing.store.type"; |
| |
| String PROPERTY_SIGNING_COLDSWAP_MODE = "android.injected.coldswap.mode"; |
| |
| // InstantDev related properties, must be ',' separated list of OptionalCompilationStep values. |
| String OPTIONAL_COMPILATION_STEPS = "android.optional.compilation"; |
| |
| String PROPERTY_APK_LOCATION = "android.injected.apk.location"; |
| |
| String ARTIFACT_MAIN = "_main_"; |
| String ARTIFACT_ANDROID_TEST = "_android_test_"; |
| String ARTIFACT_UNIT_TEST = "_unit_test_"; |
| |
| String FD_INTERMEDIATES = "intermediates"; |
| String FD_LOGS = "logs"; |
| String FD_OUTPUTS = "outputs"; |
| String FD_GENERATED = "generated"; |
| |
| int GENERATION_ORIGINAL = 1; |
| int GENERATION_COMPONENT = 2; |
| |
| /** |
| * Returns the model version. This is a string in the format X.Y.Z |
| * |
| * @return a string containing the model version. |
| */ |
| @NonNull |
| String getModelVersion(); |
| |
| /** |
| * Returns the model api version. |
| * <p/> |
| * This is different from {@link #getModelVersion()} in a way that new model |
| * version might increment model version but keep existing api. That means that |
| * code which was built against particular 'api version' might be safely re-used for all |
| * new model versions as long as they don't change the api. |
| * <p/> |
| * Every new model version is assumed to return an 'api version' value which |
| * is equal or greater than the value used by the previous model version. |
| * |
| * @return model's api version |
| */ |
| int getApiVersion(); |
| |
| /** |
| * Returns the name of the module. |
| * |
| * @return the name of the module. |
| */ |
| @NonNull |
| String getName(); |
| |
| /** |
| * Returns whether this is a library. |
| * @return true for a library module. |
| */ |
| boolean isLibrary(); |
| |
| /** |
| * Returns the {@link ProductFlavorContainer} for the 'main' default config. |
| * |
| * @return the product flavor. |
| */ |
| @NonNull |
| ProductFlavorContainer getDefaultConfig(); |
| |
| /** |
| * Returns a list of all the {@link BuildType} in their container. |
| * |
| * @return a list of build type containers. |
| */ |
| @NonNull |
| Collection<BuildTypeContainer> getBuildTypes(); |
| |
| /** |
| * Returns a list of all the {@link ProductFlavor} in their container. |
| * |
| * @return a list of product flavor containers. |
| */ |
| @NonNull |
| Collection<ProductFlavorContainer> getProductFlavors(); |
| |
| /** |
| * Returns a list of all the variants. |
| * |
| * This does not include test variant. Test variants are additional artifacts in their |
| * respective variant info. |
| * |
| * @return a list of the variants. |
| */ |
| @NonNull |
| Collection<Variant> getVariants(); |
| |
| /** |
| * Returns a list of all the flavor dimensions, may be empty. |
| * |
| * @return a list of the flavor dimensions. |
| */ |
| @NonNull |
| Collection<String> getFlavorDimensions(); |
| |
| /** |
| * Returns a list of extra artifacts meta data. This does not include the main artifact. |
| * |
| * @return a list of extra artifacts |
| */ |
| @NonNull |
| Collection<ArtifactMetaData> getExtraArtifacts(); |
| |
| /** |
| * Returns the compilation target as a string. This is the full extended target hash string. |
| * (see com.android.sdklib.IAndroidTarget#hashString()) |
| * |
| * @return the target hash string |
| */ |
| @NonNull |
| String getCompileTarget(); |
| |
| /** |
| * Returns the boot classpath matching the compile target. This is typically android.jar plus |
| * other optional libraries. |
| * |
| * @return a list of jar files. |
| */ |
| @NonNull |
| Collection<String> getBootClasspath(); |
| |
| /** |
| * Returns a list of folders or jar files that contains the framework source code. |
| */ |
| @NonNull |
| Collection<File> getFrameworkSources(); |
| |
| /** |
| * Returns the collection of toolchains used to create any native libraries. |
| * |
| * @return collection of toolchains. |
| */ |
| @NonNull |
| Collection<NativeToolchain> getNativeToolchains(); |
| |
| /** |
| * Returns a list of {@link SigningConfig}. |
| */ |
| @NonNull |
| Collection<SigningConfig> getSigningConfigs(); |
| |
| /** |
| * Returns the aapt options. |
| */ |
| @NonNull |
| AaptOptions getAaptOptions(); |
| |
| /** |
| * Returns the lint options. |
| */ |
| @NonNull |
| LintOptions getLintOptions(); |
| |
| /** |
| * Returns the dependencies that were not successfully resolved. The returned list gets |
| * populated only if the system property {@link #PROPERTY_BUILD_MODEL_ONLY} has been |
| * set to {@code true}. |
| * <p> |
| * Each value of the collection has the format group:name:version, for example: |
| * com.google.guava:guava:15.0.2 |
| * |
| * @return the dependencies that were not successfully resolved. |
| * @deprecated use {@link #getSyncIssues()} |
| */ |
| @Deprecated |
| @NonNull |
| Collection<String> getUnresolvedDependencies(); |
| |
| /** |
| * Returns issues found during sync. The returned list gets |
| * populated only if the system property {@link #PROPERTY_BUILD_MODEL_ONLY} has been |
| * set to {@code true}. |
| */ |
| @NonNull |
| Collection<SyncIssue> getSyncIssues(); |
| |
| /** |
| * Returns the compile options for Java code. |
| */ |
| @NonNull |
| JavaCompileOptions getJavaCompileOptions(); |
| |
| /** |
| * Returns the build folder of this project. |
| */ |
| @NonNull |
| File getBuildFolder(); |
| |
| /** |
| * Returns the resource prefix to use, if any. This is an optional prefix which can |
| * be set and which is used by the defaults to automatically choose new resources |
| * with a certain prefix, warn if resources are not using the given prefix, etc. |
| * This helps work with resources in the app namespace where there could otherwise |
| * be unintentional duplicated resource names between unrelated libraries. |
| * |
| * @return the optional resource prefix, or null if not set |
| */ |
| @Nullable |
| String getResourcePrefix(); |
| |
| /** |
| * Returns the build tools version used by this module. |
| * @return the build tools version. |
| */ |
| @NonNull |
| String getBuildToolsVersion(); |
| |
| /** |
| * Returns the generation of the plugin. |
| * |
| * 1: original plugin |
| * 2: component based plugin (AKA experimental) |
| * @return the generation value |
| */ |
| int getPluginGeneration(); |
| } |